@ui5/webcomponents 2.13.2 → 2.14.0-rc.1

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 (542) hide show
  1. package/CHANGELOG.md +24 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/Button.js +2 -1
  4. package/dist/Button.js.map +1 -1
  5. package/dist/DateComponentBase.d.ts +24 -0
  6. package/dist/DateComponentBase.js +80 -1
  7. package/dist/DateComponentBase.js.map +1 -1
  8. package/dist/DatePicker.d.ts +32 -1
  9. package/dist/DatePicker.js +94 -10
  10. package/dist/DatePicker.js.map +1 -1
  11. package/dist/DatePickerInputTemplate.js +1 -1
  12. package/dist/DatePickerInputTemplate.js.map +1 -1
  13. package/dist/DateRangePicker.d.ts +35 -0
  14. package/dist/DateRangePicker.js +119 -9
  15. package/dist/DateRangePicker.js.map +1 -1
  16. package/dist/DateTimePicker.d.ts +10 -0
  17. package/dist/DateTimePicker.js +54 -4
  18. package/dist/DateTimePicker.js.map +1 -1
  19. package/dist/DynamicDateRange.d.ts +24 -9
  20. package/dist/DynamicDateRange.js +83 -22
  21. package/dist/DynamicDateRange.js.map +1 -1
  22. package/dist/DynamicDateRangeInputTemplate.js +1 -3
  23. package/dist/DynamicDateRangeInputTemplate.js.map +1 -1
  24. package/dist/DynamicDateRangePopoverTemplate.js +1 -3
  25. package/dist/DynamicDateRangePopoverTemplate.js.map +1 -1
  26. package/dist/List.d.ts +2 -0
  27. package/dist/List.js +13 -26
  28. package/dist/List.js.map +1 -1
  29. package/dist/ListItemGroup.d.ts +4 -0
  30. package/dist/ListItemGroup.js +20 -53
  31. package/dist/ListItemGroup.js.map +1 -1
  32. package/dist/Select.d.ts +1 -0
  33. package/dist/Select.js +3 -0
  34. package/dist/Select.js.map +1 -1
  35. package/dist/SelectPopoverTemplate.js +1 -1
  36. package/dist/SelectPopoverTemplate.js.map +1 -1
  37. package/dist/SelectTemplate.js +2 -2
  38. package/dist/SelectTemplate.js.map +1 -1
  39. package/dist/Tree.d.ts +7 -0
  40. package/dist/Tree.js +37 -38
  41. package/dist/Tree.js.map +1 -1
  42. package/dist/bundle.esm.js +2 -0
  43. package/dist/bundle.esm.js.map +1 -1
  44. package/dist/css/themes/Avatar.css +1 -1
  45. package/dist/css/themes/AvatarGroup.css +1 -1
  46. package/dist/css/themes/Bar.css +1 -1
  47. package/dist/css/themes/Breadcrumbs.css +1 -1
  48. package/dist/css/themes/BusyIndicator.css +1 -1
  49. package/dist/css/themes/Button.css +1 -1
  50. package/dist/css/themes/ButtonBadge.css +1 -1
  51. package/dist/css/themes/Calendar.css +1 -1
  52. package/dist/css/themes/CalendarHeader.css +1 -1
  53. package/dist/css/themes/CalendarLegend.css +1 -1
  54. package/dist/css/themes/CalendarLegendItem.css +1 -1
  55. package/dist/css/themes/Card.css +1 -1
  56. package/dist/css/themes/CardHeader.css +1 -1
  57. package/dist/css/themes/Carousel.css +1 -1
  58. package/dist/css/themes/CheckBox.css +1 -1
  59. package/dist/css/themes/ColorPalette.css +1 -1
  60. package/dist/css/themes/ColorPaletteItem.css +1 -1
  61. package/dist/css/themes/ColorPalettePopover.css +1 -1
  62. package/dist/css/themes/ColorPicker.css +1 -1
  63. package/dist/css/themes/ComboBox.css +1 -1
  64. package/dist/css/themes/ComboBoxItem.css +1 -1
  65. package/dist/css/themes/DatePicker.css +1 -1
  66. package/dist/css/themes/DateTimePickerPopover.css +1 -1
  67. package/dist/css/themes/DayPicker.css +1 -1
  68. package/dist/css/themes/Dialog.css +1 -1
  69. package/dist/css/themes/DynamicDateRange.css +1 -1
  70. package/dist/css/themes/DynamicDateRangePopover.css +1 -1
  71. package/dist/css/themes/FileUploader.css +1 -1
  72. package/dist/css/themes/Form.css +1 -1
  73. package/dist/css/themes/FormItem.css +1 -1
  74. package/dist/css/themes/FormItemSpan.css +1 -1
  75. package/dist/css/themes/GrowingButton.css +1 -1
  76. package/dist/css/themes/Icon.css +1 -1
  77. package/dist/css/themes/Input.css +1 -1
  78. package/dist/css/themes/InputIcon.css +1 -1
  79. package/dist/css/themes/InputSharedStyles.css +1 -1
  80. package/dist/css/themes/Link.css +1 -1
  81. package/dist/css/themes/List.css +1 -1
  82. package/dist/css/themes/ListItem.css +1 -1
  83. package/dist/css/themes/ListItemBase.css +1 -1
  84. package/dist/css/themes/ListItemCustom.css +1 -1
  85. package/dist/css/themes/ListItemGroup.css +1 -1
  86. package/dist/css/themes/ListItemGroupHeader.css +1 -1
  87. package/dist/css/themes/ListItemIcon.css +1 -1
  88. package/dist/css/themes/Menu.css +1 -1
  89. package/dist/css/themes/MenuItem.css +1 -1
  90. package/dist/css/themes/MessageStrip.css +1 -1
  91. package/dist/css/themes/MonthPicker.css +1 -1
  92. package/dist/css/themes/MultiComboBox.css +1 -1
  93. package/dist/css/themes/MultiComboBoxItem.css +1 -1
  94. package/dist/css/themes/MultiComboBoxPopover.css +1 -1
  95. package/dist/css/themes/MultiInput.css +1 -1
  96. package/dist/css/themes/OptionBase.css +1 -1
  97. package/dist/css/themes/Panel.css +1 -1
  98. package/dist/css/themes/Popover.css +1 -1
  99. package/dist/css/themes/PopupsCommon.css +1 -1
  100. package/dist/css/themes/ProgressIndicator.css +1 -1
  101. package/dist/css/themes/RadioButton.css +1 -1
  102. package/dist/css/themes/RangeSlider.css +1 -1
  103. package/dist/css/themes/RatingIndicator.css +1 -1
  104. package/dist/css/themes/ResponsivePopover.css +1 -1
  105. package/dist/css/themes/ResponsivePopoverCommon.css +1 -1
  106. package/dist/css/themes/SegmentedButton.css +1 -1
  107. package/dist/css/themes/SegmentedButtonItem.css +1 -1
  108. package/dist/css/themes/Select.css +1 -1
  109. package/dist/css/themes/SliderBase.css +1 -1
  110. package/dist/css/themes/SplitButton.css +1 -1
  111. package/dist/css/themes/StepInput.css +1 -1
  112. package/dist/css/themes/SuggestionItem.css +1 -1
  113. package/dist/css/themes/SuggestionItemCustom.css +1 -1
  114. package/dist/css/themes/Switch.css +1 -1
  115. package/dist/css/themes/TabContainer.css +1 -1
  116. package/dist/css/themes/TabInOverflow.css +1 -1
  117. package/dist/css/themes/TabInStrip.css +1 -1
  118. package/dist/css/themes/TabSemanticIcon.css +1 -1
  119. package/dist/css/themes/TabSeparatorInOverflow.css +1 -1
  120. package/dist/css/themes/TableCellBase.css +1 -1
  121. package/dist/css/themes/TableHeaderRow.css +1 -1
  122. package/dist/css/themes/TableRow.css +1 -1
  123. package/dist/css/themes/TableRowActionBase.css +1 -1
  124. package/dist/css/themes/TableRowBase.css +1 -1
  125. package/dist/css/themes/Tag.css +1 -1
  126. package/dist/css/themes/Text.css +1 -1
  127. package/dist/css/themes/TextArea.css +1 -1
  128. package/dist/css/themes/TimePicker.css +1 -1
  129. package/dist/css/themes/Toast.css +1 -1
  130. package/dist/css/themes/ToggleButton.css +1 -1
  131. package/dist/css/themes/Token.css +1 -1
  132. package/dist/css/themes/Tokenizer.css +1 -1
  133. package/dist/css/themes/TokenizerPopover.css +1 -1
  134. package/dist/css/themes/Toolbar.css +1 -1
  135. package/dist/css/themes/ToolbarButton.css +1 -1
  136. package/dist/css/themes/ToolbarPopover.css +1 -1
  137. package/dist/css/themes/ToolbarSeparator.css +1 -1
  138. package/dist/css/themes/TreeItem.css +1 -1
  139. package/dist/css/themes/ValueStateMessage.css +1 -1
  140. package/dist/css/themes/ValueStateVariables.css +1 -1
  141. package/dist/css/themes/YearPicker.css +1 -1
  142. package/dist/css/themes/YearRangePicker.css +1 -1
  143. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  144. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  145. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  146. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  147. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  148. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  149. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  150. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  151. package/dist/custom-elements-internal.json +558 -9
  152. package/dist/custom-elements.json +527 -8
  153. package/dist/delegate/DragAndDropHandler.d.ts +33 -0
  154. package/dist/delegate/DragAndDropHandler.js +96 -0
  155. package/dist/delegate/DragAndDropHandler.js.map +1 -0
  156. package/dist/dynamic-date-range-options/DateRange.d.ts +3 -3
  157. package/dist/dynamic-date-range-options/DateRange.js +18 -8
  158. package/dist/dynamic-date-range-options/DateRange.js.map +1 -1
  159. package/dist/dynamic-date-range-options/DateRangeTemplate.d.ts +1 -1
  160. package/dist/dynamic-date-range-options/DateRangeTemplate.js +1 -1
  161. package/dist/dynamic-date-range-options/DateRangeTemplate.js.map +1 -1
  162. package/dist/dynamic-date-range-options/LastNextTemplate.d.ts +2 -0
  163. package/dist/dynamic-date-range-options/LastNextTemplate.js +32 -0
  164. package/dist/dynamic-date-range-options/LastNextTemplate.js.map +1 -0
  165. package/dist/dynamic-date-range-options/LastNextUtils.d.ts +65 -0
  166. package/dist/dynamic-date-range-options/LastNextUtils.js +123 -0
  167. package/dist/dynamic-date-range-options/LastNextUtils.js.map +1 -0
  168. package/dist/dynamic-date-range-options/LastOptions.d.ts +32 -0
  169. package/dist/dynamic-date-range-options/LastOptions.js +107 -0
  170. package/dist/dynamic-date-range-options/LastOptions.js.map +1 -0
  171. package/dist/dynamic-date-range-options/NextOptions.d.ts +32 -0
  172. package/dist/dynamic-date-range-options/NextOptions.js +107 -0
  173. package/dist/dynamic-date-range-options/NextOptions.js.map +1 -0
  174. package/dist/dynamic-date-range-options/SingleDate.d.ts +1 -1
  175. package/dist/dynamic-date-range-options/SingleDate.js +1 -1
  176. package/dist/dynamic-date-range-options/SingleDate.js.map +1 -1
  177. package/dist/dynamic-date-range-options/Today.d.ts +1 -1
  178. package/dist/dynamic-date-range-options/Today.js.map +1 -1
  179. package/dist/dynamic-date-range-options/Tomorrow.d.ts +1 -1
  180. package/dist/dynamic-date-range-options/Tomorrow.js.map +1 -1
  181. package/dist/dynamic-date-range-options/Yesterday.d.ts +1 -1
  182. package/dist/dynamic-date-range-options/Yesterday.js.map +1 -1
  183. package/dist/dynamic-date-range-options/toDates.d.ts +13 -7
  184. package/dist/dynamic-date-range-options/toDates.js +137 -20
  185. package/dist/dynamic-date-range-options/toDates.js.map +1 -1
  186. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  187. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  188. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  189. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  190. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  191. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  192. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  193. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  194. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  195. package/dist/generated/i18n/i18n-defaults.d.ts +21 -1
  196. package/dist/generated/i18n/i18n-defaults.js +21 -1
  197. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  198. package/dist/generated/themes/Avatar.css.d.ts +1 -1
  199. package/dist/generated/themes/Avatar.css.js +1 -1
  200. package/dist/generated/themes/Avatar.css.js.map +1 -1
  201. package/dist/generated/themes/AvatarGroup.css.d.ts +1 -1
  202. package/dist/generated/themes/AvatarGroup.css.js +1 -1
  203. package/dist/generated/themes/AvatarGroup.css.js.map +1 -1
  204. package/dist/generated/themes/Bar.css.d.ts +1 -1
  205. package/dist/generated/themes/Bar.css.js +1 -1
  206. package/dist/generated/themes/Bar.css.js.map +1 -1
  207. package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
  208. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  209. package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
  210. package/dist/generated/themes/BusyIndicator.css.d.ts +1 -1
  211. package/dist/generated/themes/BusyIndicator.css.js +1 -1
  212. package/dist/generated/themes/BusyIndicator.css.js.map +1 -1
  213. package/dist/generated/themes/Button.css.d.ts +1 -1
  214. package/dist/generated/themes/Button.css.js +1 -1
  215. package/dist/generated/themes/Button.css.js.map +1 -1
  216. package/dist/generated/themes/ButtonBadge.css.d.ts +1 -1
  217. package/dist/generated/themes/ButtonBadge.css.js +1 -1
  218. package/dist/generated/themes/ButtonBadge.css.js.map +1 -1
  219. package/dist/generated/themes/Calendar.css.d.ts +1 -1
  220. package/dist/generated/themes/Calendar.css.js +1 -1
  221. package/dist/generated/themes/Calendar.css.js.map +1 -1
  222. package/dist/generated/themes/CalendarHeader.css.d.ts +1 -1
  223. package/dist/generated/themes/CalendarHeader.css.js +1 -1
  224. package/dist/generated/themes/CalendarHeader.css.js.map +1 -1
  225. package/dist/generated/themes/CalendarLegend.css.d.ts +1 -1
  226. package/dist/generated/themes/CalendarLegend.css.js +1 -1
  227. package/dist/generated/themes/CalendarLegend.css.js.map +1 -1
  228. package/dist/generated/themes/CalendarLegendItem.css.d.ts +1 -1
  229. package/dist/generated/themes/CalendarLegendItem.css.js +1 -1
  230. package/dist/generated/themes/CalendarLegendItem.css.js.map +1 -1
  231. package/dist/generated/themes/Card.css.d.ts +1 -1
  232. package/dist/generated/themes/Card.css.js +1 -1
  233. package/dist/generated/themes/Card.css.js.map +1 -1
  234. package/dist/generated/themes/CardHeader.css.d.ts +1 -1
  235. package/dist/generated/themes/CardHeader.css.js +1 -1
  236. package/dist/generated/themes/CardHeader.css.js.map +1 -1
  237. package/dist/generated/themes/Carousel.css.d.ts +1 -1
  238. package/dist/generated/themes/Carousel.css.js +1 -1
  239. package/dist/generated/themes/Carousel.css.js.map +1 -1
  240. package/dist/generated/themes/CheckBox.css.d.ts +1 -1
  241. package/dist/generated/themes/CheckBox.css.js +1 -1
  242. package/dist/generated/themes/CheckBox.css.js.map +1 -1
  243. package/dist/generated/themes/ColorPalette.css.d.ts +1 -1
  244. package/dist/generated/themes/ColorPalette.css.js +1 -1
  245. package/dist/generated/themes/ColorPalette.css.js.map +1 -1
  246. package/dist/generated/themes/ColorPaletteItem.css.d.ts +1 -1
  247. package/dist/generated/themes/ColorPaletteItem.css.js +1 -1
  248. package/dist/generated/themes/ColorPaletteItem.css.js.map +1 -1
  249. package/dist/generated/themes/ColorPalettePopover.css.d.ts +1 -1
  250. package/dist/generated/themes/ColorPalettePopover.css.js +1 -1
  251. package/dist/generated/themes/ColorPalettePopover.css.js.map +1 -1
  252. package/dist/generated/themes/ColorPicker.css.d.ts +1 -1
  253. package/dist/generated/themes/ColorPicker.css.js +1 -1
  254. package/dist/generated/themes/ColorPicker.css.js.map +1 -1
  255. package/dist/generated/themes/ComboBox.css.d.ts +1 -1
  256. package/dist/generated/themes/ComboBox.css.js +1 -1
  257. package/dist/generated/themes/ComboBox.css.js.map +1 -1
  258. package/dist/generated/themes/ComboBoxItem.css.d.ts +1 -1
  259. package/dist/generated/themes/ComboBoxItem.css.js +1 -1
  260. package/dist/generated/themes/ComboBoxItem.css.js.map +1 -1
  261. package/dist/generated/themes/DatePicker.css.d.ts +1 -1
  262. package/dist/generated/themes/DatePicker.css.js +1 -1
  263. package/dist/generated/themes/DatePicker.css.js.map +1 -1
  264. package/dist/generated/themes/DateTimePickerPopover.css.d.ts +1 -1
  265. package/dist/generated/themes/DateTimePickerPopover.css.js +1 -1
  266. package/dist/generated/themes/DateTimePickerPopover.css.js.map +1 -1
  267. package/dist/generated/themes/DayPicker.css.d.ts +1 -1
  268. package/dist/generated/themes/DayPicker.css.js +1 -1
  269. package/dist/generated/themes/DayPicker.css.js.map +1 -1
  270. package/dist/generated/themes/Dialog.css.d.ts +1 -1
  271. package/dist/generated/themes/Dialog.css.js +1 -1
  272. package/dist/generated/themes/Dialog.css.js.map +1 -1
  273. package/dist/generated/themes/DynamicDateRange.css.d.ts +1 -1
  274. package/dist/generated/themes/DynamicDateRange.css.js +1 -1
  275. package/dist/generated/themes/DynamicDateRange.css.js.map +1 -1
  276. package/dist/generated/themes/DynamicDateRangePopover.css.d.ts +1 -1
  277. package/dist/generated/themes/DynamicDateRangePopover.css.js +1 -1
  278. package/dist/generated/themes/DynamicDateRangePopover.css.js.map +1 -1
  279. package/dist/generated/themes/FileUploader.css.d.ts +1 -1
  280. package/dist/generated/themes/FileUploader.css.js +1 -1
  281. package/dist/generated/themes/FileUploader.css.js.map +1 -1
  282. package/dist/generated/themes/Form.css.d.ts +1 -1
  283. package/dist/generated/themes/Form.css.js +1 -1
  284. package/dist/generated/themes/Form.css.js.map +1 -1
  285. package/dist/generated/themes/FormItem.css.d.ts +1 -1
  286. package/dist/generated/themes/FormItem.css.js +1 -1
  287. package/dist/generated/themes/FormItem.css.js.map +1 -1
  288. package/dist/generated/themes/FormItemSpan.css.d.ts +1 -1
  289. package/dist/generated/themes/FormItemSpan.css.js +1 -1
  290. package/dist/generated/themes/FormItemSpan.css.js.map +1 -1
  291. package/dist/generated/themes/GrowingButton.css.d.ts +1 -1
  292. package/dist/generated/themes/GrowingButton.css.js +1 -1
  293. package/dist/generated/themes/GrowingButton.css.js.map +1 -1
  294. package/dist/generated/themes/Icon.css.d.ts +1 -1
  295. package/dist/generated/themes/Icon.css.js +1 -1
  296. package/dist/generated/themes/Icon.css.js.map +1 -1
  297. package/dist/generated/themes/Input.css.d.ts +1 -1
  298. package/dist/generated/themes/Input.css.js +1 -1
  299. package/dist/generated/themes/Input.css.js.map +1 -1
  300. package/dist/generated/themes/InputIcon.css.d.ts +1 -1
  301. package/dist/generated/themes/InputIcon.css.js +1 -1
  302. package/dist/generated/themes/InputIcon.css.js.map +1 -1
  303. package/dist/generated/themes/InputSharedStyles.css.d.ts +1 -1
  304. package/dist/generated/themes/InputSharedStyles.css.js +1 -1
  305. package/dist/generated/themes/InputSharedStyles.css.js.map +1 -1
  306. package/dist/generated/themes/Link.css.d.ts +1 -1
  307. package/dist/generated/themes/Link.css.js +1 -1
  308. package/dist/generated/themes/Link.css.js.map +1 -1
  309. package/dist/generated/themes/List.css.d.ts +1 -1
  310. package/dist/generated/themes/List.css.js +1 -1
  311. package/dist/generated/themes/List.css.js.map +1 -1
  312. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  313. package/dist/generated/themes/ListItem.css.js +1 -1
  314. package/dist/generated/themes/ListItem.css.js.map +1 -1
  315. package/dist/generated/themes/ListItemBase.css.d.ts +1 -1
  316. package/dist/generated/themes/ListItemBase.css.js +1 -1
  317. package/dist/generated/themes/ListItemBase.css.js.map +1 -1
  318. package/dist/generated/themes/ListItemCustom.css.d.ts +1 -1
  319. package/dist/generated/themes/ListItemCustom.css.js +1 -1
  320. package/dist/generated/themes/ListItemCustom.css.js.map +1 -1
  321. package/dist/generated/themes/ListItemGroup.css.d.ts +1 -1
  322. package/dist/generated/themes/ListItemGroup.css.js +1 -1
  323. package/dist/generated/themes/ListItemGroup.css.js.map +1 -1
  324. package/dist/generated/themes/ListItemGroupHeader.css.d.ts +1 -1
  325. package/dist/generated/themes/ListItemGroupHeader.css.js +1 -1
  326. package/dist/generated/themes/ListItemGroupHeader.css.js.map +1 -1
  327. package/dist/generated/themes/ListItemIcon.css.d.ts +1 -1
  328. package/dist/generated/themes/ListItemIcon.css.js +1 -1
  329. package/dist/generated/themes/ListItemIcon.css.js.map +1 -1
  330. package/dist/generated/themes/Menu.css.d.ts +1 -1
  331. package/dist/generated/themes/Menu.css.js +1 -1
  332. package/dist/generated/themes/Menu.css.js.map +1 -1
  333. package/dist/generated/themes/MenuItem.css.d.ts +1 -1
  334. package/dist/generated/themes/MenuItem.css.js +1 -1
  335. package/dist/generated/themes/MenuItem.css.js.map +1 -1
  336. package/dist/generated/themes/MessageStrip.css.d.ts +1 -1
  337. package/dist/generated/themes/MessageStrip.css.js +1 -1
  338. package/dist/generated/themes/MessageStrip.css.js.map +1 -1
  339. package/dist/generated/themes/MonthPicker.css.d.ts +1 -1
  340. package/dist/generated/themes/MonthPicker.css.js +1 -1
  341. package/dist/generated/themes/MonthPicker.css.js.map +1 -1
  342. package/dist/generated/themes/MultiComboBox.css.d.ts +1 -1
  343. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  344. package/dist/generated/themes/MultiComboBox.css.js.map +1 -1
  345. package/dist/generated/themes/MultiComboBoxItem.css.d.ts +1 -1
  346. package/dist/generated/themes/MultiComboBoxItem.css.js +1 -1
  347. package/dist/generated/themes/MultiComboBoxItem.css.js.map +1 -1
  348. package/dist/generated/themes/MultiComboBoxPopover.css.d.ts +1 -1
  349. package/dist/generated/themes/MultiComboBoxPopover.css.js +1 -1
  350. package/dist/generated/themes/MultiComboBoxPopover.css.js.map +1 -1
  351. package/dist/generated/themes/MultiInput.css.d.ts +1 -1
  352. package/dist/generated/themes/MultiInput.css.js +1 -1
  353. package/dist/generated/themes/MultiInput.css.js.map +1 -1
  354. package/dist/generated/themes/OptionBase.css.d.ts +1 -1
  355. package/dist/generated/themes/OptionBase.css.js +1 -1
  356. package/dist/generated/themes/OptionBase.css.js.map +1 -1
  357. package/dist/generated/themes/Panel.css.d.ts +1 -1
  358. package/dist/generated/themes/Panel.css.js +1 -1
  359. package/dist/generated/themes/Panel.css.js.map +1 -1
  360. package/dist/generated/themes/Popover.css.d.ts +1 -1
  361. package/dist/generated/themes/Popover.css.js +1 -1
  362. package/dist/generated/themes/Popover.css.js.map +1 -1
  363. package/dist/generated/themes/PopupsCommon.css.d.ts +1 -1
  364. package/dist/generated/themes/PopupsCommon.css.js +1 -1
  365. package/dist/generated/themes/PopupsCommon.css.js.map +1 -1
  366. package/dist/generated/themes/ProgressIndicator.css.d.ts +1 -1
  367. package/dist/generated/themes/ProgressIndicator.css.js +1 -1
  368. package/dist/generated/themes/ProgressIndicator.css.js.map +1 -1
  369. package/dist/generated/themes/RadioButton.css.d.ts +1 -1
  370. package/dist/generated/themes/RadioButton.css.js +1 -1
  371. package/dist/generated/themes/RadioButton.css.js.map +1 -1
  372. package/dist/generated/themes/RangeSlider.css.d.ts +1 -1
  373. package/dist/generated/themes/RangeSlider.css.js +1 -1
  374. package/dist/generated/themes/RangeSlider.css.js.map +1 -1
  375. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  376. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  377. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  378. package/dist/generated/themes/ResponsivePopover.css.d.ts +1 -1
  379. package/dist/generated/themes/ResponsivePopover.css.js +1 -1
  380. package/dist/generated/themes/ResponsivePopover.css.js.map +1 -1
  381. package/dist/generated/themes/ResponsivePopoverCommon.css.d.ts +1 -1
  382. package/dist/generated/themes/ResponsivePopoverCommon.css.js +1 -1
  383. package/dist/generated/themes/ResponsivePopoverCommon.css.js.map +1 -1
  384. package/dist/generated/themes/SegmentedButton.css.d.ts +1 -1
  385. package/dist/generated/themes/SegmentedButton.css.js +1 -1
  386. package/dist/generated/themes/SegmentedButton.css.js.map +1 -1
  387. package/dist/generated/themes/SegmentedButtonItem.css.d.ts +1 -1
  388. package/dist/generated/themes/SegmentedButtonItem.css.js +1 -1
  389. package/dist/generated/themes/SegmentedButtonItem.css.js.map +1 -1
  390. package/dist/generated/themes/Select.css.d.ts +1 -1
  391. package/dist/generated/themes/Select.css.js +1 -1
  392. package/dist/generated/themes/Select.css.js.map +1 -1
  393. package/dist/generated/themes/SliderBase.css.d.ts +1 -1
  394. package/dist/generated/themes/SliderBase.css.js +1 -1
  395. package/dist/generated/themes/SliderBase.css.js.map +1 -1
  396. package/dist/generated/themes/SplitButton.css.d.ts +1 -1
  397. package/dist/generated/themes/SplitButton.css.js +1 -1
  398. package/dist/generated/themes/SplitButton.css.js.map +1 -1
  399. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  400. package/dist/generated/themes/StepInput.css.js +1 -1
  401. package/dist/generated/themes/StepInput.css.js.map +1 -1
  402. package/dist/generated/themes/SuggestionItem.css.d.ts +1 -1
  403. package/dist/generated/themes/SuggestionItem.css.js +1 -1
  404. package/dist/generated/themes/SuggestionItem.css.js.map +1 -1
  405. package/dist/generated/themes/SuggestionItemCustom.css.d.ts +1 -1
  406. package/dist/generated/themes/SuggestionItemCustom.css.js +1 -1
  407. package/dist/generated/themes/SuggestionItemCustom.css.js.map +1 -1
  408. package/dist/generated/themes/Switch.css.d.ts +1 -1
  409. package/dist/generated/themes/Switch.css.js +1 -1
  410. package/dist/generated/themes/Switch.css.js.map +1 -1
  411. package/dist/generated/themes/TabContainer.css.d.ts +1 -1
  412. package/dist/generated/themes/TabContainer.css.js +1 -1
  413. package/dist/generated/themes/TabContainer.css.js.map +1 -1
  414. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  415. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  416. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  417. package/dist/generated/themes/TabInStrip.css.d.ts +1 -1
  418. package/dist/generated/themes/TabInStrip.css.js +1 -1
  419. package/dist/generated/themes/TabInStrip.css.js.map +1 -1
  420. package/dist/generated/themes/TabSemanticIcon.css.d.ts +1 -1
  421. package/dist/generated/themes/TabSemanticIcon.css.js +1 -1
  422. package/dist/generated/themes/TabSemanticIcon.css.js.map +1 -1
  423. package/dist/generated/themes/TabSeparatorInOverflow.css.d.ts +1 -1
  424. package/dist/generated/themes/TabSeparatorInOverflow.css.js +1 -1
  425. package/dist/generated/themes/TabSeparatorInOverflow.css.js.map +1 -1
  426. package/dist/generated/themes/TableCellBase.css.d.ts +1 -1
  427. package/dist/generated/themes/TableCellBase.css.js +1 -1
  428. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  429. package/dist/generated/themes/TableHeaderRow.css.d.ts +1 -1
  430. package/dist/generated/themes/TableHeaderRow.css.js +1 -1
  431. package/dist/generated/themes/TableHeaderRow.css.js.map +1 -1
  432. package/dist/generated/themes/TableRow.css.d.ts +1 -1
  433. package/dist/generated/themes/TableRow.css.js +1 -1
  434. package/dist/generated/themes/TableRow.css.js.map +1 -1
  435. package/dist/generated/themes/TableRowActionBase.css.d.ts +1 -1
  436. package/dist/generated/themes/TableRowActionBase.css.js +1 -1
  437. package/dist/generated/themes/TableRowActionBase.css.js.map +1 -1
  438. package/dist/generated/themes/TableRowBase.css.d.ts +1 -1
  439. package/dist/generated/themes/TableRowBase.css.js +1 -1
  440. package/dist/generated/themes/TableRowBase.css.js.map +1 -1
  441. package/dist/generated/themes/Tag.css.d.ts +1 -1
  442. package/dist/generated/themes/Tag.css.js +1 -1
  443. package/dist/generated/themes/Tag.css.js.map +1 -1
  444. package/dist/generated/themes/Text.css.d.ts +1 -1
  445. package/dist/generated/themes/Text.css.js +1 -1
  446. package/dist/generated/themes/Text.css.js.map +1 -1
  447. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  448. package/dist/generated/themes/TextArea.css.js +1 -1
  449. package/dist/generated/themes/TextArea.css.js.map +1 -1
  450. package/dist/generated/themes/TimePicker.css.d.ts +1 -1
  451. package/dist/generated/themes/TimePicker.css.js +1 -1
  452. package/dist/generated/themes/TimePicker.css.js.map +1 -1
  453. package/dist/generated/themes/Toast.css.d.ts +1 -1
  454. package/dist/generated/themes/Toast.css.js +1 -1
  455. package/dist/generated/themes/Toast.css.js.map +1 -1
  456. package/dist/generated/themes/ToggleButton.css.d.ts +1 -1
  457. package/dist/generated/themes/ToggleButton.css.js +1 -1
  458. package/dist/generated/themes/ToggleButton.css.js.map +1 -1
  459. package/dist/generated/themes/Token.css.d.ts +1 -1
  460. package/dist/generated/themes/Token.css.js +1 -1
  461. package/dist/generated/themes/Token.css.js.map +1 -1
  462. package/dist/generated/themes/Tokenizer.css.d.ts +1 -1
  463. package/dist/generated/themes/Tokenizer.css.js +1 -1
  464. package/dist/generated/themes/Tokenizer.css.js.map +1 -1
  465. package/dist/generated/themes/TokenizerPopover.css.d.ts +1 -1
  466. package/dist/generated/themes/TokenizerPopover.css.js +1 -1
  467. package/dist/generated/themes/TokenizerPopover.css.js.map +1 -1
  468. package/dist/generated/themes/Toolbar.css.d.ts +1 -1
  469. package/dist/generated/themes/Toolbar.css.js +1 -1
  470. package/dist/generated/themes/Toolbar.css.js.map +1 -1
  471. package/dist/generated/themes/ToolbarButton.css.d.ts +1 -1
  472. package/dist/generated/themes/ToolbarButton.css.js +1 -1
  473. package/dist/generated/themes/ToolbarButton.css.js.map +1 -1
  474. package/dist/generated/themes/ToolbarPopover.css.d.ts +1 -1
  475. package/dist/generated/themes/ToolbarPopover.css.js +1 -1
  476. package/dist/generated/themes/ToolbarPopover.css.js.map +1 -1
  477. package/dist/generated/themes/ToolbarSeparator.css.d.ts +1 -1
  478. package/dist/generated/themes/ToolbarSeparator.css.js +1 -1
  479. package/dist/generated/themes/ToolbarSeparator.css.js.map +1 -1
  480. package/dist/generated/themes/TreeItem.css.d.ts +1 -1
  481. package/dist/generated/themes/TreeItem.css.js +1 -1
  482. package/dist/generated/themes/TreeItem.css.js.map +1 -1
  483. package/dist/generated/themes/ValueStateMessage.css.d.ts +1 -1
  484. package/dist/generated/themes/ValueStateMessage.css.js +1 -1
  485. package/dist/generated/themes/ValueStateMessage.css.js.map +1 -1
  486. package/dist/generated/themes/ValueStateVariables.css.d.ts +1 -1
  487. package/dist/generated/themes/ValueStateVariables.css.js +1 -1
  488. package/dist/generated/themes/ValueStateVariables.css.js.map +1 -1
  489. package/dist/generated/themes/YearPicker.css.d.ts +1 -1
  490. package/dist/generated/themes/YearPicker.css.js +1 -1
  491. package/dist/generated/themes/YearPicker.css.js.map +1 -1
  492. package/dist/generated/themes/YearRangePicker.css.d.ts +1 -1
  493. package/dist/generated/themes/YearRangePicker.css.js +1 -1
  494. package/dist/generated/themes/YearRangePicker.css.js.map +1 -1
  495. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
  496. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  497. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  498. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.d.ts +1 -1
  499. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  500. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  501. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.d.ts +1 -1
  502. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  503. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
  504. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.d.ts +1 -1
  505. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  506. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  507. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  508. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  509. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  510. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  511. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  512. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  513. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  514. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  515. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  516. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  517. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  518. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  519. package/dist/types/AvatarColorScheme.d.ts +5 -1
  520. package/dist/types/AvatarColorScheme.js +4 -0
  521. package/dist/types/AvatarColorScheme.js.map +1 -1
  522. package/dist/vscode.html-custom-data.json +70 -9
  523. package/dist/web-types.json +95 -15
  524. package/package.json +9 -9
  525. package/src/DatePickerInputTemplate.tsx +1 -1
  526. package/src/DynamicDateRangeInputTemplate.tsx +1 -6
  527. package/src/DynamicDateRangePopoverTemplate.tsx +7 -5
  528. package/src/SelectPopoverTemplate.tsx +1 -0
  529. package/src/SelectTemplate.tsx +7 -5
  530. package/src/dynamic-date-range-options/DateRangeTemplate.tsx +1 -1
  531. package/src/dynamic-date-range-options/LastNextTemplate.tsx +71 -0
  532. package/src/i18n/messagebundle.properties +60 -0
  533. package/src/i18n/messagebundle_en_US_sappsd.properties +7 -0
  534. package/src/themes/Avatar.css +6 -0
  535. package/src/themes/DayPicker.css +6 -1
  536. package/src/themes/DynamicDateRange.css +4 -0
  537. package/src/themes/DynamicDateRangePopover.css +85 -38
  538. package/src/themes/ListItem.css +1 -2
  539. package/src/themes/MonthPicker.css +1 -1
  540. package/src/themes/YearPicker.css +1 -1
  541. package/src/themes/YearRangePicker.css +1 -1
  542. package/src/themes/base/sizes-parameters.css +6 -0
@@ -0,0 +1,33 @@
1
+ import Orientation from "@ui5/webcomponents-base/dist/types/Orientation.js";
2
+ import type UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
3
+ import type DropIndicator from "../DropIndicator.js";
4
+ import type MovePlacement from "@ui5/webcomponents-base/dist/types/MovePlacement.js";
5
+ type DragAndDropConfig = {
6
+ getItems: () => Array<HTMLElement>;
7
+ getDropIndicator: () => DropIndicator | null;
8
+ orientation?: Orientation;
9
+ useOriginalEvent?: boolean;
10
+ clientCoordinate?: "clientX" | "clientY";
11
+ transformElement?: (element: HTMLElement) => HTMLElement;
12
+ validateDraggedElement?: (draggedElement: HTMLElement, targetElement: HTMLElement) => boolean;
13
+ filterPlacements?: (placements: MovePlacement[], draggedElement: HTMLElement, targetElement: HTMLElement) => MovePlacement[];
14
+ };
15
+ declare class DragAndDropHandler {
16
+ component: UI5Element;
17
+ config: DragAndDropConfig;
18
+ constructor(component: UI5Element, config: DragAndDropConfig);
19
+ ondragenter(e: DragEvent): void;
20
+ ondragleave(e: DragEvent): void;
21
+ ondragover(e: DragEvent): void;
22
+ ondrop(e: DragEvent): void;
23
+ _validateDragOver(e: DragEvent): boolean;
24
+ _findClosestPosition(e: DragEvent): {
25
+ element: HTMLElement;
26
+ placements: MovePlacement[];
27
+ } | null;
28
+ _transformTargetElement(element: HTMLElement): HTMLElement;
29
+ _isValidDragTarget(draggedElement: HTMLElement, targetElement: HTMLElement): boolean;
30
+ _filterPlacements(placements: MovePlacement[], draggedElement: HTMLElement, targetElement: HTMLElement): MovePlacement[];
31
+ }
32
+ export default DragAndDropHandler;
33
+ export type { DragAndDropConfig, };
@@ -0,0 +1,96 @@
1
+ import DragRegistry from "@ui5/webcomponents-base/dist/util/dragAndDrop/DragRegistry.js";
2
+ import handleDragOver from "@ui5/webcomponents-base/dist/util/dragAndDrop/handleDragOver.js";
3
+ import handleDrop from "@ui5/webcomponents-base/dist/util/dragAndDrop/handleDrop.js";
4
+ import { findClosestPosition } from "@ui5/webcomponents-base/dist/util/dragAndDrop/findClosestPosition.js";
5
+ import Orientation from "@ui5/webcomponents-base/dist/types/Orientation.js";
6
+ class DragAndDropHandler {
7
+ constructor(component, config) {
8
+ this.component = component;
9
+ this.config = {
10
+ orientation: Orientation.Vertical,
11
+ clientCoordinate: "clientY",
12
+ ...config,
13
+ };
14
+ }
15
+ ondragenter(e) {
16
+ e.preventDefault();
17
+ }
18
+ ondragleave(e) {
19
+ if (e.relatedTarget instanceof Node && this.component.shadowRoot?.contains(e.relatedTarget)) {
20
+ return;
21
+ }
22
+ const dropIndicator = this.config.getDropIndicator();
23
+ if (dropIndicator) {
24
+ dropIndicator.targetReference = null;
25
+ }
26
+ }
27
+ ondragover(e) {
28
+ if (!this._validateDragOver(e)) {
29
+ return;
30
+ }
31
+ const draggedElement = DragRegistry.getDraggedElement();
32
+ const dropIndicator = this.config.getDropIndicator();
33
+ const closestPosition = this._findClosestPosition(e);
34
+ if (!closestPosition) {
35
+ dropIndicator.targetReference = null;
36
+ return;
37
+ }
38
+ const targetElement = this._transformTargetElement(closestPosition.element);
39
+ if (!this._isValidDragTarget(draggedElement, targetElement)) {
40
+ dropIndicator.targetReference = null;
41
+ return;
42
+ }
43
+ // Filter placements if needed (e.g., ListItemGroup filtering out MovePlacement.On)
44
+ const placements = this._filterPlacements(closestPosition.placements, draggedElement, targetElement);
45
+ const settings = this.config.useOriginalEvent ? { originalEvent: true } : {};
46
+ const { targetReference, placement } = handleDragOver(e, this.component, {
47
+ element: targetElement,
48
+ placements,
49
+ }, targetElement, settings);
50
+ dropIndicator.targetReference = targetReference;
51
+ dropIndicator.placement = placement;
52
+ }
53
+ ondrop(e) {
54
+ const dropIndicator = this.config.getDropIndicator();
55
+ if (!dropIndicator?.targetReference || !dropIndicator?.placement) {
56
+ e.preventDefault();
57
+ return;
58
+ }
59
+ const settings = this.config.useOriginalEvent ? { originalEvent: true } : {};
60
+ handleDrop(e, this.component, dropIndicator.targetReference, dropIndicator.placement, settings);
61
+ dropIndicator.targetReference = null;
62
+ }
63
+ _validateDragOver(e) {
64
+ if (!(e.target instanceof HTMLElement)) {
65
+ return false;
66
+ }
67
+ const draggedElement = DragRegistry.getDraggedElement();
68
+ const dropIndicator = this.config.getDropIndicator();
69
+ return !!(draggedElement && dropIndicator);
70
+ }
71
+ _findClosestPosition(e) {
72
+ const items = this.config.getItems();
73
+ const coordinate = this.config.clientCoordinate === "clientX" ? e.clientX : e.clientY;
74
+ return findClosestPosition(items, coordinate, this.config.orientation);
75
+ }
76
+ _transformTargetElement(element) {
77
+ if (this.config.transformElement) {
78
+ return this.config.transformElement(element);
79
+ }
80
+ return element;
81
+ }
82
+ _isValidDragTarget(draggedElement, targetElement) {
83
+ if (this.config.validateDraggedElement) {
84
+ return this.config.validateDraggedElement(draggedElement, targetElement);
85
+ }
86
+ return true;
87
+ }
88
+ _filterPlacements(placements, draggedElement, targetElement) {
89
+ if (this.config.filterPlacements) {
90
+ return this.config.filterPlacements(placements, draggedElement, targetElement);
91
+ }
92
+ return placements;
93
+ }
94
+ }
95
+ export default DragAndDropHandler;
96
+ //# sourceMappingURL=DragAndDropHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragAndDropHandler.js","sourceRoot":"","sources":["../../src/delegate/DragAndDropHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import DragRegistry from \"@ui5/webcomponents-base/dist/util/dragAndDrop/DragRegistry.js\";\nimport handleDragOver from \"@ui5/webcomponents-base/dist/util/dragAndDrop/handleDragOver.js\";\nimport handleDrop from \"@ui5/webcomponents-base/dist/util/dragAndDrop/handleDrop.js\";\nimport { findClosestPosition } from \"@ui5/webcomponents-base/dist/util/dragAndDrop/findClosestPosition.js\";\nimport Orientation from \"@ui5/webcomponents-base/dist/types/Orientation.js\";\nimport type UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type DropIndicator from \"../DropIndicator.js\";\nimport type MovePlacement from \"@ui5/webcomponents-base/dist/types/MovePlacement.js\";\n\ntype DragAndDropConfig = {\n\tgetItems: () => Array<HTMLElement>;\n\tgetDropIndicator: () => DropIndicator | null;\n\torientation?: Orientation;\n\tuseOriginalEvent?: boolean;\n\tclientCoordinate?: \"clientX\" | \"clientY\";\n\ttransformElement?: (element: HTMLElement) => HTMLElement;\n\tvalidateDraggedElement?: (draggedElement: HTMLElement, targetElement: HTMLElement) => boolean;\n\tfilterPlacements?: (placements: MovePlacement[], draggedElement: HTMLElement, targetElement: HTMLElement) => MovePlacement[];\n};\n\nclass DragAndDropHandler {\n\tcomponent: UI5Element;\n\tconfig: DragAndDropConfig;\n\n\tconstructor(component: UI5Element, config: DragAndDropConfig) {\n\t\tthis.component = component;\n\t\tthis.config = {\n\t\t\torientation: Orientation.Vertical,\n\t\t\tclientCoordinate: \"clientY\",\n\t\t\t...config,\n\t\t};\n\t}\n\n\tondragenter(e: DragEvent) {\n\t\te.preventDefault();\n\t}\n\n\tondragleave(e: DragEvent) {\n\t\tif (e.relatedTarget instanceof Node && this.component.shadowRoot?.contains(e.relatedTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dropIndicator = this.config.getDropIndicator();\n\t\tif (dropIndicator) {\n\t\t\tdropIndicator.targetReference = null;\n\t\t}\n\t}\n\n\tondragover(e: DragEvent) {\n\t\tif (!this._validateDragOver(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst draggedElement = DragRegistry.getDraggedElement()!;\n\t\tconst dropIndicator = this.config.getDropIndicator()!;\n\t\tconst closestPosition = this._findClosestPosition(e);\n\n\t\tif (!closestPosition) {\n\t\t\tdropIndicator.targetReference = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst targetElement = this._transformTargetElement(closestPosition.element);\n\n\t\tif (!this._isValidDragTarget(draggedElement, targetElement)) {\n\t\t\tdropIndicator.targetReference = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// Filter placements if needed (e.g., ListItemGroup filtering out MovePlacement.On)\n\t\tconst placements = this._filterPlacements(closestPosition.placements, draggedElement, targetElement);\n\n\t\tconst settings = this.config.useOriginalEvent ? { originalEvent: true } : {};\n\t\tconst { targetReference, placement } = handleDragOver(e, this.component, {\n\t\t\telement: targetElement,\n\t\t\tplacements,\n\t\t}, targetElement, settings);\n\n\t\tdropIndicator.targetReference = targetReference;\n\t\tdropIndicator.placement = placement;\n\t}\n\n\tondrop(e: DragEvent) {\n\t\tconst dropIndicator = this.config.getDropIndicator();\n\n\t\tif (!dropIndicator?.targetReference || !dropIndicator?.placement) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst settings = this.config.useOriginalEvent ? { originalEvent: true } : {};\n\t\thandleDrop(e, this.component, dropIndicator.targetReference, dropIndicator.placement, settings);\n\t\tdropIndicator.targetReference = null;\n\t}\n\n\t_validateDragOver(e: DragEvent): boolean {\n\t\tif (!(e.target instanceof HTMLElement)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst draggedElement = DragRegistry.getDraggedElement();\n\t\tconst dropIndicator = this.config.getDropIndicator();\n\n\t\treturn !!(draggedElement && dropIndicator);\n\t}\n\n\t_findClosestPosition(e: DragEvent) {\n\t\tconst items = this.config.getItems();\n\t\tconst coordinate = this.config.clientCoordinate === \"clientX\" ? e.clientX : e.clientY;\n\n\t\treturn findClosestPosition(\n\t\t\titems,\n\t\t\tcoordinate,\n\t\t\tthis.config.orientation!,\n\t\t);\n\t}\n\n\t_transformTargetElement(element: HTMLElement): HTMLElement {\n\t\tif (this.config.transformElement) {\n\t\t\treturn this.config.transformElement(element);\n\t\t}\n\t\treturn element;\n\t}\n\n\t_isValidDragTarget(draggedElement: HTMLElement, targetElement: HTMLElement): boolean {\n\t\tif (this.config.validateDraggedElement) {\n\t\t\treturn this.config.validateDraggedElement(draggedElement, targetElement);\n\t\t}\n\t\treturn true;\n\t}\n\n\t_filterPlacements(placements: MovePlacement[], draggedElement: HTMLElement, targetElement: HTMLElement): MovePlacement[] {\n\t\tif (this.config.filterPlacements) {\n\t\t\treturn this.config.filterPlacements(placements, draggedElement, targetElement);\n\t\t}\n\t\treturn placements;\n\t}\n}\n\nexport default DragAndDropHandler;\nexport type {\n\tDragAndDropConfig,\n};\n"]}
@@ -7,12 +7,12 @@ import type { JsxTemplate } from "@ui5/webcomponents-base/dist/index.js";
7
7
  * @public
8
8
  * @since 2.11.0
9
9
  */
10
- declare class DateRangeRange implements IDynamicDateRangeOption {
10
+ declare class DateRange implements IDynamicDateRangeOption {
11
11
  template: JsxTemplate;
12
12
  constructor();
13
13
  parse(value: string): DynamicDateRangeValue;
14
14
  format(value: DynamicDateRangeValue): string;
15
- toDates(value: DynamicDateRangeValue): Date[];
15
+ toDates(value: DynamicDateRangeValue): Array<Date>;
16
16
  get text(): string;
17
17
  get operator(): string;
18
18
  get icon(): string;
@@ -20,4 +20,4 @@ declare class DateRangeRange implements IDynamicDateRangeOption {
20
20
  getFormat(): DateFormat;
21
21
  handleSelectionChange(e: CustomEvent): DynamicDateRangeValue | undefined;
22
22
  }
23
- export default DateRangeRange;
23
+ export default DateRange;
@@ -1,5 +1,6 @@
1
- import DateRangeRangeTemplate from "./DateRangeTemplate.js";
1
+ import DateRangeTemplate from "./DateRangeTemplate.js";
2
2
  import DateFormat from "@ui5/webcomponents-localization/dist/DateFormat.js";
3
+ import UI5Date from "@ui5/webcomponents-localization/dist/dates/UI5Date.js";
3
4
  import { DYNAMIC_DATE_RANGE_DATERANGE_TEXT, } from "../generated/i18n/i18n-defaults.js";
4
5
  import { dateRangeOptionToDates } from "./toDates.js";
5
6
  import DynamicDateRange from "../DynamicDateRange.js";
@@ -9,9 +10,9 @@ import DynamicDateRange from "../DynamicDateRange.js";
9
10
  * @public
10
11
  * @since 2.11.0
11
12
  */
12
- class DateRangeRange {
13
+ class DateRange {
13
14
  constructor() {
14
- this.template = DateRangeRangeTemplate;
15
+ this.template = DateRangeTemplate;
15
16
  }
16
17
  parse(value) {
17
18
  const returnValue = { operator: "", values: [] };
@@ -21,7 +22,7 @@ class DateRangeRange {
21
22
  }
22
23
  format(value) {
23
24
  const valuesArray = value?.values;
24
- if (!valuesArray || valuesArray.length !== 2) {
25
+ if (!valuesArray || valuesArray.length !== 2 || !valuesArray[1]) {
25
26
  return "";
26
27
  }
27
28
  const formattedValue = this.getFormat().format(valuesArray);
@@ -58,14 +59,23 @@ class DateRangeRange {
58
59
  currentValue.values = [];
59
60
  currentValue.operator = this.operator;
60
61
  if (e.detail.selectedDates[0]) {
61
- currentValue.values[0] = new Date(e.detail.selectedDates[0] * 1000);
62
+ currentValue.values[0] = UI5Date.getInstance(e.detail.selectedDates[0] * 1000);
62
63
  }
63
64
  if (e.detail.selectedDates[1]) {
64
- currentValue.values[1] = new Date(e.detail.selectedDates[1] * 1000);
65
+ currentValue.values[1] = UI5Date.getInstance(e.detail.selectedDates[1] * 1000);
66
+ }
67
+ // Handle backwards date ranges by automatically flipping them
68
+ if (currentValue.values.length === 2 && currentValue.values[0] && currentValue.values[1]) {
69
+ const startDate = currentValue.values[0];
70
+ const endDate = currentValue.values[1];
71
+ // If start date is after end date, flip them
72
+ if (startDate.getTime() > endDate.getTime()) {
73
+ currentValue.values = [endDate, startDate];
74
+ }
65
75
  }
66
76
  return currentValue;
67
77
  }
68
78
  }
69
- DynamicDateRange.register("DATERANGE", DateRangeRange);
70
- export default DateRangeRange;
79
+ DynamicDateRange.register("DATERANGE", DateRange);
80
+ export default DateRange;
71
81
  //# sourceMappingURL=DateRange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRange.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/DateRange.ts"],"names":[],"mappings":"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","sourcesContent":["import DateRangeRangeTemplate from \"./DateRangeTemplate.js\";\nimport type { DynamicDateRangeValue, IDynamicDateRangeOption } from \"../DynamicDateRange.js\";\nimport DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport type { JsxTemplate } from \"@ui5/webcomponents-base/dist/index.js\";\nimport {\n\tDYNAMIC_DATE_RANGE_DATERANGE_TEXT,\n} from \"../generated/i18n/i18n-defaults.js\";\nimport { dateRangeOptionToDates } from \"./toDates.js\";\nimport DynamicDateRange from \"../DynamicDateRange.js\";\n\n/**\n * @class\n * @constructor\n * @public\n * @since 2.11.0\n */\n\nclass DateRangeRange implements IDynamicDateRangeOption {\n\ttemplate: JsxTemplate;\n\n\tconstructor() {\n\t\tthis.template = DateRangeRangeTemplate;\n\t}\n\n\tparse(value: string): DynamicDateRangeValue {\n\t\tconst returnValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\n\t\treturnValue.operator = this.operator;\n\t\treturnValue.values = this.getFormat().parse(value) as Date[];\n\n\t\treturn returnValue;\n\t}\n\n\tformat(value: DynamicDateRangeValue) {\n\t\tconst valuesArray = value?.values as Date[];\n\n\t\tif (!valuesArray || valuesArray.length !== 2) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst formattedValue = this.getFormat().format(valuesArray);\n\n\t\treturn formattedValue;\n\t}\n\n\ttoDates(value: DynamicDateRangeValue): Date[] {\n\t\treturn dateRangeOptionToDates(value);\n\t}\n\n\tget text(): string {\n\t\treturn DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_DATERANGE_TEXT);\n\t}\n\n\tget operator() {\n\t\treturn \"DATERANGE\";\n\t}\n\n\tget icon() {\n\t\treturn \"appointment-2\";\n\t}\n\n\tisValidString(value: string): boolean {\n\t\tconst dates = this.getFormat().parse(value) as Date[];\n\n\t\tif (!dates[0] || !dates[1] || Number.isNaN(dates[0].getTime()) || Number.isNaN(dates[1].getTime())) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tgetFormat(): DateFormat {\n\t\treturn DateFormat.getDateInstance({\n\t\t\tstrictParsing: true,\n\t\t\tinterval: true,\n\t\t\tintervalDelimiter: \" - \",\n\t\t});\n\t}\n\n\thandleSelectionChange(e: CustomEvent): DynamicDateRangeValue | undefined {\n\t\tconst currentValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\t\tcurrentValue.values = [];\n\t\tcurrentValue.operator = this.operator;\n\n\t\tif (e.detail.selectedDates[0]) {\n\t\t\tcurrentValue.values[0] = new Date(e.detail.selectedDates[0] * 1000);\n\t\t}\n\n\t\tif (e.detail.selectedDates[1]) {\n\t\t\tcurrentValue.values[1] = new Date(e.detail.selectedDates[1] * 1000);\n\t\t}\n\n\t\treturn currentValue;\n\t}\n}\n\nDynamicDateRange.register(\"DATERANGE\", DateRangeRange);\n\nexport default DateRangeRange;\n"]}
1
+ {"version":3,"file":"DateRange.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/DateRange.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,OAAO,UAAU,MAAM,oDAAoD,CAAC;AAC5E,OAAO,OAAO,MAAM,uDAAuD,CAAC;AAE5E,OAAO,EACN,iCAAiC,GACjC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD;;;;;GAKG;AAEH,MAAM,SAAS;IAGd;QACC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAa;QAClB,MAAM,WAAW,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAA2B,CAAC;QAE1E,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACrC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC;QAE7D,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,KAA4B;QAClC,MAAM,WAAW,GAAG,KAAK,EAAE,MAAqB,CAAC;QAEjD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE5D,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,KAA4B;QACnC,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,IAAI;QACP,OAAO,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACP,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,KAAa;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,CAAgB,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACpG,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,SAAS;QACR,OAAO,UAAU,CAAC,eAAe,CAAC;YACjC,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,KAAK;SACxB,CAAC,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,CAAc;QACnC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAA2B,CAAC;QAC3E,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;QACzB,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEtC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,CAAC;QAED,8DAA8D;QAC9D,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAY,CAAC;YACpD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAY,CAAC;YAElD,6CAA6C;YAC7C,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC7C,YAAY,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC;CACD;AAED,gBAAgB,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAElD,eAAe,SAAS,CAAC","sourcesContent":["import DateRangeTemplate from \"./DateRangeTemplate.js\";\nimport type { DynamicDateRangeValue, IDynamicDateRangeOption } from \"../DynamicDateRange.js\";\nimport DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport UI5Date from \"@ui5/webcomponents-localization/dist/dates/UI5Date.js\";\nimport type { JsxTemplate } from \"@ui5/webcomponents-base/dist/index.js\";\nimport {\n\tDYNAMIC_DATE_RANGE_DATERANGE_TEXT,\n} from \"../generated/i18n/i18n-defaults.js\";\nimport { dateRangeOptionToDates } from \"./toDates.js\";\nimport DynamicDateRange from \"../DynamicDateRange.js\";\n\n/**\n * @class\n * @constructor\n * @public\n * @since 2.11.0\n */\n\nclass DateRange implements IDynamicDateRangeOption {\n\ttemplate: JsxTemplate;\n\n\tconstructor() {\n\t\tthis.template = DateRangeTemplate;\n\t}\n\n\tparse(value: string): DynamicDateRangeValue {\n\t\tconst returnValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\n\t\treturnValue.operator = this.operator;\n\t\treturnValue.values = this.getFormat().parse(value) as Date[];\n\n\t\treturn returnValue;\n\t}\n\n\tformat(value: DynamicDateRangeValue) {\n\t\tconst valuesArray = value?.values as Array<Date>;\n\n\t\tif (!valuesArray || valuesArray.length !== 2 || !valuesArray[1]) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst formattedValue = this.getFormat().format(valuesArray);\n\n\t\treturn formattedValue;\n\t}\n\n\ttoDates(value: DynamicDateRangeValue): Array<Date> {\n\t\treturn dateRangeOptionToDates(value);\n\t}\n\n\tget text(): string {\n\t\treturn DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_DATERANGE_TEXT);\n\t}\n\n\tget operator() {\n\t\treturn \"DATERANGE\";\n\t}\n\n\tget icon() {\n\t\treturn \"appointment-2\";\n\t}\n\n\tisValidString(value: string): boolean {\n\t\tconst dates = this.getFormat().parse(value) as Array<Date>;\n\n\t\tif (!dates[0] || !dates[1] || Number.isNaN(dates[0].getTime()) || Number.isNaN(dates[1].getTime())) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tgetFormat(): DateFormat {\n\t\treturn DateFormat.getDateInstance({\n\t\t\tstrictParsing: true,\n\t\t\tinterval: true,\n\t\t\tintervalDelimiter: \" - \",\n\t\t});\n\t}\n\n\thandleSelectionChange(e: CustomEvent): DynamicDateRangeValue | undefined {\n\t\tconst currentValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\t\tcurrentValue.values = [];\n\t\tcurrentValue.operator = this.operator;\n\n\t\tif (e.detail.selectedDates[0]) {\n\t\t\tcurrentValue.values[0] = UI5Date.getInstance(e.detail.selectedDates[0] * 1000);\n\t\t}\n\n\t\tif (e.detail.selectedDates[1]) {\n\t\t\tcurrentValue.values[1] = UI5Date.getInstance(e.detail.selectedDates[1] * 1000);\n\t\t}\n\n\t\t// Handle backwards date ranges by automatically flipping them\n\t\tif (currentValue.values.length === 2 && currentValue.values[0] && currentValue.values[1]) {\n\t\t\tconst startDate = currentValue.values[0] as UI5Date;\n\t\t\tconst endDate = currentValue.values[1] as UI5Date;\n\n\t\t\t// If start date is after end date, flip them\n\t\t\tif (startDate.getTime() > endDate.getTime()) {\n\t\t\t\tcurrentValue.values = [endDate, startDate];\n\t\t\t}\n\t\t}\n\n\t\treturn currentValue;\n\t}\n}\n\nDynamicDateRange.register(\"DATERANGE\", DateRange);\n\nexport default DateRange;\n"]}
@@ -1,2 +1,2 @@
1
1
  import type DynamicDateRange from "../DynamicDateRange.js";
2
- export default function DateRangeRangeTemplate(this: DynamicDateRange): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
2
+ export default function DateRangeTemplate(this: DynamicDateRange): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "@ui5/webcomponents-base/jsx-runtime";
2
2
  import Calendar from "../Calendar.js";
3
3
  import CalendarDateRange from "../CalendarDateRange.js";
4
- export default function DateRangeRangeTemplate() {
4
+ export default function DateRangeTemplate() {
5
5
  return (_jsx(Calendar, { onSelectionChange: this.handleSelectionChange, selectionMode: "Range", children: _jsx(CalendarDateRange, { startValue: this.value?.operator === "DATERANGE"
6
6
  ? this.getOption(this.value.operator)?.format(this.value)?.split("-")[0] || undefined
7
7
  : undefined, endValue: this.value?.operator === "DATERANGE"
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeTemplate.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/DateRangeTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,sBAAsB;IAC7C,OAAO,CACN,KAAC,QAAQ,IAAC,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,EAAC,OAAO,YAC7E,KAAC,iBAAiB,IACjB,UAAU,EACT,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,WAAW;gBACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;gBACrF,CAAC,CAAC,SAAS,EAEb,QAAQ,EACP,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,WAAW;gBACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;gBACrF,CAAC,CAAC,SAAS,GAEO,GACX,CACX,CAAC;AACH,CAAC","sourcesContent":["import type DynamicDateRange from \"../DynamicDateRange.js\";\nimport Calendar from \"../Calendar.js\";\nimport CalendarDateRange from \"../CalendarDateRange.js\";\n\nexport default function DateRangeRangeTemplate(this: DynamicDateRange) {\n\treturn (\n\t\t<Calendar onSelectionChange={this.handleSelectionChange} selectionMode=\"Range\">\n\t\t\t<CalendarDateRange\n\t\t\t\tstartValue={\n\t\t\t\t\tthis.value?.operator === \"DATERANGE\"\n\t\t\t\t\t\t? this.getOption(this.value.operator)?.format(this.value)?.split(\"-\")[0] || undefined\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tendValue={\n\t\t\t\t\tthis.value?.operator === \"DATERANGE\"\n\t\t\t\t\t\t? this.getOption(this.value.operator)?.format(this.value)?.split(\"-\")[1] || undefined\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t></CalendarDateRange>\n\t\t</Calendar>\n\t);\n}\n"]}
1
+ {"version":3,"file":"DateRangeTemplate.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/DateRangeTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACxC,OAAO,CACN,KAAC,QAAQ,IAAC,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,EAAC,OAAO,YAC7E,KAAC,iBAAiB,IACjB,UAAU,EACT,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,WAAW;gBACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;gBACrF,CAAC,CAAC,SAAS,EAEb,QAAQ,EACP,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,WAAW;gBACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;gBACrF,CAAC,CAAC,SAAS,GAEO,GACX,CACX,CAAC;AACH,CAAC","sourcesContent":["import type DynamicDateRange from \"../DynamicDateRange.js\";\nimport Calendar from \"../Calendar.js\";\nimport CalendarDateRange from \"../CalendarDateRange.js\";\n\nexport default function DateRangeTemplate(this: DynamicDateRange) {\n\treturn (\n\t\t<Calendar onSelectionChange={this.handleSelectionChange} selectionMode=\"Range\">\n\t\t\t<CalendarDateRange\n\t\t\t\tstartValue={\n\t\t\t\t\tthis.value?.operator === \"DATERANGE\"\n\t\t\t\t\t\t? this.getOption(this.value.operator)?.format(this.value)?.split(\"-\")[0] || undefined\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tendValue={\n\t\t\t\t\tthis.value?.operator === \"DATERANGE\"\n\t\t\t\t\t\t? this.getOption(this.value.operator)?.format(this.value)?.split(\"-\")[1] || undefined\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t></CalendarDateRange>\n\t\t</Calendar>\n\t);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import DynamicDateRange from "../DynamicDateRange.js";
2
+ export default function LastNextTemplate(this: DynamicDateRange): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import DynamicDateRange from "../DynamicDateRange.js";
3
+ import StepInput from "../StepInput.js";
4
+ import Select from "../Select.js";
5
+ import Option from "../Option.js";
6
+ import Label from "../Label.js";
7
+ import { DYNAMIC_DATE_RANGE_VALUE_LABEL_TEXT, DYNAMIC_DATE_RANGE_UNIT_OF_TIME_LABEL_TEXT, } from "../generated/i18n/i18n-defaults.js";
8
+ export default function LastNextTemplate() {
9
+ const currentOption = this._currentOption;
10
+ const availableOptionInfos = currentOption.availableOptions;
11
+ const filteredOptions = availableOptionInfos.filter(info => currentOption.options?.includes(info.operator) || currentOption.operator === info.operator);
12
+ const isGrouped = filteredOptions.length > 1;
13
+ const currentNumber = this.currentValue?.values ? typeof this.currentValue.values[0] === "number" ? this.currentValue.values[0] : 1 : 1;
14
+ const currentOperator = this.currentValue?.operator || filteredOptions[0]?.operator || "";
15
+ // Input handlers
16
+ const handleNumberChange = (e) => {
17
+ const newValue = Number(e.target.value);
18
+ this.currentValue = {
19
+ operator: currentOperator,
20
+ values: [newValue],
21
+ };
22
+ };
23
+ const handleUnitChange = (e) => {
24
+ const newOperator = String(e.detail.selectedOption.value);
25
+ this.currentValue = {
26
+ operator: newOperator,
27
+ values: [currentNumber],
28
+ };
29
+ };
30
+ return (_jsx("div", { class: "ui5-last-next-container ui5-last-next-container-padded", children: _jsxs("div", { class: "ui5-ddr-input-container ui5-ddr-input-container-right-aligned", children: [_jsx(Label, { class: "ui5-ddr-label", children: DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_VALUE_LABEL_TEXT) }), _jsx(StepInput, { value: currentNumber, min: 1, max: isGrouped ? 9999 : 999, onChange: handleNumberChange }), isGrouped && (_jsxs(_Fragment, { children: [_jsx(Label, { class: "ui5-ddr-label", children: DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_UNIT_OF_TIME_LABEL_TEXT) }), _jsx(Select, { value: currentOperator, onChange: handleUnitChange, children: filteredOptions.map(option => (_jsx(Option, { value: option.operator, children: option.unitText }, option.operator))) })] }))] }) }));
31
+ }
32
+ //# sourceMappingURL=LastNextTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LastNextTemplate.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/LastNextTemplate.tsx"],"names":[],"mappings":";AAAA,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,MAAM,aAAa,CAAC;AAGhC,OAAO,EACN,mCAAmC,EACnC,0CAA0C,GAC1C,MAAM,oCAAoC,CAAC;AAE5C,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,cAA2C,CAAC;IAEvE,MAAM,oBAAoB,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAE5D,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC1D,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAC1F,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxI,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAE1F,iBAAiB;IACjB,MAAM,kBAAkB,GAAG,CAAC,CAAc,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAE,CAAC,CAAC,MAAoB,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG;YACnB,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,CAAC,QAAQ,CAAC;SAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,CAAuC,EAAE,EAAE;QACpE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG;YACnB,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,CAAC,aAAa,CAAC;SACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACN,cAAK,KAAK,EAAC,wDAAwD,YAClE,eAAK,KAAK,EAAC,+DAA+D,aACzE,KAAC,KAAK,IAAC,KAAK,EAAC,eAAe,YAAE,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC,GAAS,EAC/G,KAAC,SAAS,IACT,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAC3B,QAAQ,EAAE,kBAAkB,GAC3B,EAED,SAAS,IAAI,CACb,8BACC,KAAC,KAAK,IAAC,KAAK,EAAC,eAAe,YAAE,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,0CAA0C,CAAC,GAAS,EACtH,KAAC,MAAM,IAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,YACxD,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAC9B,KAAC,MAAM,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,YAC5B,MAAM,CAAC,QAAQ,IADoB,MAAM,CAAC,QAAQ,CAE3C,CACT,CAAC,GACM,IACP,CACH,IACI,GACD,CACN,CAAC;AACH,CAAC","sourcesContent":["import DynamicDateRange from \"../DynamicDateRange.js\";\nimport StepInput from \"../StepInput.js\";\nimport Select from \"../Select.js\";\nimport type { SelectChangeEventDetail } from \"../Select.js\";\nimport Option from \"../Option.js\";\nimport Label from \"../Label.js\";\nimport type LastOptions from \"./LastOptions.js\";\nimport type NextOptions from \"./NextOptions.js\";\nimport {\n\tDYNAMIC_DATE_RANGE_VALUE_LABEL_TEXT,\n\tDYNAMIC_DATE_RANGE_UNIT_OF_TIME_LABEL_TEXT,\n} from \"../generated/i18n/i18n-defaults.js\";\n\nexport default function LastNextTemplate(this: DynamicDateRange) {\n\tconst currentOption = this._currentOption as LastOptions | NextOptions;\n\n\tconst availableOptionInfos = currentOption.availableOptions;\n\n\tconst filteredOptions = availableOptionInfos.filter(info =>\n\t\tcurrentOption.options?.includes(info.operator) || currentOption.operator === info.operator\n\t);\n\n\tconst isGrouped = filteredOptions.length > 1;\n\n\tconst currentNumber = this.currentValue?.values ? typeof this.currentValue.values[0] === \"number\" ? this.currentValue.values[0] : 1 : 1;\n\tconst currentOperator = this.currentValue?.operator || filteredOptions[0]?.operator || \"\";\n\n\t// Input handlers\n\tconst handleNumberChange = (e: CustomEvent) => {\n\t\tconst newValue = Number((e.target as StepInput).value);\n\t\tthis.currentValue = {\n\t\t\toperator: currentOperator,\n\t\t\tvalues: [newValue],\n\t\t};\n\t};\n\n\tconst handleUnitChange = (e: CustomEvent<SelectChangeEventDetail>) => {\n\t\tconst newOperator = String(e.detail.selectedOption.value);\n\t\tthis.currentValue = {\n\t\t\toperator: newOperator,\n\t\t\tvalues: [currentNumber],\n\t\t};\n\t};\n\n\treturn (\n\t\t<div class=\"ui5-last-next-container ui5-last-next-container-padded\">\n\t\t\t<div class=\"ui5-ddr-input-container ui5-ddr-input-container-right-aligned\">\n\t\t\t\t<Label class=\"ui5-ddr-label\">{DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_VALUE_LABEL_TEXT)}</Label>\n\t\t\t\t<StepInput\n\t\t\t\t\tvalue={currentNumber}\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={isGrouped ? 9999 : 999}\n\t\t\t\t\tonChange={handleNumberChange}\n\t\t\t\t/>\n\n\t\t\t\t{isGrouped && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Label class=\"ui5-ddr-label\">{DynamicDateRange.i18nBundle.getText(DYNAMIC_DATE_RANGE_UNIT_OF_TIME_LABEL_TEXT)}</Label>\n\t\t\t\t\t\t<Select value={currentOperator} onChange={handleUnitChange}>\n\t\t\t\t\t\t\t{filteredOptions.map(option => (\n\t\t\t\t\t\t\t\t<Option value={option.operator} key={option.operator}>\n\t\t\t\t\t\t\t\t\t{option.unitText}\n\t\t\t\t\t\t\t\t</Option>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
@@ -0,0 +1,65 @@
1
+ import type { DynamicDateRangeValue, IDynamicDateRangeOption } from "../DynamicDateRange.js";
2
+ type LastNextOption = {
3
+ operator: string;
4
+ text: string;
5
+ unitText: string;
6
+ };
7
+ /**
8
+ * Interface for Last/Next options that have additional methods
9
+ */
10
+ interface ILastNextOption extends IDynamicDateRangeOption {
11
+ availableOptions: Array<LastNextOption>;
12
+ options?: Array<string>;
13
+ _operator: string;
14
+ }
15
+ /**
16
+ * Parses a string value for Last/Next options
17
+ * @param value - The string to parse (e.g., "Last 7 Days")
18
+ * @param option - The option instance
19
+ * @returns Parsed DynamicDateRangeValue
20
+ */
21
+ export declare function parseLastNext(value: string, option: IDynamicDateRangeOption): DynamicDateRangeValue | undefined;
22
+ /**
23
+ * Formats a DynamicDateRangeValue for Last/Next options
24
+ * @param value - The value to format
25
+ * @param option - The option instance
26
+ * @returns Formatted string
27
+ */
28
+ export declare function formatLastNext(value: DynamicDateRangeValue, option: IDynamicDateRangeOption): string;
29
+ /**
30
+ * Validates if a string is valid for Last/Next options
31
+ * @param value - The string to validate
32
+ * @param option - The option instance
33
+ * @returns True if valid, false otherwise
34
+ */
35
+ export declare function isValidStringLastNext(value: string, option: IDynamicDateRangeOption): boolean;
36
+ /**
37
+ * Handles selection change events for Last/Next options
38
+ * @param e - The custom event
39
+ * @param option - The option instance
40
+ * @returns Updated DynamicDateRangeValue
41
+ */
42
+ export declare function handleSelectionChangeLastNext(e: CustomEvent, option: IDynamicDateRangeOption): DynamicDateRangeValue | undefined;
43
+ /**
44
+ * Checks if a date range represents a single day
45
+ * @param startDate - The start date
46
+ * @param endDate - The end date
47
+ * @returns True if the range is a single day
48
+ */
49
+ export declare function isSingleDayRange(startDate: Date, endDate: Date): boolean;
50
+ /**
51
+ * Formats date values for Last/Next options
52
+ * @param startDate - The start date
53
+ * @param endDate - The end date
54
+ * @param operator - The operator (used to check for DAYS operations)
55
+ * @returns Formatted date string
56
+ */
57
+ export declare function formatDateRange(startDate: Date, endDate: Date, operator: string): string;
58
+ /**
59
+ * Complete format function for Last/Next options that handles all value types
60
+ * @param value - The value to format
61
+ * @param option - The Last/Next option instance
62
+ * @returns Formatted string
63
+ */
64
+ export declare function formatLastNextValue(value: DynamicDateRangeValue, option: ILastNextOption): string;
65
+ export {};
@@ -0,0 +1,123 @@
1
+ import DateFormat from "@ui5/webcomponents-localization/dist/DateFormat.js";
2
+ import UI5Date from "@ui5/webcomponents-localization/dist/dates/UI5Date.js";
3
+ /**
4
+ * Parses a string value for Last/Next options
5
+ * @param value - The string to parse (e.g., "Last 7 Days")
6
+ * @param option - The option instance
7
+ * @returns Parsed DynamicDateRangeValue
8
+ */
9
+ export function parseLastNext(value, option) {
10
+ const returnValue = { operator: "", values: [] };
11
+ returnValue.operator = option.operator;
12
+ // Extract number from text like "Last 7 Days" or "Next 3 Months"
13
+ const match = value.match(/(\d+)/);
14
+ if (match) {
15
+ returnValue.values = [Number.parseInt(match[1])];
16
+ }
17
+ else {
18
+ returnValue.values = [1];
19
+ }
20
+ return returnValue;
21
+ }
22
+ /**
23
+ * Formats a DynamicDateRangeValue for Last/Next options
24
+ * @param value - The value to format
25
+ * @param option - The option instance
26
+ * @returns Formatted string
27
+ */
28
+ export function formatLastNext(value, option) {
29
+ const amount = value?.values?.[0] || 1;
30
+ return option.text.replace("X", amount.toString());
31
+ }
32
+ /**
33
+ * Validates if a string is valid for Last/Next options
34
+ * @param value - The string to validate
35
+ * @param option - The option instance
36
+ * @returns True if valid, false otherwise
37
+ */
38
+ export function isValidStringLastNext(value, option) {
39
+ // Check if string matches the pattern "Last X Days" or "Next X Months"
40
+ const pattern = option.text.replace("X", "\\d+");
41
+ const regex = new RegExp(`^${pattern}$`, "i");
42
+ return regex.test(value);
43
+ }
44
+ /**
45
+ * Handles selection change events for Last/Next options
46
+ * @param e - The custom event
47
+ * @param option - The option instance
48
+ * @returns Updated DynamicDateRangeValue
49
+ */
50
+ export function handleSelectionChangeLastNext(e, option) {
51
+ const currentValue = { operator: "", values: [] };
52
+ currentValue.operator = option.operator;
53
+ // For StepInput, the value is accessed from the target element itself
54
+ const stepInputValue = e.target?.value;
55
+ currentValue.values = [stepInputValue || 1];
56
+ return currentValue;
57
+ }
58
+ /**
59
+ * Checks if a date range represents a single day
60
+ * @param startDate - The start date
61
+ * @param endDate - The end date
62
+ * @returns True if the range is a single day
63
+ */
64
+ export function isSingleDayRange(startDate, endDate) {
65
+ const normalizedStart = UI5Date.getInstance(startDate.getTime());
66
+ const normalizedEnd = UI5Date.getInstance(endDate.getTime());
67
+ const diffInDays = Math.round((normalizedEnd.getTime() - normalizedStart.getTime()) / (1000 * 60 * 60 * 24));
68
+ return diffInDays + 1 === 1;
69
+ }
70
+ /**
71
+ * Formats date values for Last/Next options
72
+ * @param startDate - The start date
73
+ * @param endDate - The end date
74
+ * @param operator - The operator (used to check for DAYS operations)
75
+ * @returns Formatted date string
76
+ */
77
+ export function formatDateRange(startDate, endDate, operator) {
78
+ const dateFormat = DateFormat.getDateInstance({ strictParsing: true });
79
+ // Single day check for DAYS operations
80
+ const isSingleDay = operator.includes("DAYS") && isSingleDayRange(startDate, endDate);
81
+ const isSameDay = startDate.getFullYear() === endDate.getFullYear()
82
+ && startDate.getMonth() === endDate.getMonth()
83
+ && startDate.getDate() === endDate.getDate();
84
+ if (isSingleDay || isSameDay) {
85
+ return dateFormat.format(startDate);
86
+ }
87
+ return `${dateFormat.format(startDate)} - ${dateFormat.format(endDate)}`;
88
+ }
89
+ /**
90
+ * Complete format function for Last/Next options that handles all value types
91
+ * @param value - The value to format
92
+ * @param option - The Last/Next option instance
93
+ * @returns Formatted string
94
+ */
95
+ export function formatLastNextValue(value, option) {
96
+ // for empty/default values, convert to actual dates and format them
97
+ if (!value.values || value.values.length === 0) {
98
+ const firstOption = option.availableOptions.find(info => option.options?.includes(info.operator) || info.operator === option._operator);
99
+ if (firstOption) {
100
+ // Create default value with numeric 1, convert to dates, then format the dates directly
101
+ const defaultValue = { operator: firstOption.operator, values: [1] };
102
+ const dates = option.toDates(defaultValue);
103
+ // Format the dates directly
104
+ if (dates && dates.length >= 2) {
105
+ const [startDate, endDate] = dates;
106
+ return formatDateRange(startDate, endDate, firstOption.operator);
107
+ }
108
+ }
109
+ }
110
+ // for date values
111
+ if (value.values && value.values.length >= 2 && value.values[0] instanceof Date && value.values[1] instanceof Date) {
112
+ const [startDate, endDate] = value.values;
113
+ return formatDateRange(startDate, endDate, value.operator);
114
+ }
115
+ // for numeric values
116
+ const optionInfo = option.availableOptions.find(info => info.operator === value.operator);
117
+ if (optionInfo) {
118
+ const numberValue = value.values?.[0] || 1;
119
+ return formatLastNext({ operator: value.operator, values: [numberValue] }, { text: optionInfo.text });
120
+ }
121
+ return "";
122
+ }
123
+ //# sourceMappingURL=LastNextUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LastNextUtils.js","sourceRoot":"","sources":["../../src/dynamic-date-range-options/LastNextUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DynamicDateRangeValue, IDynamicDateRangeOption } from \"../DynamicDateRange.js\";\nimport type StepInput from \"../StepInput.js\";\nimport DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport UI5Date from \"@ui5/webcomponents-localization/dist/dates/UI5Date.js\";\n\ntype LastNextOption = {\n\toperator: string;\n\ttext: string;\n\tunitText: string;\n}\n\n/**\n * Interface for Last/Next options that have additional methods\n */\ninterface ILastNextOption extends IDynamicDateRangeOption {\n\tavailableOptions: Array<LastNextOption>;\n\toptions?: Array<string>;\n\t_operator: string;\n}\n\n/**\n * Parses a string value for Last/Next options\n * @param value - The string to parse (e.g., \"Last 7 Days\")\n * @param option - The option instance\n * @returns Parsed DynamicDateRangeValue\n */\nexport function parseLastNext(value: string, option: IDynamicDateRangeOption): DynamicDateRangeValue | undefined {\n\tconst returnValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\treturnValue.operator = option.operator;\n\n\t// Extract number from text like \"Last 7 Days\" or \"Next 3 Months\"\n\tconst match = value.match(/(\\d+)/);\n\tif (match) {\n\t\treturnValue.values = [Number.parseInt(match[1])];\n\t} else {\n\t\treturnValue.values = [1];\n\t}\n\n\treturn returnValue;\n}\n\n/**\n * Formats a DynamicDateRangeValue for Last/Next options\n * @param value - The value to format\n * @param option - The option instance\n * @returns Formatted string\n */\nexport function formatLastNext(value: DynamicDateRangeValue, option: IDynamicDateRangeOption): string {\n\tconst amount = value?.values?.[0] as number || 1;\n\treturn option.text.replace(\"X\", amount.toString());\n}\n\n/**\n * Validates if a string is valid for Last/Next options\n * @param value - The string to validate\n * @param option - The option instance\n * @returns True if valid, false otherwise\n */\nexport function isValidStringLastNext(value: string, option: IDynamicDateRangeOption): boolean {\n\t// Check if string matches the pattern \"Last X Days\" or \"Next X Months\"\n\tconst pattern = option.text.replace(\"X\", \"\\\\d+\");\n\tconst regex = new RegExp(`^${pattern}$`, \"i\");\n\treturn regex.test(value);\n}\n\n/**\n * Handles selection change events for Last/Next options\n * @param e - The custom event\n * @param option - The option instance\n * @returns Updated DynamicDateRangeValue\n */\nexport function handleSelectionChangeLastNext(e: CustomEvent, option: IDynamicDateRangeOption): DynamicDateRangeValue | undefined {\n\tconst currentValue = { operator: \"\", values: [] } as DynamicDateRangeValue;\n\tcurrentValue.operator = option.operator;\n\n\t// For StepInput, the value is accessed from the target element itself\n\tconst stepInputValue = (e.target as StepInput)?.value;\n\tcurrentValue.values = [stepInputValue || 1];\n\n\treturn currentValue;\n}\n\n/**\n * Checks if a date range represents a single day\n * @param startDate - The start date\n * @param endDate - The end date\n * @returns True if the range is a single day\n */\nexport function isSingleDayRange(startDate: Date, endDate: Date): boolean {\n\tconst normalizedStart = UI5Date.getInstance(startDate.getTime());\n\tconst normalizedEnd = UI5Date.getInstance(endDate.getTime());\n\tconst diffInDays = Math.round((normalizedEnd.getTime() - normalizedStart.getTime()) / (1000 * 60 * 60 * 24));\n\treturn diffInDays + 1 === 1;\n}\n\n/**\n * Formats date values for Last/Next options\n * @param startDate - The start date\n * @param endDate - The end date\n * @param operator - The operator (used to check for DAYS operations)\n * @returns Formatted date string\n */\nexport function formatDateRange(startDate: Date, endDate: Date, operator: string): string {\n\tconst dateFormat = DateFormat.getDateInstance({ strictParsing: true });\n\n\t// Single day check for DAYS operations\n\tconst isSingleDay = operator.includes(\"DAYS\") && isSingleDayRange(startDate, endDate);\n\tconst isSameDay = startDate.getFullYear() === endDate.getFullYear()\n\t\t&& startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getDate() === endDate.getDate();\n\n\tif (isSingleDay || isSameDay) {\n\t\treturn dateFormat.format(startDate);\n\t}\n\treturn `${dateFormat.format(startDate)} - ${dateFormat.format(endDate)}`;\n}\n\n/**\n * Complete format function for Last/Next options that handles all value types\n * @param value - The value to format\n * @param option - The Last/Next option instance\n * @returns Formatted string\n */\nexport function formatLastNextValue(value: DynamicDateRangeValue, option: ILastNextOption): string {\n\t// for empty/default values, convert to actual dates and format them\n\tif (!value.values || value.values.length === 0) {\n\t\tconst firstOption = option.availableOptions.find(info => option.options?.includes(info.operator) || info.operator === option._operator);\n\t\tif (firstOption) {\n\t\t\t// Create default value with numeric 1, convert to dates, then format the dates directly\n\t\t\tconst defaultValue = { operator: firstOption.operator, values: [1] };\n\t\t\tconst dates = option.toDates(defaultValue);\n\n\t\t\t// Format the dates directly\n\t\t\tif (dates && dates.length >= 2) {\n\t\t\t\tconst [startDate, endDate] = dates;\n\t\t\t\treturn formatDateRange(startDate, endDate, firstOption.operator);\n\t\t\t}\n\t\t}\n\t}\n\n\t// for date values\n\tif (value.values && value.values.length >= 2 && value.values[0] instanceof Date && value.values[1] instanceof Date) {\n\t\tconst [startDate, endDate] = value.values;\n\t\treturn formatDateRange(startDate, endDate, value.operator);\n\t}\n\n\t// for numeric values\n\tconst optionInfo = option.availableOptions.find(info => info.operator === value.operator);\n\tif (optionInfo) {\n\t\tconst numberValue = (value.values?.[0] as number) || 1;\n\t\treturn formatLastNext({ operator: value.operator, values: [numberValue] }, { text: optionInfo.text } as IDynamicDateRangeOption);\n\t}\n\n\treturn \"\";\n}\n"]}
@@ -0,0 +1,32 @@
1
+ import type { DynamicDateRangeValue, IDynamicDateRangeOption } from "../DynamicDateRange.js";
2
+ import type { JsxTemplate } from "@ui5/webcomponents-base/dist/index.js";
3
+ import type { I18nText } from "@ui5/webcomponents-base/dist/i18nBundle.js";
4
+ /**
5
+ * @class
6
+ * @constructor
7
+ * @public
8
+ * @since 2.14.0
9
+ */
10
+ declare class LastOptions implements IDynamicDateRangeOption {
11
+ template: JsxTemplate;
12
+ _operator: string;
13
+ i18nKey: I18nText;
14
+ options?: Array<string>;
15
+ constructor(operators?: Array<string>);
16
+ _getI18nKeyForOperator(operator: string): I18nText;
17
+ parse(value: string): DynamicDateRangeValue | undefined;
18
+ format(value: DynamicDateRangeValue): string;
19
+ toDates(value: DynamicDateRangeValue): Array<Date>;
20
+ isValidString(value: string): boolean;
21
+ handleSelectionChange(e: CustomEvent): DynamicDateRangeValue | undefined;
22
+ get text(): string;
23
+ get icon(): string;
24
+ get availableOptions(): {
25
+ operator: string;
26
+ unitText: string;
27
+ text: string;
28
+ }[];
29
+ get operator(): string;
30
+ set operator(value: string);
31
+ }
32
+ export default LastOptions;