@ui5/webcomponents-fiori 2.21.0 → 2.22.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 (63) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/Timeline.d.ts +35 -3
  4. package/dist/Timeline.js +62 -4
  5. package/dist/Timeline.js.map +1 -1
  6. package/dist/TimelineFilterOption.d.ts +37 -0
  7. package/dist/TimelineFilterOption.js +59 -0
  8. package/dist/TimelineFilterOption.js.map +1 -0
  9. package/dist/TimelineHeaderBar.d.ts +120 -0
  10. package/dist/TimelineHeaderBar.js +273 -0
  11. package/dist/TimelineHeaderBar.js.map +1 -0
  12. package/dist/TimelineHeaderBarTemplate.d.ts +2 -0
  13. package/dist/TimelineHeaderBarTemplate.js +18 -0
  14. package/dist/TimelineHeaderBarTemplate.js.map +1 -0
  15. package/dist/TimelineItem.d.ts +2 -0
  16. package/dist/TimelineItem.js +2 -0
  17. package/dist/TimelineItem.js.map +1 -1
  18. package/dist/TimelineTemplate.js +1 -1
  19. package/dist/TimelineTemplate.js.map +1 -1
  20. package/dist/ViewSettingsDialog.d.ts +40 -1
  21. package/dist/ViewSettingsDialog.js +114 -7
  22. package/dist/ViewSettingsDialog.js.map +1 -1
  23. package/dist/ViewSettingsDialogCustomTab.d.ts +52 -0
  24. package/dist/ViewSettingsDialogCustomTab.js +81 -0
  25. package/dist/ViewSettingsDialogCustomTab.js.map +1 -0
  26. package/dist/ViewSettingsDialogCustomTabTemplate.d.ts +2 -0
  27. package/dist/ViewSettingsDialogCustomTabTemplate.js +5 -0
  28. package/dist/ViewSettingsDialogCustomTabTemplate.js.map +1 -0
  29. package/dist/ViewSettingsDialogTemplate.js +8 -1
  30. package/dist/ViewSettingsDialogTemplate.js.map +1 -1
  31. package/dist/bundle.esm.js +3 -0
  32. package/dist/bundle.esm.js.map +1 -1
  33. package/dist/css/themes/Timeline.css +1 -1
  34. package/dist/css/themes/TimelineHeaderBar.css +1 -0
  35. package/dist/css/themes/ViewSettingsDialog.css +1 -1
  36. package/dist/custom-elements-internal.json +746 -60
  37. package/dist/custom-elements.json +511 -9
  38. package/dist/generated/i18n/i18n-defaults.d.ts +11 -1
  39. package/dist/generated/i18n/i18n-defaults.js +11 -1
  40. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  41. package/dist/generated/themes/Timeline.css.d.ts +1 -1
  42. package/dist/generated/themes/Timeline.css.js +1 -1
  43. package/dist/generated/themes/Timeline.css.js.map +1 -1
  44. package/dist/generated/themes/TimelineHeaderBar.css.d.ts +2 -0
  45. package/dist/generated/themes/TimelineHeaderBar.css.js +8 -0
  46. package/dist/generated/themes/TimelineHeaderBar.css.js.map +1 -0
  47. package/dist/generated/themes/ViewSettingsDialog.css.d.ts +1 -1
  48. package/dist/generated/themes/ViewSettingsDialog.css.js +1 -1
  49. package/dist/generated/themes/ViewSettingsDialog.css.js.map +1 -1
  50. package/dist/types/TimelineSortOrder.d.ts +18 -0
  51. package/dist/types/TimelineSortOrder.js +20 -0
  52. package/dist/types/TimelineSortOrder.js.map +1 -0
  53. package/dist/vscode.html-custom-data.json +88 -2
  54. package/dist/web-types.json +257 -3
  55. package/package.json +7 -7
  56. package/src/TimelineHeaderBarTemplate.tsx +104 -0
  57. package/src/TimelineTemplate.tsx +7 -0
  58. package/src/ViewSettingsDialogCustomTabTemplate.tsx +5 -0
  59. package/src/ViewSettingsDialogTemplate.tsx +31 -0
  60. package/src/i18n/messagebundle.properties +30 -0
  61. package/src/themes/Timeline.css +21 -7
  62. package/src/themes/TimelineHeaderBar.css +17 -0
  63. package/src/themes/ViewSettingsDialog.css +33 -0
@@ -0,0 +1,104 @@
1
+ import Toolbar from "@ui5/webcomponents/dist/Toolbar.js";
2
+ import ToolbarButton from "@ui5/webcomponents/dist/ToolbarButton.js";
3
+ import ToolbarSpacer from "@ui5/webcomponents/dist/ToolbarSpacer.js";
4
+ import Input from "@ui5/webcomponents/dist/Input.js";
5
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
6
+ import Dialog from "@ui5/webcomponents/dist/Dialog.js";
7
+ import List from "@ui5/webcomponents/dist/List.js";
8
+ import ListItemStandard from "@ui5/webcomponents/dist/ListItemStandard.js";
9
+ import Bar from "@ui5/webcomponents/dist/Bar.js";
10
+ import Button from "@ui5/webcomponents/dist/Button.js";
11
+ import type TimelineHeaderBar from "./TimelineHeaderBar.js";
12
+ import searchIcon from "@ui5/webcomponents-icons/dist/search.js";
13
+ import sortDescending from "@ui5/webcomponents-icons/dist/sort-descending.js";
14
+ import addFilter from "@ui5/webcomponents-icons/dist/add-filter.js";
15
+
16
+ export default function TimelineHeaderBarTemplate(this: TimelineHeaderBar) {
17
+ return (<>
18
+ <Toolbar
19
+ class="ui5-timeline-header-bar-toolbar"
20
+ accessibleName={this._headerBarAccessibleName}
21
+ >
22
+ {/* Spacer pushes all controls to the end */}
23
+ <ToolbarSpacer />
24
+
25
+ {/* Search Input */}
26
+ {this.showSearch && (
27
+ <Input
28
+ class="ui5-timeline-header-bar-search"
29
+ placeholder={this._searchPlaceholder}
30
+ value={this.searchValue}
31
+ showClearIcon={true}
32
+ accessibleName={this._searchAccessibleName}
33
+ onInput={this._onSearchInput}
34
+ >
35
+ <Icon slot="icon" name={searchIcon} />
36
+ </Input>
37
+ )}
38
+
39
+ {/* Sort Button */}
40
+ {this.showSort && (
41
+ <ToolbarButton
42
+ icon={sortDescending}
43
+ design="Transparent"
44
+ tooltip={this._sortTooltip}
45
+ accessibleName={this._sortAccessibleName}
46
+ onClick={this._onSortClick}
47
+ />
48
+ )}
49
+
50
+ {/* Filter Button */}
51
+ {this.showFilter && (
52
+ <ToolbarButton
53
+ icon={addFilter}
54
+ design="Transparent"
55
+ tooltip={this._filterAccessibleName}
56
+ accessibleName={this._filterAccessibleName}
57
+ onClick={this._onFilterClick}
58
+ />
59
+ )}
60
+ </Toolbar>
61
+
62
+ {/* Filter Dialog */}
63
+ {this.showFilter && (
64
+ <Dialog
65
+ class="ui5-timeline-filter-dialog"
66
+ headerText={this._filterDialogTitle}
67
+ open={this._filterDialogOpen}
68
+ onClose={this._onFilterDialogClose}
69
+ >
70
+ <List
71
+ selectionMode="Multiple"
72
+ class="ui5-timeline-filter-list"
73
+ >
74
+ {this.filterOptions.map(option => (
75
+ <ListItemStandard
76
+ key={option.text}
77
+ selected={option.selected}
78
+ data-filter-text={option.text}
79
+ >
80
+ {option.text}
81
+ </ListItemStandard>
82
+ ))}
83
+ </List>
84
+
85
+ <Bar slot="footer" design="Footer">
86
+ <Button
87
+ slot="endContent"
88
+ design="Emphasized"
89
+ onClick={this._onFilterDialogConfirm}
90
+ >
91
+ {this._filterDialogOkText}
92
+ </Button>
93
+ <Button
94
+ slot="endContent"
95
+ design="Transparent"
96
+ onClick={this._onFilterDialogCancel}
97
+ >
98
+ {this._filterDialogCancelText}
99
+ </Button>
100
+ </Bar>
101
+ </Dialog>
102
+ )}
103
+ </>);
104
+ }
@@ -14,6 +14,13 @@ export default function TimelineTemplate(this: Timeline) {
14
14
  onFocusIn={this._onfocusin}
15
15
  onKeyDown={this._onkeydown}
16
16
  >
17
+ {/* Header Bar Slot */}
18
+ {this._hasHeaderBar && (
19
+ <div class="ui5-timeline-header-bar-wrapper">
20
+ <slot name="headerBar"></slot>
21
+ </div>
22
+ )}
23
+
17
24
  <BusyIndicator
18
25
  id={`${this._id}-busyIndicator`}
19
26
  delay={this.loadingDelay}
@@ -0,0 +1,5 @@
1
+ import type ViewSettingsDialogCustomTab from "./ViewSettingsDialogCustomTab.js";
2
+
3
+ export default function ViewSettingsDialogCustomTabTemplate(this: ViewSettingsDialogCustomTab) {
4
+ return <slot></slot>;
5
+ }
@@ -92,6 +92,19 @@ function _getSplitButtonItems(this: ViewSettingsDialog) {
92
92
  );
93
93
  }
94
94
 
95
+ if (this.shouldBuildCustomTabs) {
96
+ this._renderableCustomTabs.forEach(customTab => {
97
+ buttonItems.push(
98
+ <SegmentedButtonItem
99
+ selected={this.isCurrentCustomTabMode(customTab)}
100
+ data-mode={this._customTabMode(customTab)}
101
+ tooltip={customTab.tooltip}
102
+ icon={customTab.icon}
103
+ />
104
+ );
105
+ });
106
+ }
107
+
95
108
  return buttonItems;
96
109
  }
97
110
 
@@ -115,6 +128,24 @@ function ViewSettingsDialogTemplateContent(this: ViewSettingsDialog) {
115
128
  ViewSettingsDialogSortAndGroupTemplate.call(this, false)
116
129
  )}
117
130
 
131
+ {this.isModeCustom && this._selectedCustomTab && (
132
+ <div class="ui5-vsd-custom-tab-content">
133
+ {this._selectedCustomTab.title && (
134
+ <div class="ui5-vsd-custom-tab-title">{this._selectedCustomTab.title}</div>
135
+ )}
136
+ <slot class="ui5-vsd-custom-tab-slot" name={this._selectedCustomTab._individualSlot}></slot>
137
+ </div>
138
+ )}
139
+
140
+ {/* Hidden slots for non-active custom tabs to prevent content leaking */}
141
+ <div class="ui5-vsd-hidden-tabs">
142
+ {this.customTabs
143
+ .filter(tab => tab !== this._selectedCustomTab)
144
+ .map(tab => (
145
+ <slot name={tab._individualSlot}></slot>
146
+ ))}
147
+ </div>
148
+
118
149
  </div>
119
150
  );
120
151
  }
@@ -116,6 +116,36 @@ TIMELINE_ITEM_POSITIVE_STATE_TEXT=Positive State
116
116
  TIMELINE_ITEM_NEGATIVE_STATE_TEXT=Negative State
117
117
  TIMELINE_ITEM_CRITICAL_STATE_TEXT=Critical State
118
118
 
119
+ #XACT: Accessible name for timeline header bar
120
+ TIMELINE_HEADER_BAR_ACCESSIBLE_NAME=Timeline actions
121
+
122
+ #XFLD: Placeholder for timeline search input
123
+ TIMELINE_SEARCH_PLACEHOLDER=Search
124
+
125
+ #XACT: Accessible name for timeline search input
126
+ TIMELINE_SEARCH_ACCESSIBLE_NAME=Search timeline items
127
+
128
+ #XACT: Accessible name for timeline filter dropdown
129
+ TIMELINE_FILTER_ACCESSIBLE_NAME=Filter timeline items
130
+
131
+ #XTOL: Tooltip for sort ascending button
132
+ TIMELINE_SORT_ASCENDING_TOOLTIP=Sort ascending
133
+
134
+ #XTOL: Tooltip for sort descending button
135
+ TIMELINE_SORT_DESCENDING_TOOLTIP=Sort descending
136
+
137
+ #XACT: Accessible name for sort button
138
+ TIMELINE_SORT_ACCESSIBLE_NAME=Sort timeline items
139
+
140
+ #XTIT: Title for timeline filter dialog
141
+ TIMELINE_FILTER_DIALOG_TITLE=Filter By
142
+
143
+ #XBUT: OK button text for timeline filter dialog
144
+ TIMELINE_FILTER_DIALOG_OK=OK
145
+
146
+ #XBUT: Cancel button text for timeline filter dialog
147
+ TIMELINE_FILTER_DIALOG_CANCEL=Cancel
148
+
119
149
  #XBUT: Button text for cancel button in the UploadCollectionItem
120
150
  UPLOADCOLLECTIONITEM_CANCELBUTTON_TEXT=Cancel
121
151
 
@@ -2,10 +2,10 @@
2
2
  display: block;
3
3
  }
4
4
 
5
- .ui5-timeline-root {
6
- padding: var(--_ui5_tl_padding);
7
- box-sizing: border-box;
8
- overflow: hidden;
5
+ /* Header bar wrapper - slotted content */
6
+ .ui5-timeline-header-bar-wrapper {
7
+ flex-shrink: 0;
8
+ margin-block-end: 1rem;
9
9
  }
10
10
 
11
11
  .ui5-timeline-list {
@@ -69,20 +69,34 @@
69
69
  display: none;
70
70
  }
71
71
 
72
- .ui5-timeline-root,
73
- .ui5-timeline-busy-indicator {
72
+ .ui5-timeline-root {
74
73
  width: 100%;
75
74
  height: 100%;
76
75
  position: relative;
77
76
  box-sizing: border-box;
77
+ display: flex;
78
+ flex-direction: column;
79
+ padding: var(--_ui5_tl_padding);
80
+ overflow: hidden;
81
+ }
82
+
83
+ .ui5-timeline-busy-indicator {
84
+ display: block;
85
+ width: 100%;
86
+ flex: 1;
87
+ min-height: 0;
88
+ position: relative;
89
+ box-sizing: border-box;
90
+ overflow: hidden;
78
91
  }
79
92
 
80
93
  :host([layout="Vertical"]) .ui5-timeline-scroll-container {
81
94
  height: 100%;
82
95
  width: 100%;
96
+ overflow: auto;
83
97
  }
84
98
 
85
99
  :host([growing="Scroll"]) .ui5-timeline-end-marker {
86
100
  /* Ensure the list-end-marker has a block property to always be stretched and "visible" on the screen */
87
101
  display: inline-block;
88
- }
102
+ }
@@ -0,0 +1,17 @@
1
+ :host {
2
+ display: block;
3
+ --_ui5_timeline_header_bar_search_max_width: 16rem;
4
+ --_ui5_timeline_filter_dialog_min_width: 20rem;
5
+ }
6
+
7
+ .ui5-timeline-header-bar-search {
8
+ max-width: var(--_ui5_timeline_header_bar_search_max_width);
9
+ }
10
+
11
+ .ui5-timeline-filter-dialog {
12
+ min-width: var(--_ui5_timeline_filter_dialog_min_width);
13
+ }
14
+
15
+ .ui5-timeline-filter-list {
16
+ width: 100%;
17
+ }
@@ -65,6 +65,39 @@
65
65
  height: 100%;
66
66
  }
67
67
 
68
+ .ui5-vsd-custom-tab-content {
69
+ width: 100%;
70
+ height: 100%;
71
+ box-sizing: border-box;
72
+ padding: 0.5rem 1rem;
73
+ overflow: auto;
74
+ min-width: 0;
75
+ }
76
+
77
+ .ui5-vsd-custom-tab-title {
78
+ color: var(--sapList_TableGroupHeaderTextColor);
79
+ font-family: var(--sapFontHeaderFamily);
80
+ font-size: var(--sapFontHeader6Size);
81
+ font-weight: bold;
82
+ line-height: 2rem;
83
+ min-height: 2rem;
84
+ margin: 0;
85
+ }
86
+
87
+ .ui5-vsd-custom-tab-slot::slotted([ui5-view-settings-custom-tab]) {
88
+ display: block;
89
+ width: 100%;
90
+ max-width: 100%;
91
+ min-width: 0;
92
+ box-sizing: border-box;
93
+ font-family: var(--sapFontFamily);
94
+ color: var(--sapTextColor);
95
+ }
96
+
97
+ .ui5-vsd-hidden-tabs {
98
+ display: none;
99
+ }
100
+
68
101
  [ui5-li-group]::part(header) {
69
102
  overflow: hidden;
70
103
  }