@ui5/webcomponents-fiori 2.19.2 → 2.20.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.
- package/CHANGELOG.md +12 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/DynamicPage.js +8 -2
- package/dist/DynamicPage.js.map +1 -1
- package/dist/ShellBar.d.ts +231 -304
- package/dist/ShellBar.js +506 -980
- package/dist/ShellBar.js.map +1 -1
- package/dist/ShellBarItem.d.ts +15 -31
- package/dist/ShellBarItem.js +36 -25
- package/dist/ShellBarItem.js.map +1 -1
- package/dist/ShellBarItemTemplate.d.ts +2 -0
- package/dist/ShellBarItemTemplate.js +11 -0
- package/dist/ShellBarItemTemplate.js.map +1 -0
- package/dist/ShellBarTemplate.js +53 -55
- package/dist/ShellBarTemplate.js.map +1 -1
- package/dist/UserMenu.d.ts +10 -1
- package/dist/UserMenu.js +9 -1
- package/dist/UserMenu.js.map +1 -1
- package/dist/UserMenuAccount.js +0 -2
- package/dist/UserMenuAccount.js.map +1 -1
- package/dist/UserMenuItem.d.ts +0 -1
- package/dist/UserMenuItem.js +0 -1
- package/dist/UserMenuItem.js.map +1 -1
- package/dist/UserMenuItemGroup.d.ts +0 -1
- package/dist/UserMenuItemGroup.js +0 -1
- package/dist/UserMenuItemGroup.js.map +1 -1
- package/dist/UserMenuTemplate.js +3 -1
- package/dist/UserMenuTemplate.js.map +1 -1
- package/dist/UserSettingsAccountView.js +0 -2
- package/dist/UserSettingsAccountView.js.map +1 -1
- package/dist/UserSettingsAppearanceView.js +0 -2
- package/dist/UserSettingsAppearanceView.js.map +1 -1
- package/dist/UserSettingsAppearanceViewGroup.d.ts +0 -1
- package/dist/UserSettingsAppearanceViewGroup.js +0 -1
- package/dist/UserSettingsAppearanceViewGroup.js.map +1 -1
- package/dist/UserSettingsAppearanceViewItem.js +0 -2
- package/dist/UserSettingsAppearanceViewItem.js.map +1 -1
- package/dist/UserSettingsDialog.d.ts +0 -1
- package/dist/UserSettingsDialog.js +0 -1
- package/dist/UserSettingsDialog.js.map +1 -1
- package/dist/UserSettingsItem.d.ts +0 -1
- package/dist/UserSettingsItem.js +0 -1
- package/dist/UserSettingsItem.js.map +1 -1
- package/dist/UserSettingsView.d.ts +0 -1
- package/dist/UserSettingsView.js +0 -1
- package/dist/UserSettingsView.js.map +1 -1
- package/dist/css/themes/ShellBar.css +1 -1
- package/dist/css/themes/ShellBarItem.css +1 -0
- package/dist/css/themes/ShellBarLegacy.css +1 -0
- package/dist/css/themes/ShellBarSearchLegacy.css +1 -0
- package/dist/custom-elements-internal.json +363 -750
- package/dist/custom-elements.json +324 -609
- package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_id.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/ShellBar.css.d.ts +1 -1
- package/dist/generated/themes/ShellBar.css.js +1 -1
- package/dist/generated/themes/ShellBar.css.js.map +1 -1
- package/dist/generated/themes/ShellBarItem.css.d.ts +2 -0
- package/dist/generated/themes/ShellBarItem.css.js +8 -0
- package/dist/generated/themes/ShellBarItem.css.js.map +1 -0
- package/dist/generated/themes/ShellBarLegacy.css.d.ts +2 -0
- package/dist/generated/themes/ShellBarLegacy.css.js +8 -0
- package/dist/generated/themes/ShellBarLegacy.css.js.map +1 -0
- package/dist/generated/themes/ShellBarSearchLegacy.css.d.ts +2 -0
- package/dist/generated/themes/ShellBarSearchLegacy.css.js +8 -0
- package/dist/generated/themes/ShellBarSearchLegacy.css.js.map +1 -0
- package/dist/shellbar/IShellBarSearchController.d.ts +28 -0
- package/dist/shellbar/IShellBarSearchController.js +2 -0
- package/dist/shellbar/IShellBarSearchController.js.map +1 -0
- package/dist/shellbar/ShellBarAccessibility.d.ts +42 -0
- package/dist/shellbar/ShellBarAccessibility.js +50 -0
- package/dist/shellbar/ShellBarAccessibility.js.map +1 -0
- package/dist/shellbar/ShellBarItemNavigation.d.ts +18 -0
- package/dist/shellbar/ShellBarItemNavigation.js +86 -0
- package/dist/shellbar/ShellBarItemNavigation.js.map +1 -0
- package/dist/shellbar/ShellBarLegacy.d.ts +46 -0
- package/dist/shellbar/ShellBarLegacy.js +138 -0
- package/dist/shellbar/ShellBarLegacy.js.map +1 -0
- package/dist/shellbar/ShellBarOverflow.d.ts +51 -0
- package/dist/shellbar/ShellBarOverflow.js +159 -0
- package/dist/shellbar/ShellBarOverflow.js.map +1 -0
- package/dist/shellbar/ShellBarSearch.d.ts +59 -0
- package/dist/shellbar/ShellBarSearch.js +145 -0
- package/dist/shellbar/ShellBarSearch.js.map +1 -0
- package/dist/shellbar/ShellBarSearchLegacy.d.ts +65 -0
- package/dist/shellbar/ShellBarSearchLegacy.js +116 -0
- package/dist/shellbar/ShellBarSearchLegacy.js.map +1 -0
- package/dist/shellbar/templates/ShellBarLegacyTemplate.d.ts +20 -0
- package/dist/shellbar/templates/ShellBarLegacyTemplate.js +71 -0
- package/dist/shellbar/templates/ShellBarLegacyTemplate.js.map +1 -0
- package/dist/shellbar/templates/ShellBarSearchLegacyTemplate.d.ts +5 -0
- package/dist/shellbar/templates/ShellBarSearchLegacyTemplate.js +18 -0
- package/dist/shellbar/templates/ShellBarSearchLegacyTemplate.js.map +1 -0
- package/dist/shellbar/templates/ShellBarSearchTemplate.d.ts +4 -0
- package/dist/shellbar/templates/ShellBarSearchTemplate.js +17 -0
- package/dist/shellbar/templates/ShellBarSearchTemplate.js.map +1 -0
- package/dist/vscode.html-custom-data.json +29 -79
- package/dist/web-types.json +75 -239
- package/package.json +8 -8
- package/src/ShellBarItemTemplate.tsx +36 -0
- package/src/ShellBarTemplate.tsx +222 -300
- package/src/UserMenuTemplate.tsx +11 -3
- package/src/i18n/messagebundle.properties +3 -0
- package/src/i18n/messagebundle_ar.properties +2 -0
- package/src/i18n/messagebundle_bg.properties +6 -4
- package/src/i18n/messagebundle_ca.properties +2 -0
- package/src/i18n/messagebundle_cnr.properties +2 -0
- package/src/i18n/messagebundle_cs.properties +2 -0
- package/src/i18n/messagebundle_cy.properties +2 -0
- package/src/i18n/messagebundle_da.properties +2 -0
- package/src/i18n/messagebundle_de.properties +2 -0
- package/src/i18n/messagebundle_el.properties +2 -0
- package/src/i18n/messagebundle_en.properties +2 -0
- package/src/i18n/messagebundle_en_GB.properties +2 -0
- package/src/i18n/messagebundle_en_US_sappsd.properties +2 -0
- package/src/i18n/messagebundle_en_US_saprigi.properties +2 -0
- package/src/i18n/messagebundle_en_US_saptrc.properties +2 -0
- package/src/i18n/messagebundle_es.properties +2 -0
- package/src/i18n/messagebundle_es_MX.properties +2 -0
- package/src/i18n/messagebundle_et.properties +2 -0
- package/src/i18n/messagebundle_fi.properties +2 -0
- package/src/i18n/messagebundle_fr.properties +2 -0
- package/src/i18n/messagebundle_fr_CA.properties +2 -0
- package/src/i18n/messagebundle_hi.properties +2 -0
- package/src/i18n/messagebundle_hr.properties +2 -0
- package/src/i18n/messagebundle_hu.properties +2 -0
- package/src/i18n/messagebundle_id.properties +3 -1
- package/src/i18n/messagebundle_it.properties +2 -0
- package/src/i18n/messagebundle_iw.properties +2 -0
- package/src/i18n/messagebundle_ja.properties +2 -0
- package/src/i18n/messagebundle_kk.properties +2 -0
- package/src/i18n/messagebundle_ko.properties +2 -0
- package/src/i18n/messagebundle_lt.properties +2 -0
- package/src/i18n/messagebundle_lv.properties +2 -0
- package/src/i18n/messagebundle_mk.properties +2 -0
- package/src/i18n/messagebundle_ms.properties +2 -0
- package/src/i18n/messagebundle_nl.properties +2 -0
- package/src/i18n/messagebundle_no.properties +2 -0
- package/src/i18n/messagebundle_pl.properties +2 -0
- package/src/i18n/messagebundle_pt.properties +2 -0
- package/src/i18n/messagebundle_pt_PT.properties +2 -0
- package/src/i18n/messagebundle_ro.properties +2 -0
- package/src/i18n/messagebundle_ru.properties +2 -0
- package/src/i18n/messagebundle_sh.properties +2 -0
- package/src/i18n/messagebundle_sk.properties +2 -0
- package/src/i18n/messagebundle_sl.properties +2 -0
- package/src/i18n/messagebundle_sr.properties +2 -0
- package/src/i18n/messagebundle_sv.properties +2 -0
- package/src/i18n/messagebundle_th.properties +2 -0
- package/src/i18n/messagebundle_tr.properties +2 -0
- package/src/i18n/messagebundle_uk.properties +2 -0
- package/src/i18n/messagebundle_vi.properties +2 -0
- package/src/i18n/messagebundle_zh_CN.properties +2 -0
- package/src/i18n/messagebundle_zh_TW.properties +2 -0
- package/src/shellbar/templates/ShellBarLegacyTemplate.tsx +190 -0
- package/src/shellbar/templates/ShellBarSearchLegacyTemplate.tsx +61 -0
- package/src/shellbar/templates/ShellBarSearchTemplate.tsx +40 -0
- package/src/themes/NavigationLayout.css +1 -0
- package/src/themes/ShellBar.css +189 -372
- package/src/themes/ShellBarItem.css +43 -0
- package/src/themes/ShellBarLegacy.css +174 -0
- package/src/themes/ShellBarSearchLegacy.css +44 -0
- package/dist/ShellBarPopoverTemplate.d.ts +0 -2
- package/dist/ShellBarPopoverTemplate.js +0 -9
- package/dist/ShellBarPopoverTemplate.js.map +0 -1
- package/src/ShellBarPopoverTemplate.tsx +0 -50
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { ShellBarActions, ShellBarActionsSelectors } from "../ShellBar.js";
|
|
2
|
+
class ShellBarOverflow {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.CLOSED_SEARCH_STRATEGY = {
|
|
5
|
+
ACTIONS: 0, // All actions hide first
|
|
6
|
+
CONTENT: 1000, // Then content (except last)
|
|
7
|
+
SEARCH: 2000, // Then search button
|
|
8
|
+
LAST_CONTENT: 3000, // Last content item hides last
|
|
9
|
+
};
|
|
10
|
+
this.OPEN_SEARCH_STRATEGY = {
|
|
11
|
+
CONTENT: 0, // All content hide first
|
|
12
|
+
ACTIONS: 1000, // All actions next
|
|
13
|
+
SEARCH: 2000, // Then search button
|
|
14
|
+
LAST_CONTENT: 0, // Last content same as other content
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
updateOverflow(params) {
|
|
18
|
+
const { overflowOuter, overflowInner, setVisible, } = params;
|
|
19
|
+
if (!overflowOuter || !overflowInner) {
|
|
20
|
+
return { hiddenItemsIds: [], showOverflowButton: false };
|
|
21
|
+
}
|
|
22
|
+
const sortedItems = this.buildHidableItems(params);
|
|
23
|
+
// set initial state, to account for isOverflowing calculation
|
|
24
|
+
setVisible(ShellBarActionsSelectors.Overflow, false);
|
|
25
|
+
sortedItems.forEach(item => {
|
|
26
|
+
// show all items to account for isOverflowing calculation
|
|
27
|
+
setVisible(item.selector, true);
|
|
28
|
+
});
|
|
29
|
+
let nextItemToHide = null;
|
|
30
|
+
let showOverflowButton = false;
|
|
31
|
+
const hiddenItemsIds = [];
|
|
32
|
+
// Iteratively hide items until no overflow
|
|
33
|
+
for (let indexToHide = 0; indexToHide < sortedItems.length; indexToHide++) {
|
|
34
|
+
nextItemToHide = sortedItems[indexToHide];
|
|
35
|
+
if (!this.isOverflowing(overflowOuter, overflowInner)) {
|
|
36
|
+
break; // No more overflow, stop hiding
|
|
37
|
+
}
|
|
38
|
+
setVisible(nextItemToHide.selector, false);
|
|
39
|
+
hiddenItemsIds.push(nextItemToHide.id);
|
|
40
|
+
if (nextItemToHide.showInOverflow) {
|
|
41
|
+
// show overflow button to account in isOverflowing calculation
|
|
42
|
+
setVisible(ShellBarActionsSelectors.Overflow, true);
|
|
43
|
+
showOverflowButton = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
hiddenItemsIds,
|
|
48
|
+
showOverflowButton,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
isOverflowing(overflowOuter, overflowInner) {
|
|
52
|
+
return overflowInner.offsetWidth > overflowOuter.offsetWidth;
|
|
53
|
+
}
|
|
54
|
+
getOverflowStrategy(showSearchField) {
|
|
55
|
+
return showSearchField ? this.OPEN_SEARCH_STRATEGY : this.CLOSED_SEARCH_STRATEGY;
|
|
56
|
+
}
|
|
57
|
+
buildHidableItems(params) {
|
|
58
|
+
const items = [
|
|
59
|
+
...this.buildContent(params),
|
|
60
|
+
...this.buildActions(params),
|
|
61
|
+
];
|
|
62
|
+
// sort by hideOrder first then by keepHidden keepHidden items are at the start
|
|
63
|
+
return items.sort((a, b) => {
|
|
64
|
+
if (a.keepHidden && !b.keepHidden) {
|
|
65
|
+
return -1;
|
|
66
|
+
}
|
|
67
|
+
if (!a.keepHidden && b.keepHidden) {
|
|
68
|
+
return 1;
|
|
69
|
+
}
|
|
70
|
+
return a.hideOrder - b.hideOrder;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
buildContent(params) {
|
|
74
|
+
const { content, showSearchField, } = params;
|
|
75
|
+
const items = [];
|
|
76
|
+
const overflowStrategy = this.getOverflowStrategy(showSearchField);
|
|
77
|
+
// Build content items
|
|
78
|
+
content.forEach((item, index) => {
|
|
79
|
+
const slotName = item._individualSlot;
|
|
80
|
+
const dataHideOrder = parseInt(item.getAttribute("data-hide-order") || String(index));
|
|
81
|
+
const isLast = index === content.length - 1;
|
|
82
|
+
const priority = isLast ? overflowStrategy.LAST_CONTENT : overflowStrategy.CONTENT;
|
|
83
|
+
items.push({
|
|
84
|
+
id: slotName,
|
|
85
|
+
selector: `#${slotName}`,
|
|
86
|
+
hideOrder: priority + dataHideOrder,
|
|
87
|
+
keepHidden: false, // Content items don't cause flickering
|
|
88
|
+
showInOverflow: false,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
return items;
|
|
92
|
+
}
|
|
93
|
+
buildActions(params) {
|
|
94
|
+
const { customItems, actions, showSearchField, hiddenItemsIds, } = params;
|
|
95
|
+
const items = [];
|
|
96
|
+
const overflowStrategy = this.getOverflowStrategy(showSearchField);
|
|
97
|
+
let actionIndex = 0;
|
|
98
|
+
customItems.forEach(item => {
|
|
99
|
+
items.push({
|
|
100
|
+
id: item._id,
|
|
101
|
+
selector: `[data-ui5-stable="${item.stableDomRef}"]`,
|
|
102
|
+
hideOrder: overflowStrategy.ACTIONS + actionIndex++,
|
|
103
|
+
keepHidden: hiddenItemsIds.includes(item._id),
|
|
104
|
+
showInOverflow: true,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
actions
|
|
108
|
+
// skip protected actions and search (handled separately)
|
|
109
|
+
.filter(a => !a.isProtected && a.id !== ShellBarActions.Search)
|
|
110
|
+
.forEach(config => {
|
|
111
|
+
items.push({
|
|
112
|
+
id: config.id,
|
|
113
|
+
selector: config.selector,
|
|
114
|
+
hideOrder: overflowStrategy.ACTIONS + actionIndex++,
|
|
115
|
+
keepHidden: hiddenItemsIds.includes(config.id),
|
|
116
|
+
showInOverflow: true,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
if (!showSearchField) {
|
|
120
|
+
// Only move search to overflow if it's closed
|
|
121
|
+
items.push({
|
|
122
|
+
id: ShellBarActions.Search,
|
|
123
|
+
selector: ShellBarActionsSelectors.Search,
|
|
124
|
+
hideOrder: overflowStrategy.SEARCH + actionIndex++,
|
|
125
|
+
keepHidden: false, // Search button can be shown/hidden freely
|
|
126
|
+
showInOverflow: true,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return items;
|
|
130
|
+
}
|
|
131
|
+
getOverflowItems(params) {
|
|
132
|
+
const { actions, customItems, hiddenItemsIds } = params;
|
|
133
|
+
const result = [];
|
|
134
|
+
// Add hidden custom items
|
|
135
|
+
const hiddenCustomItems = customItems.filter((item) => hiddenItemsIds.includes(item._id));
|
|
136
|
+
hiddenCustomItems.forEach((item, index) => {
|
|
137
|
+
result.push({
|
|
138
|
+
type: "item", id: item._id, data: item, order: 3 + index,
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
const actionOrder = {
|
|
142
|
+
[ShellBarActions.Search]: 0,
|
|
143
|
+
[ShellBarActions.Notifications]: 1,
|
|
144
|
+
[ShellBarActions.Assistant]: 2,
|
|
145
|
+
};
|
|
146
|
+
const hiddenActions = actions.filter(action => hiddenItemsIds.includes(action.id));
|
|
147
|
+
hiddenActions.forEach(action => {
|
|
148
|
+
result.push({
|
|
149
|
+
type: "action",
|
|
150
|
+
id: action.id,
|
|
151
|
+
data: action,
|
|
152
|
+
order: actionOrder[action.id] ?? 0,
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
return result.sort((a, b) => a.order - b.order);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export default ShellBarOverflow;
|
|
159
|
+
//# sourceMappingURL=ShellBarOverflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellBarOverflow.js","sourceRoot":"","sources":["../../src/shellbar/ShellBarOverflow.ts"],"names":[],"mappings":"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","sourcesContent":["import type ShellBarItem from \"../ShellBarItem.js\";\nimport { ShellBarActions, ShellBarActionsSelectors } from \"../ShellBar.js\";\nimport type { ShellBarActionId, ShellBarActionItem } from \"../ShellBar.js\";\n\ninterface ShellBarHidableItem {\n\tid: string;\n\tselector: string; \t\t\t// CSS selector to find the element\n\thideOrder: number;\t\t\t// Priority for hiding - later adjusted based on search field state\n\tkeepHidden: boolean; \t\t// Keep item hidden to prevent flickering when searchfield expands/collapses\n\tshowInOverflow?: boolean; \t// If true, hiding this item triggers overflow button\n}\n\ninterface ShellBarOverflowParams {\n\tactions: readonly ShellBarActionItem[];\n\tcontent: readonly HTMLElement[];\n\tcustomItems: readonly ShellBarItem[];\n\toverflowOuter: HTMLElement;\n\toverflowInner: HTMLElement;\n\thiddenItemsIds: readonly string[];\n\tshowSearchField: boolean;\n\tsetVisible: (selector: string, visible: boolean) => void;\n}\n\ninterface ShellBarOverflowResult {\n\thiddenItemsIds: string[];\n\tshowOverflowButton: boolean;\n}\n\ntype ShellBarOverflowItem = {\n\ttype: \"action\";\n\tid: ShellBarActionId;\n\tdata: ShellBarActionItem\n\torder: number;\n} | {\n\ttype: \"item\";\n\tid: string;\n\tdata: ShellBarItem;\n\torder: number;\n}\n\nclass ShellBarOverflow {\n\tprivate readonly CLOSED_SEARCH_STRATEGY = {\n\t\tACTIONS: 0,\t\t\t// All actions hide first\n\t\tCONTENT: 1000,\t\t// Then content (except last)\n\t\tSEARCH: 2000,\t\t// Then search button\n\t\tLAST_CONTENT: 3000,\t// Last content item hides last\n\t};\n\n\tprivate readonly OPEN_SEARCH_STRATEGY = {\n\t\tCONTENT: 0, \t\t// All content hide first\n\t\tACTIONS: 1000,\t\t// All actions next\n\t\tSEARCH: 2000,\t\t// Then search button\n\t\tLAST_CONTENT: 0,\t// Last content same as other content\n\t};\n\n\tupdateOverflow(params: ShellBarOverflowParams): ShellBarOverflowResult {\n\t\tconst {\n\t\t\toverflowOuter, overflowInner, setVisible,\n\t\t} = params;\n\n\t\tif (!overflowOuter || !overflowInner) {\n\t\t\treturn { hiddenItemsIds: [], showOverflowButton: false };\n\t\t}\n\n\t\tconst sortedItems = this.buildHidableItems(params);\n\n\t\t// set initial state, to account for isOverflowing calculation\n\t\tsetVisible(ShellBarActionsSelectors.Overflow, false);\n\t\tsortedItems.forEach(item => {\n\t\t\t// show all items to account for isOverflowing calculation\n\t\t\tsetVisible(item.selector, true);\n\t\t});\n\n\t\tlet nextItemToHide = null;\n\t\tlet showOverflowButton = false;\n\t\tconst hiddenItemsIds: string[] = [];\n\n\t\t// Iteratively hide items until no overflow\n\t\tfor (let indexToHide = 0; indexToHide < sortedItems.length; indexToHide++) {\n\t\t\tnextItemToHide = sortedItems[indexToHide];\n\n\t\t\tif (!this.isOverflowing(overflowOuter, overflowInner)) {\n\t\t\t\tbreak; // No more overflow, stop hiding\n\t\t\t}\n\n\t\t\tsetVisible(nextItemToHide.selector, false);\n\t\t\thiddenItemsIds.push(nextItemToHide.id);\n\n\t\t\tif (nextItemToHide.showInOverflow) {\n\t\t\t\t// show overflow button to account in isOverflowing calculation\n\t\t\t\tsetVisible(ShellBarActionsSelectors.Overflow, true);\n\t\t\t\tshowOverflowButton = true;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\thiddenItemsIds,\n\t\t\tshowOverflowButton,\n\t\t};\n\t}\n\n\tisOverflowing(overflowOuter: HTMLElement, overflowInner: HTMLElement): boolean {\n\t\treturn overflowInner.offsetWidth > overflowOuter.offsetWidth;\n\t}\n\n\tprivate getOverflowStrategy(showSearchField: boolean) {\n\t\treturn showSearchField ? this.OPEN_SEARCH_STRATEGY : this.CLOSED_SEARCH_STRATEGY;\n\t}\n\n\tprivate buildHidableItems(params: ShellBarOverflowParams): ShellBarHidableItem[] {\n\t\tconst items: ShellBarHidableItem[] = [\n\t\t\t...this.buildContent(params),\n\t\t\t...this.buildActions(params),\n\t\t];\n\n\t\t// sort by hideOrder first then by keepHidden keepHidden items are at the start\n\t\treturn items.sort((a, b) => {\n\t\t\tif (a.keepHidden && !b.keepHidden) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (!a.keepHidden && b.keepHidden) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn a.hideOrder - b.hideOrder;\n\t\t});\n\t}\n\n\tprivate buildContent(params: ShellBarOverflowParams): readonly ShellBarHidableItem[] {\n\t\tconst {\n\t\t\tcontent, showSearchField,\n\t\t} = params;\n\n\t\tconst items: ShellBarHidableItem[] = [];\n\t\tconst overflowStrategy = this.getOverflowStrategy(showSearchField);\n\n\t\t// Build content items\n\t\tcontent.forEach((item, index) => {\n\t\t\tconst slotName = (item as any)._individualSlot as string;\n\t\t\tconst dataHideOrder = parseInt(item.getAttribute(\"data-hide-order\") || String(index));\n\t\t\tconst isLast = index === content.length - 1;\n\n\t\t\tconst priority = isLast ? overflowStrategy.LAST_CONTENT : overflowStrategy.CONTENT;\n\n\t\t\titems.push({\n\t\t\t\tid: slotName,\n\t\t\t\tselector: `#${slotName}`,\n\t\t\t\thideOrder: priority + dataHideOrder,\n\t\t\t\tkeepHidden: false, // Content items don't cause flickering\n\t\t\t\tshowInOverflow: false,\n\t\t\t});\n\t\t});\n\n\t\treturn items;\n\t}\n\n\tprivate buildActions(params: ShellBarOverflowParams): readonly ShellBarHidableItem[] {\n\t\tconst {\n\t\t\tcustomItems, actions, showSearchField, hiddenItemsIds,\n\t\t} = params;\n\n\t\tconst items: ShellBarHidableItem[] = [];\n\t\tconst overflowStrategy = this.getOverflowStrategy(showSearchField);\n\t\tlet actionIndex = 0;\n\n\t\tcustomItems.forEach(item => {\n\t\t\titems.push({\n\t\t\t\tid: item._id,\n\t\t\t\tselector: `[data-ui5-stable=\"${item.stableDomRef}\"]`,\n\t\t\t\thideOrder: overflowStrategy.ACTIONS + actionIndex++,\n\t\t\t\tkeepHidden: hiddenItemsIds.includes(item._id),\n\t\t\t\tshowInOverflow: true,\n\t\t\t});\n\t\t});\n\n\t\tactions\n\t\t\t// skip protected actions and search (handled separately)\n\t\t\t.filter(a => !a.isProtected && a.id !== ShellBarActions.Search)\n\t\t\t.forEach(config => {\n\t\t\t\titems.push({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tselector: config.selector,\n\t\t\t\t\thideOrder: overflowStrategy.ACTIONS + actionIndex++,\n\t\t\t\t\tkeepHidden: hiddenItemsIds.includes(config.id),\n\t\t\t\t\tshowInOverflow: true,\n\t\t\t\t});\n\t\t\t});\n\n\t\tif (!showSearchField) {\n\t\t\t// Only move search to overflow if it's closed\n\t\t\titems.push({\n\t\t\t\tid: ShellBarActions.Search,\n\t\t\t\tselector: ShellBarActionsSelectors.Search,\n\t\t\t\thideOrder: overflowStrategy.SEARCH + actionIndex++,\n\t\t\t\tkeepHidden: false, // Search button can be shown/hidden freely\n\t\t\t\tshowInOverflow: true,\n\t\t\t});\n\t\t}\n\t\treturn items;\n\t}\n\n\tgetOverflowItems(params: {\n\t\tactions: readonly ShellBarActionItem[];\n\t\tcustomItems: readonly ShellBarItem[];\n\t\thiddenItemsIds: readonly string[];\n\t}): ReadonlyArray<ShellBarOverflowItem> {\n\t\tconst { actions, customItems, hiddenItemsIds } = params;\n\t\tconst result: ShellBarOverflowItem[] = [];\n\n\t\t// Add hidden custom items\n\t\tconst hiddenCustomItems = customItems.filter((item: ShellBarItem) => hiddenItemsIds.includes(item._id));\n\t\thiddenCustomItems.forEach((item: ShellBarItem, index: number) => {\n\t\t\tresult.push({\n\t\t\t\ttype: \"item\", id: item._id, data: item, order: 3 + index,\n\t\t\t});\n\t\t});\n\n\t\tconst actionOrder: Record<string, number> = {\n\t\t\t[ShellBarActions.Search]: 0,\n\t\t\t[ShellBarActions.Notifications]: 1,\n\t\t\t[ShellBarActions.Assistant]: 2,\n\t\t};\n\n\t\tconst hiddenActions = actions.filter(action => hiddenItemsIds.includes(action.id));\n\t\thiddenActions.forEach(action => {\n\t\t\tresult.push({\n\t\t\t\ttype: \"action\",\n\t\t\t\tid: action.id,\n\t\t\t\tdata: action,\n\t\t\t\torder: actionOrder[action.id] ?? 0,\n\t\t\t});\n\t\t});\n\n\t\treturn result.sort((a, b) => a.order - b.order);\n\t}\n}\n\nexport default ShellBarOverflow;\nexport type {\n\tShellBarHidableItem,\n\tShellBarOverflowParams,\n\tShellBarOverflowResult,\n\tShellBarOverflowItem,\n};\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { IShellBarSearchField } from "../ShellBar.js";
|
|
2
|
+
import type { IShellBarSearchController } from "./IShellBarSearchController.js";
|
|
3
|
+
interface ShellBarSearchConstructorParams {
|
|
4
|
+
getOverflowed: () => boolean;
|
|
5
|
+
getSearchState: () => boolean;
|
|
6
|
+
setSearchState: (expanded: boolean) => void;
|
|
7
|
+
getSearchField: () => IShellBarSearchField | null;
|
|
8
|
+
getCSSVariable: (variable: string) => string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Search controller for self-collapsible search (ui5-shellbar-search).
|
|
12
|
+
* Handles search fields with collapsed/open properties and ui5-open/close/search events.
|
|
13
|
+
*/
|
|
14
|
+
declare class ShellBarSearch implements IShellBarSearchController {
|
|
15
|
+
static CSS_VARIABLE: string;
|
|
16
|
+
static FALLBACK_WIDTH: number;
|
|
17
|
+
private onSearchBound;
|
|
18
|
+
private onSearchOpenBound;
|
|
19
|
+
private onSearchCloseBound;
|
|
20
|
+
private getOverflowed;
|
|
21
|
+
private getSearchField;
|
|
22
|
+
private getSearchState;
|
|
23
|
+
private setSearchState;
|
|
24
|
+
private getCSSVariable;
|
|
25
|
+
private initialRender;
|
|
26
|
+
constructor({ getOverflowed, setSearchState, getSearchField, getSearchState, getCSSVariable, }: ShellBarSearchConstructorParams);
|
|
27
|
+
subscribe(searchField?: HTMLElement | null): void;
|
|
28
|
+
unsubscribe(searchField?: HTMLElement | null): void;
|
|
29
|
+
/**
|
|
30
|
+
* Auto-collapse/restore search field based on available space.
|
|
31
|
+
* Delegates decision logic to SearchController.
|
|
32
|
+
*/
|
|
33
|
+
autoManageSearchState(hiddenItems: number, availableSpace: number): void;
|
|
34
|
+
/**
|
|
35
|
+
* Applies the show-search-field state to the search field.
|
|
36
|
+
*/
|
|
37
|
+
syncShowSearchFieldState(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Determines if full-screen search should be shown.
|
|
40
|
+
* Full-screen search activates when overflow happens AND search is visible.
|
|
41
|
+
*/
|
|
42
|
+
shouldShowFullScreen(): boolean;
|
|
43
|
+
private onSearchOpen;
|
|
44
|
+
private onSearchClose;
|
|
45
|
+
private onSearch;
|
|
46
|
+
/**
|
|
47
|
+
* Gets the minimum width needed for search field from CSS variable.
|
|
48
|
+
*/
|
|
49
|
+
private getSearchFieldWidth;
|
|
50
|
+
get hasSearchField(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Gets the size of the search button.
|
|
53
|
+
* If the search field is visible, the size is 0.
|
|
54
|
+
* Otherwise, it is the width of the search field (just a button in collapsed state).
|
|
55
|
+
*/
|
|
56
|
+
private getSearchButtonSize;
|
|
57
|
+
}
|
|
58
|
+
export default ShellBarSearch;
|
|
59
|
+
export type { ShellBarSearchConstructorParams, };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { isPhone } from "@ui5/webcomponents-base/dist/Device.js";
|
|
2
|
+
/**
|
|
3
|
+
* Search controller for self-collapsible search (ui5-shellbar-search).
|
|
4
|
+
* Handles search fields with collapsed/open properties and ui5-open/close/search events.
|
|
5
|
+
*/
|
|
6
|
+
class ShellBarSearch {
|
|
7
|
+
constructor({ getOverflowed, setSearchState, getSearchField, getSearchState, getCSSVariable, }) {
|
|
8
|
+
this.onSearchBound = this.onSearch.bind(this);
|
|
9
|
+
this.onSearchOpenBound = this.onSearchOpen.bind(this);
|
|
10
|
+
this.onSearchCloseBound = this.onSearchClose.bind(this);
|
|
11
|
+
this.initialRender = true;
|
|
12
|
+
this.getOverflowed = getOverflowed;
|
|
13
|
+
this.getCSSVariable = getCSSVariable;
|
|
14
|
+
this.getSearchField = getSearchField;
|
|
15
|
+
this.getSearchState = getSearchState;
|
|
16
|
+
this.setSearchState = setSearchState;
|
|
17
|
+
}
|
|
18
|
+
subscribe(searchField = this.getSearchField()) {
|
|
19
|
+
if (!searchField) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
searchField.addEventListener("ui5-open", this.onSearchOpenBound);
|
|
23
|
+
searchField.addEventListener("ui5-close", this.onSearchCloseBound);
|
|
24
|
+
searchField.addEventListener("ui5-search", this.onSearchBound);
|
|
25
|
+
}
|
|
26
|
+
unsubscribe(searchField = this.getSearchField()) {
|
|
27
|
+
if (!searchField) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
searchField.removeEventListener("ui5-open", this.onSearchOpenBound);
|
|
31
|
+
searchField.removeEventListener("ui5-close", this.onSearchCloseBound);
|
|
32
|
+
searchField.removeEventListener("ui5-search", this.onSearchBound);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Auto-collapse/restore search field based on available space.
|
|
36
|
+
* Delegates decision logic to SearchController.
|
|
37
|
+
*/
|
|
38
|
+
autoManageSearchState(hiddenItems, availableSpace) {
|
|
39
|
+
if (!this.hasSearchField) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Get search field min width from CSS variable
|
|
43
|
+
const searchFieldWidth = this.getSearchFieldWidth();
|
|
44
|
+
const searchHasFocus = document.activeElement === this.getSearchField();
|
|
45
|
+
const searchHasValue = !!this.getSearchField()?.value;
|
|
46
|
+
// On initial load, allow search to collapse even if it would trigger full-screen mode.
|
|
47
|
+
// This prevents search from showing in full-screen when page loads on small screens.
|
|
48
|
+
// After initial render, prevent collapse in full-screen mode during resize.
|
|
49
|
+
const inFullScreen = !this.initialRender && this.shouldShowFullScreen();
|
|
50
|
+
const preventCollapse = searchHasFocus || searchHasValue || inFullScreen;
|
|
51
|
+
if (hiddenItems > 0 && !preventCollapse) {
|
|
52
|
+
this.setSearchState(false);
|
|
53
|
+
}
|
|
54
|
+
else if (availableSpace + this.getSearchButtonSize() > searchFieldWidth) {
|
|
55
|
+
this.setSearchState(true);
|
|
56
|
+
}
|
|
57
|
+
this.initialRender = false;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Applies the show-search-field state to the search field.
|
|
61
|
+
*/
|
|
62
|
+
syncShowSearchFieldState() {
|
|
63
|
+
const search = this.getSearchField();
|
|
64
|
+
if (!search) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (isPhone()) {
|
|
68
|
+
// On initial render, don't auto-open the search dialog on phones
|
|
69
|
+
// to prevent the full-screen search from showing when page loads
|
|
70
|
+
if (this.initialRender) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
search.open = this.getSearchState();
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
search.collapsed = !this.getSearchState();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Determines if full-screen search should be shown.
|
|
81
|
+
* Full-screen search activates when overflow happens AND search is visible.
|
|
82
|
+
*/
|
|
83
|
+
shouldShowFullScreen() {
|
|
84
|
+
return this.getOverflowed() && this.getSearchState();
|
|
85
|
+
}
|
|
86
|
+
onSearchOpen(e) {
|
|
87
|
+
if (e.target !== this.getSearchField()) {
|
|
88
|
+
this.unsubscribe(e.target);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (isPhone()) {
|
|
92
|
+
this.setSearchState(true);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
onSearchClose(e) {
|
|
96
|
+
if (e.target !== this.getSearchField()) {
|
|
97
|
+
this.unsubscribe(e.target);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (isPhone()) {
|
|
101
|
+
this.setSearchState(false);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
onSearch(e) {
|
|
105
|
+
if (e.target !== this.getSearchField()) {
|
|
106
|
+
this.unsubscribe(e.target);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// On mobile or if has value, don't toggle
|
|
110
|
+
if (isPhone() || (this.getSearchField()?.value && this.getSearchState())) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.setSearchState(!this.getSearchState());
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Gets the minimum width needed for search field from CSS variable.
|
|
117
|
+
*/
|
|
118
|
+
getSearchFieldWidth() {
|
|
119
|
+
const width = this.getCSSVariable(ShellBarSearch.CSS_VARIABLE);
|
|
120
|
+
if (!width) {
|
|
121
|
+
return ShellBarSearch.FALLBACK_WIDTH;
|
|
122
|
+
}
|
|
123
|
+
// Convert rem to px
|
|
124
|
+
if (width.endsWith("rem")) {
|
|
125
|
+
const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);
|
|
126
|
+
return parseFloat(width) * fontSize;
|
|
127
|
+
}
|
|
128
|
+
return parseFloat(width);
|
|
129
|
+
}
|
|
130
|
+
get hasSearchField() {
|
|
131
|
+
return !!this.getSearchField();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Gets the size of the search button.
|
|
135
|
+
* If the search field is visible, the size is 0.
|
|
136
|
+
* Otherwise, it is the width of the search field (just a button in collapsed state).
|
|
137
|
+
*/
|
|
138
|
+
getSearchButtonSize() {
|
|
139
|
+
return this.getSearchState() ? 0 : this.getSearchField()?.getBoundingClientRect().width || 0;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
ShellBarSearch.CSS_VARIABLE = "--_ui5_shellbar_search_field_width";
|
|
143
|
+
ShellBarSearch.FALLBACK_WIDTH = 400;
|
|
144
|
+
export default ShellBarSearch;
|
|
145
|
+
//# sourceMappingURL=ShellBarSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellBarSearch.js","sourceRoot":"","sources":["../../src/shellbar/ShellBarSearch.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPhone } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport type { IShellBarSearchField } from \"../ShellBar.js\";\nimport type { IShellBarSearchController } from \"./IShellBarSearchController.js\";\n\ninterface ShellBarSearchConstructorParams {\n\tgetOverflowed: () => boolean;\n\tgetSearchState: () => boolean;\n\tsetSearchState: (expanded: boolean) => void;\n\tgetSearchField: () => IShellBarSearchField | null;\n\tgetCSSVariable: (variable: string) => string;\n}\n\n/**\n * Search controller for self-collapsible search (ui5-shellbar-search).\n * Handles search fields with collapsed/open properties and ui5-open/close/search events.\n */\nclass ShellBarSearch implements IShellBarSearchController {\n\tstatic CSS_VARIABLE = \"--_ui5_shellbar_search_field_width\";\n\tstatic FALLBACK_WIDTH = 400;\n\n\tprivate onSearchBound = this.onSearch.bind(this);\n\tprivate onSearchOpenBound = this.onSearchOpen.bind(this);\n\tprivate onSearchCloseBound = this.onSearchClose.bind(this);\n\n\tprivate getOverflowed: () => boolean;\n\tprivate getSearchField: () => IShellBarSearchField | null;\n\tprivate getSearchState: () => boolean;\n\tprivate setSearchState: (expanded: boolean) => void;\n\tprivate getCSSVariable: (variable: string) => string;\n\tprivate initialRender = true;\n\n\tconstructor({\n\t\tgetOverflowed,\n\t\tsetSearchState,\n\t\tgetSearchField,\n\t\tgetSearchState,\n\t\tgetCSSVariable,\n\t}: ShellBarSearchConstructorParams) {\n\t\tthis.getOverflowed = getOverflowed;\n\t\tthis.getCSSVariable = getCSSVariable;\n\t\tthis.getSearchField = getSearchField;\n\t\tthis.getSearchState = getSearchState;\n\t\tthis.setSearchState = setSearchState;\n\t}\n\n\tsubscribe(searchField: HTMLElement | null = this.getSearchField()) {\n\t\tif (!searchField) {\n\t\t\treturn;\n\t\t}\n\t\tsearchField.addEventListener(\"ui5-open\", this.onSearchOpenBound);\n\t\tsearchField.addEventListener(\"ui5-close\", this.onSearchCloseBound);\n\t\tsearchField.addEventListener(\"ui5-search\", this.onSearchBound);\n\t}\n\n\tunsubscribe(searchField: HTMLElement | null = this.getSearchField()) {\n\t\tif (!searchField) {\n\t\t\treturn;\n\t\t}\n\t\tsearchField.removeEventListener(\"ui5-open\", this.onSearchOpenBound);\n\t\tsearchField.removeEventListener(\"ui5-close\", this.onSearchCloseBound);\n\t\tsearchField.removeEventListener(\"ui5-search\", this.onSearchBound);\n\t}\n\n\t/**\n\t * Auto-collapse/restore search field based on available space.\n\t * Delegates decision logic to SearchController.\n\t */\n\tautoManageSearchState(hiddenItems: number, availableSpace: number) {\n\t\tif (!this.hasSearchField) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get search field min width from CSS variable\n\t\tconst searchFieldWidth = this.getSearchFieldWidth();\n\n\t\tconst searchHasFocus = document.activeElement === this.getSearchField();\n\t\tconst searchHasValue = !!this.getSearchField()?.value;\n\n\t\t// On initial load, allow search to collapse even if it would trigger full-screen mode.\n\t\t// This prevents search from showing in full-screen when page loads on small screens.\n\t\t// After initial render, prevent collapse in full-screen mode during resize.\n\t\tconst inFullScreen = !this.initialRender && this.shouldShowFullScreen();\n\t\tconst preventCollapse = searchHasFocus || searchHasValue || inFullScreen;\n\n\t\tif (hiddenItems > 0 && !preventCollapse) {\n\t\t\tthis.setSearchState(false);\n\t\t} else if (availableSpace + this.getSearchButtonSize() > searchFieldWidth) {\n\t\t\tthis.setSearchState(true);\n\t\t}\n\n\t\tthis.initialRender = false;\n\t}\n\n\t/**\n\t * Applies the show-search-field state to the search field.\n\t */\n\tsyncShowSearchFieldState() {\n\t\tconst search = this.getSearchField();\n\t\tif (!search) {\n\t\t\treturn;\n\t\t}\n\t\tif (isPhone()) {\n\t\t\t// On initial render, don't auto-open the search dialog on phones\n\t\t\t// to prevent the full-screen search from showing when page loads\n\t\t\tif (this.initialRender) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsearch.open = this.getSearchState();\n\t\t} else {\n\t\t\tsearch.collapsed = !this.getSearchState();\n\t\t}\n\t}\n\n\t/**\n\t * Determines if full-screen search should be shown.\n\t * Full-screen search activates when overflow happens AND search is visible.\n\t */\n\tshouldShowFullScreen(): boolean {\n\t\treturn this.getOverflowed() && this.getSearchState();\n\t}\n\n\tprivate onSearchOpen(e: Event) {\n\t\tif (e.target !== this.getSearchField()) {\n\t\t\tthis.unsubscribe(e.target as HTMLElement);\n\t\t\treturn;\n\t\t}\n\t\tif (isPhone()) {\n\t\t\tthis.setSearchState(true);\n\t\t}\n\t}\n\n\tprivate onSearchClose(e: Event) {\n\t\tif (e.target !== this.getSearchField()) {\n\t\t\tthis.unsubscribe(e.target as HTMLElement);\n\t\t\treturn;\n\t\t}\n\t\tif (isPhone()) {\n\t\t\tthis.setSearchState(false);\n\t\t}\n\t}\n\n\tprivate onSearch(e: Event) {\n\t\tif (e.target !== this.getSearchField()) {\n\t\t\tthis.unsubscribe(e.target as HTMLElement);\n\t\t\treturn;\n\t\t}\n\n\t\t// On mobile or if has value, don't toggle\n\t\tif (isPhone() || (this.getSearchField()?.value && this.getSearchState())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setSearchState(!this.getSearchState());\n\t}\n\n\t/**\n\t * Gets the minimum width needed for search field from CSS variable.\n\t */\n\tprivate getSearchFieldWidth(): number {\n\t\tconst width = this.getCSSVariable(ShellBarSearch.CSS_VARIABLE);\n\t\tif (!width) {\n\t\t\treturn ShellBarSearch.FALLBACK_WIDTH;\n\t\t}\n\t\t// Convert rem to px\n\t\tif (width.endsWith(\"rem\")) {\n\t\t\tconst fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\t\t\treturn parseFloat(width) * fontSize;\n\t\t}\n\t\treturn parseFloat(width);\n\t}\n\n\tget hasSearchField() {\n\t\treturn !!this.getSearchField();\n\t}\n\n\t/**\n\t * Gets the size of the search button.\n\t * If the search field is visible, the size is 0.\n\t * Otherwise, it is the width of the search field (just a button in collapsed state).\n\t */\n\tprivate getSearchButtonSize(): number {\n\t\treturn this.getSearchState() ? 0 : this.getSearchField()?.getBoundingClientRect().width || 0;\n\t}\n}\n\nexport default ShellBarSearch;\nexport type {\n\tShellBarSearchConstructorParams,\n};\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { IShellBarSearchController } from "./IShellBarSearchController.js";
|
|
2
|
+
interface ShellBarSearchLegacyConstructorParams {
|
|
3
|
+
getOverflowed: () => boolean;
|
|
4
|
+
getSearchState: () => boolean;
|
|
5
|
+
setSearchState: (expanded: boolean) => void;
|
|
6
|
+
getSearchField: () => HTMLElement | null;
|
|
7
|
+
getCSSVariable: (variable: string) => string;
|
|
8
|
+
getDisableSearchCollapse: () => boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Search controller for legacy search fields (ui5-input, custom div).
|
|
12
|
+
* Handles search fields that don't have collapsed/open properties.
|
|
13
|
+
* Supports disableSearchCollapse for preventing auto-collapse.
|
|
14
|
+
*/
|
|
15
|
+
declare class ShellBarSearchLegacy implements IShellBarSearchController {
|
|
16
|
+
static CSS_VARIABLE: string;
|
|
17
|
+
static FALLBACK_WIDTH: number;
|
|
18
|
+
private getOverflowed;
|
|
19
|
+
private getSearchField;
|
|
20
|
+
private getSearchState;
|
|
21
|
+
private setSearchState;
|
|
22
|
+
private getCSSVariable;
|
|
23
|
+
private getDisableSearchCollapse;
|
|
24
|
+
private initialRender;
|
|
25
|
+
constructor({ getOverflowed, setSearchState, getSearchField, getSearchState, getCSSVariable, getDisableSearchCollapse, }: ShellBarSearchLegacyConstructorParams);
|
|
26
|
+
/**
|
|
27
|
+
* No-op for legacy search - legacy fields don't emit ui5-open/close/search events.
|
|
28
|
+
*/
|
|
29
|
+
subscribe(): void;
|
|
30
|
+
/**
|
|
31
|
+
* No-op for legacy search - no event listeners to clean up.
|
|
32
|
+
*/
|
|
33
|
+
unsubscribe(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Auto-collapse/restore search field based on available space.
|
|
36
|
+
* Respects disableSearchCollapse flag, focus state, and field value.
|
|
37
|
+
*/
|
|
38
|
+
autoManageSearchState(hiddenItems: number, availableSpace: number): void;
|
|
39
|
+
/**
|
|
40
|
+
* No-op for legacy search - legacy fields don't have collapsed/open properties.
|
|
41
|
+
*/
|
|
42
|
+
syncShowSearchFieldState(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Determines if full-screen search should be shown.
|
|
45
|
+
* Full-screen search activates when overflow happens AND search is visible.
|
|
46
|
+
*/
|
|
47
|
+
shouldShowFullScreen(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get value from various field types.
|
|
50
|
+
* Supports ui5-input (value property) and custom div (nested input element).
|
|
51
|
+
*/
|
|
52
|
+
private hasValue;
|
|
53
|
+
/**
|
|
54
|
+
* Get minimum width needed for search field from CSS variable.
|
|
55
|
+
*/
|
|
56
|
+
private getSearchFieldWidth;
|
|
57
|
+
private get hasSearchField();
|
|
58
|
+
/**
|
|
59
|
+
* Get search button size for overflow calculation.
|
|
60
|
+
* Returns 0 if search is expanded, otherwise returns button width.
|
|
61
|
+
*/
|
|
62
|
+
private getSearchButtonSize;
|
|
63
|
+
}
|
|
64
|
+
export default ShellBarSearchLegacy;
|
|
65
|
+
export type { ShellBarSearchLegacyConstructorParams, };
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search controller for legacy search fields (ui5-input, custom div).
|
|
3
|
+
* Handles search fields that don't have collapsed/open properties.
|
|
4
|
+
* Supports disableSearchCollapse for preventing auto-collapse.
|
|
5
|
+
*/
|
|
6
|
+
class ShellBarSearchLegacy {
|
|
7
|
+
constructor({ getOverflowed, setSearchState, getSearchField, getSearchState, getCSSVariable, getDisableSearchCollapse, }) {
|
|
8
|
+
this.initialRender = true;
|
|
9
|
+
this.getOverflowed = getOverflowed;
|
|
10
|
+
this.getCSSVariable = getCSSVariable;
|
|
11
|
+
this.getSearchField = getSearchField;
|
|
12
|
+
this.getSearchState = getSearchState;
|
|
13
|
+
this.setSearchState = setSearchState;
|
|
14
|
+
this.getDisableSearchCollapse = getDisableSearchCollapse;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* No-op for legacy search - legacy fields don't emit ui5-open/close/search events.
|
|
18
|
+
*/
|
|
19
|
+
subscribe() {
|
|
20
|
+
// No events to subscribe to for legacy search fields
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* No-op for legacy search - no event listeners to clean up.
|
|
24
|
+
*/
|
|
25
|
+
unsubscribe() {
|
|
26
|
+
// No events to unsubscribe from
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Auto-collapse/restore search field based on available space.
|
|
30
|
+
* Respects disableSearchCollapse flag, focus state, and field value.
|
|
31
|
+
*/
|
|
32
|
+
autoManageSearchState(hiddenItems, availableSpace) {
|
|
33
|
+
if (!this.hasSearchField) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Check if auto-collapse is disabled
|
|
37
|
+
if (this.getDisableSearchCollapse()) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const searchFieldWidth = this.getSearchFieldWidth();
|
|
41
|
+
// Check focus and value to prevent collapse
|
|
42
|
+
const searchField = this.getSearchField();
|
|
43
|
+
const searchHasFocus = searchField?.contains(document.activeElement) || false;
|
|
44
|
+
const searchHasValue = this.hasValue(searchField);
|
|
45
|
+
// On initial load, allow search to collapse even if it would trigger full-screen mode.
|
|
46
|
+
// This prevents search from showing in full-screen when page loads on small screens.
|
|
47
|
+
// After initial render, prevent collapse in full-screen mode during resize.
|
|
48
|
+
const inFullScreen = !this.initialRender && this.shouldShowFullScreen();
|
|
49
|
+
const preventCollapse = searchHasFocus || searchHasValue || inFullScreen;
|
|
50
|
+
if (hiddenItems > 0 && !preventCollapse) {
|
|
51
|
+
this.setSearchState(false);
|
|
52
|
+
}
|
|
53
|
+
else if (availableSpace + this.getSearchButtonSize() > searchFieldWidth) {
|
|
54
|
+
this.setSearchState(true);
|
|
55
|
+
}
|
|
56
|
+
this.initialRender = false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* No-op for legacy search - legacy fields don't have collapsed/open properties.
|
|
60
|
+
*/
|
|
61
|
+
syncShowSearchFieldState() {
|
|
62
|
+
// Legacy search fields don't have collapsed/open properties to sync
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Determines if full-screen search should be shown.
|
|
66
|
+
* Full-screen search activates when overflow happens AND search is visible.
|
|
67
|
+
*/
|
|
68
|
+
shouldShowFullScreen() {
|
|
69
|
+
return this.getOverflowed() && this.getSearchState();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get value from various field types.
|
|
73
|
+
* Supports ui5-input (value property) and custom div (nested input element).
|
|
74
|
+
*/
|
|
75
|
+
hasValue(searchField) {
|
|
76
|
+
if (!searchField) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
// ui5-input or similar components with value property
|
|
80
|
+
if ("value" in searchField) {
|
|
81
|
+
return !!searchField.value;
|
|
82
|
+
}
|
|
83
|
+
// Custom div - find input inside
|
|
84
|
+
const input = searchField.querySelector("input");
|
|
85
|
+
return input ? !!input.value : false;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get minimum width needed for search field from CSS variable.
|
|
89
|
+
*/
|
|
90
|
+
getSearchFieldWidth() {
|
|
91
|
+
const width = this.getCSSVariable(ShellBarSearchLegacy.CSS_VARIABLE);
|
|
92
|
+
if (!width) {
|
|
93
|
+
return ShellBarSearchLegacy.FALLBACK_WIDTH;
|
|
94
|
+
}
|
|
95
|
+
// Convert rem to px
|
|
96
|
+
if (width.endsWith("rem")) {
|
|
97
|
+
const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);
|
|
98
|
+
return parseFloat(width) * fontSize;
|
|
99
|
+
}
|
|
100
|
+
return parseFloat(width);
|
|
101
|
+
}
|
|
102
|
+
get hasSearchField() {
|
|
103
|
+
return !!this.getSearchField();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get search button size for overflow calculation.
|
|
107
|
+
* Returns 0 if search is expanded, otherwise returns button width.
|
|
108
|
+
*/
|
|
109
|
+
getSearchButtonSize() {
|
|
110
|
+
return this.getSearchState() ? 0 : this.getSearchField()?.getBoundingClientRect().width || 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
ShellBarSearchLegacy.CSS_VARIABLE = "--_ui5_shellbar_search_field_width";
|
|
114
|
+
ShellBarSearchLegacy.FALLBACK_WIDTH = 400;
|
|
115
|
+
export default ShellBarSearchLegacy;
|
|
116
|
+
//# sourceMappingURL=ShellBarSearchLegacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellBarSearchLegacy.js","sourceRoot":"","sources":["../../src/shellbar/ShellBarSearchLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IShellBarSearchController } from \"./IShellBarSearchController.js\";\n\ninterface ShellBarSearchLegacyConstructorParams {\n\tgetOverflowed: () => boolean;\n\tgetSearchState: () => boolean;\n\tsetSearchState: (expanded: boolean) => void;\n\tgetSearchField: () => HTMLElement | null;\n\tgetCSSVariable: (variable: string) => string;\n\tgetDisableSearchCollapse: () => boolean;\n}\n\n/**\n * Search controller for legacy search fields (ui5-input, custom div).\n * Handles search fields that don't have collapsed/open properties.\n * Supports disableSearchCollapse for preventing auto-collapse.\n */\nclass ShellBarSearchLegacy implements IShellBarSearchController {\n\tstatic CSS_VARIABLE = \"--_ui5_shellbar_search_field_width\";\n\tstatic FALLBACK_WIDTH = 400;\n\n\tprivate getOverflowed: () => boolean;\n\tprivate getSearchField: () => HTMLElement | null;\n\tprivate getSearchState: () => boolean;\n\tprivate setSearchState: (expanded: boolean) => void;\n\tprivate getCSSVariable: (variable: string) => string;\n\tprivate getDisableSearchCollapse: () => boolean;\n\tprivate initialRender = true;\n\n\tconstructor({\n\t\tgetOverflowed,\n\t\tsetSearchState,\n\t\tgetSearchField,\n\t\tgetSearchState,\n\t\tgetCSSVariable,\n\t\tgetDisableSearchCollapse,\n\t}: ShellBarSearchLegacyConstructorParams) {\n\t\tthis.getOverflowed = getOverflowed;\n\t\tthis.getCSSVariable = getCSSVariable;\n\t\tthis.getSearchField = getSearchField;\n\t\tthis.getSearchState = getSearchState;\n\t\tthis.setSearchState = setSearchState;\n\t\tthis.getDisableSearchCollapse = getDisableSearchCollapse;\n\t}\n\n\t/**\n\t * No-op for legacy search - legacy fields don't emit ui5-open/close/search events.\n\t */\n\tsubscribe(): void {\n\t\t// No events to subscribe to for legacy search fields\n\t}\n\n\t/**\n\t * No-op for legacy search - no event listeners to clean up.\n\t */\n\tunsubscribe(): void {\n\t\t// No events to unsubscribe from\n\t}\n\n\t/**\n\t * Auto-collapse/restore search field based on available space.\n\t * Respects disableSearchCollapse flag, focus state, and field value.\n\t */\n\tautoManageSearchState(hiddenItems: number, availableSpace: number): void {\n\t\tif (!this.hasSearchField) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if auto-collapse is disabled\n\t\tif (this.getDisableSearchCollapse()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst searchFieldWidth = this.getSearchFieldWidth();\n\n\t\t// Check focus and value to prevent collapse\n\t\tconst searchField = this.getSearchField();\n\t\tconst searchHasFocus = searchField?.contains(document.activeElement) || false;\n\t\tconst searchHasValue = this.hasValue(searchField);\n\n\t\t// On initial load, allow search to collapse even if it would trigger full-screen mode.\n\t\t// This prevents search from showing in full-screen when page loads on small screens.\n\t\t// After initial render, prevent collapse in full-screen mode during resize.\n\t\tconst inFullScreen = !this.initialRender && this.shouldShowFullScreen();\n\t\tconst preventCollapse = searchHasFocus || searchHasValue || inFullScreen;\n\n\t\tif (hiddenItems > 0 && !preventCollapse) {\n\t\t\tthis.setSearchState(false);\n\t\t} else if (availableSpace + this.getSearchButtonSize() > searchFieldWidth) {\n\t\t\tthis.setSearchState(true);\n\t\t}\n\n\t\tthis.initialRender = false;\n\t}\n\n\t/**\n\t * No-op for legacy search - legacy fields don't have collapsed/open properties.\n\t */\n\tsyncShowSearchFieldState(): void {\n\t\t// Legacy search fields don't have collapsed/open properties to sync\n\t}\n\n\t/**\n\t * Determines if full-screen search should be shown.\n\t * Full-screen search activates when overflow happens AND search is visible.\n\t */\n\tshouldShowFullScreen(): boolean {\n\t\treturn this.getOverflowed() && this.getSearchState();\n\t}\n\n\t/**\n\t * Get value from various field types.\n\t * Supports ui5-input (value property) and custom div (nested input element).\n\t */\n\tprivate hasValue(searchField: HTMLElement | null): boolean {\n\t\tif (!searchField) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// ui5-input or similar components with value property\n\t\tif (\"value\" in searchField) {\n\t\t\treturn !!(searchField as any).value;\n\t\t}\n\n\t\t// Custom div - find input inside\n\t\tconst input = searchField.querySelector(\"input\");\n\t\treturn input ? !!input.value : false;\n\t}\n\n\t/**\n\t * Get minimum width needed for search field from CSS variable.\n\t */\n\tprivate getSearchFieldWidth(): number {\n\t\tconst width = this.getCSSVariable(ShellBarSearchLegacy.CSS_VARIABLE);\n\t\tif (!width) {\n\t\t\treturn ShellBarSearchLegacy.FALLBACK_WIDTH;\n\t\t}\n\n\t\t// Convert rem to px\n\t\tif (width.endsWith(\"rem\")) {\n\t\t\tconst fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\t\t\treturn parseFloat(width) * fontSize;\n\t\t}\n\n\t\treturn parseFloat(width);\n\t}\n\n\tprivate get hasSearchField(): boolean {\n\t\treturn !!this.getSearchField();\n\t}\n\n\t/**\n\t * Get search button size for overflow calculation.\n\t * Returns 0 if search is expanded, otherwise returns button width.\n\t */\n\tprivate getSearchButtonSize(): number {\n\t\treturn this.getSearchState() ? 0 : this.getSearchField()?.getBoundingClientRect().width || 0;\n\t}\n}\n\nexport default ShellBarSearchLegacy;\nexport type {\n\tShellBarSearchLegacyConstructorParams,\n};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type ShellBar from "../../ShellBar.js";
|
|
2
|
+
declare function ShellBarLegacyBrandingArea(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
3
|
+
declare function ShellBarLegacyTitleArea(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
4
|
+
/**
|
|
5
|
+
* Renders interactive menu button for non-S breakpoints.
|
|
6
|
+
* Shows primaryTitle with arrow, opens menu popover.
|
|
7
|
+
*/
|
|
8
|
+
declare function ShellBarInteractiveMenuButton(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
9
|
+
/**
|
|
10
|
+
* Renders single logo on S breakpoint when no menu items.
|
|
11
|
+
* Used on S breakpoint when no menu items and no branding slot.
|
|
12
|
+
*/
|
|
13
|
+
declare function ShellBarSingleLogo(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
14
|
+
declare function ShellBarLegacySecondaryTitle(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
15
|
+
/**
|
|
16
|
+
* Renders the menu popover.
|
|
17
|
+
* Contains the list of menu items.
|
|
18
|
+
*/
|
|
19
|
+
declare function ShellBarMenuPopover(this: ShellBar): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element | null;
|
|
20
|
+
export { ShellBarSingleLogo, ShellBarMenuPopover, ShellBarLegacyTitleArea, ShellBarLegacyBrandingArea, ShellBarLegacySecondaryTitle, ShellBarInteractiveMenuButton, };
|