@ui5/webcomponents-base 1.11.0-rc.1 → 1.11.0-rc.2
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 +11 -0
- package/dist/asset-registries/Icons.d.ts +1 -1
- package/dist/asset-registries/Icons.js +21 -21
- package/dist/asset-registries/Icons.js.map +1 -1
- package/dist/assets/bundle.esm.2d0cb31f.js +56 -0
- package/dist/assets/test/pages/{i18n.html.4b1c0bdb.js → i18n.html.cd6e3cfc.js} +1 -1
- package/dist/assets/test/pages/{i18n_texts.html.e98a417d.js → i18n_texts.html.7beb72ee.js} +1 -1
- package/dist/assets-meta/IconCollectionsAlias.d.ts +24 -10
- package/dist/assets-meta/IconCollectionsAlias.js +29 -9
- package/dist/assets-meta/IconCollectionsAlias.js.map +1 -1
- package/dist/config/Icons.d.ts +42 -18
- package/dist/config/Icons.js +74 -25
- package/dist/config/Icons.js.map +1 -1
- package/dist/config/RTL.js +3 -0
- package/dist/config/RTL.js.map +1 -1
- package/dist/generated/VersionInfo.js +3 -3
- package/dist/test/pages/AllTestElements.html +1 -1
- package/dist/test/pages/Configuration.html +1 -1
- package/dist/test/pages/ConfigurationScript.html +1 -1
- package/dist/test/pages/WithComplexTemplate.html +1 -1
- package/dist/test/pages/i18n.html +2 -2
- package/dist/test/pages/i18n_texts.html +2 -2
- package/dist/util/AriaLabelHelper.d.ts +10 -1
- package/dist/util/AriaLabelHelper.js +135 -8
- package/dist/util/AriaLabelHelper.js.map +1 -1
- package/package-scripts.js +1 -1
- package/package.json +3 -3
- package/src/asset-registries/Icons.ts +26 -27
- package/src/assets-meta/IconCollectionsAlias.ts +32 -9
- package/src/config/Icons.ts +85 -25
- package/src/config/RTL.ts +4 -0
- package/src/util/AriaLabelHelper.ts +167 -12
- package/dist/assets/bundle.esm.25073731.js +0 -56
package/dist/config/Icons.js
CHANGED
|
@@ -1,48 +1,97 @@
|
|
|
1
1
|
import { getTheme, isThemeFamily } from "./Theme.js";
|
|
2
|
+
import { getIconCollectionByAlias } from "../assets-meta/IconCollectionsAlias.js";
|
|
2
3
|
const IconCollectionConfiguration = new Map();
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
// All registered icon collections - all icon collections resolves to these options at the end
|
|
5
|
+
var RegisteredIconCollection;
|
|
6
|
+
(function (RegisteredIconCollection) {
|
|
7
|
+
RegisteredIconCollection["SAPIconsV4"] = "SAP-icons-v4";
|
|
8
|
+
RegisteredIconCollection["SAPIconsV5"] = "SAP-icons-v5";
|
|
9
|
+
RegisteredIconCollection["SAPIconsTNTV2"] = "tnt-v2";
|
|
10
|
+
RegisteredIconCollection["SAPIconsTNTV3"] = "tnt-v3";
|
|
11
|
+
RegisteredIconCollection["SAPBSIcons"] = "business-suite";
|
|
12
|
+
})(RegisteredIconCollection || (RegisteredIconCollection = {}));
|
|
8
13
|
/**
|
|
9
|
-
* Sets the default icon collection
|
|
10
|
-
*
|
|
14
|
+
* Sets the default icon collection for a given theme.
|
|
15
|
+
*
|
|
16
|
+
* SAP Icons is the default icon collection (that resolves to SAP-icons version 5.x in Horizon theme family and SAP-icons version 4.x in all other themes)
|
|
17
|
+
* and to display icons from other collections, you have to specify the icon collection in addition to the icon name, for example: "tnt/actor", "business-suite/1x2-grid-layout", etc.
|
|
18
|
+
* This method allows setting another (built-in or custom) icon collection as default per theme.
|
|
19
|
+
*
|
|
20
|
+
* <b>Usage</b>
|
|
21
|
+
* <b>For example</b>, to make "SAP-icons version 5.x" the default icon collection in "sap_fiori_3":
|
|
22
|
+
*
|
|
23
|
+
* <pre>
|
|
24
|
+
* setDefaultIconCollection("sap_fiori_3", "SAP-icons-v5");
|
|
25
|
+
*
|
|
26
|
+
* <ui5-icon name="home"></ui5-icon>
|
|
27
|
+
* </pre>
|
|
28
|
+
*
|
|
29
|
+
* <b>For example</b>, to make a custom icon collection (with name "my-custom-collection") the default icon collection in "sap_fiori_3":
|
|
30
|
+
*
|
|
31
|
+
* <pre>
|
|
32
|
+
* setDefaultIconCollection("sap_fiori_3", "my-custom-collection");
|
|
33
|
+
*
|
|
34
|
+
* <ui5-icon name="custom-icon-name"></ui5-icon>
|
|
35
|
+
* </pre>
|
|
11
36
|
*
|
|
12
|
-
* Note: by default SAP-icons-v5 is used in all SAP Horizon variants and SAP-icons-v4 for all the rest.
|
|
13
37
|
* @public
|
|
14
|
-
* @param {string} theme
|
|
15
|
-
* @param {
|
|
38
|
+
* @param { string } theme
|
|
39
|
+
* @param { string } collectionName
|
|
16
40
|
*/
|
|
17
41
|
const setDefaultIconCollection = (theme, collectionName) => {
|
|
18
|
-
if (collectionName === "horizon") {
|
|
19
|
-
collectionName = IconCollection.v5;
|
|
20
|
-
}
|
|
21
42
|
IconCollectionConfiguration.set(theme, collectionName);
|
|
22
43
|
};
|
|
23
44
|
/**
|
|
24
|
-
* Returns the default icon collection
|
|
25
|
-
* that is configured.
|
|
45
|
+
* Returns the configured default icon collection for a given theme.
|
|
26
46
|
*
|
|
27
|
-
* @param {string} theme
|
|
47
|
+
* @param { string } theme
|
|
28
48
|
* @public
|
|
29
|
-
* @returns {string | undefined}
|
|
49
|
+
* @returns { string | undefined }
|
|
30
50
|
*/
|
|
31
51
|
const getDefaultIconCollection = (theme) => {
|
|
32
52
|
return IconCollectionConfiguration.get(theme);
|
|
33
53
|
};
|
|
34
54
|
/**
|
|
35
|
-
* Returns the effective icon collection
|
|
36
|
-
*
|
|
37
|
-
* @
|
|
55
|
+
* Returns the effective icon collection,
|
|
56
|
+
* based on the default icon collection configuration and the current theme:
|
|
57
|
+
* @param { IconCollection } collectionName
|
|
58
|
+
* @returns { IconCollection } the effective collection name
|
|
38
59
|
*/
|
|
39
|
-
const
|
|
60
|
+
const getEffectiveIconCollection = (collectionName) => {
|
|
40
61
|
const currentTheme = getTheme();
|
|
41
62
|
const currentThemeConfiguration = IconCollectionConfiguration.get(currentTheme);
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
// when no collection is set and default collection is configured - return the configured icon collection
|
|
64
|
+
if (!collectionName && currentThemeConfiguration) {
|
|
65
|
+
return getIconCollectionByAlias(currentThemeConfiguration);
|
|
66
|
+
}
|
|
67
|
+
// when collection is set - return the theme dependant icon collection
|
|
68
|
+
// when collection is not set and there is no default icon collection configured - return theme dependant icon collection
|
|
69
|
+
return getIconCollectionByTheme(collectionName);
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Returns the icon theme dependant collection, based on the collection name and current theme as follows:
|
|
73
|
+
*
|
|
74
|
+
* - "no collection" resolves to "SAP-icons-v4" in "Quartz" and "Belize", and to "SAP-icons-v5" in "Horizon" (or as confugred via setDefaultIconCollection)
|
|
75
|
+
* - "SAP-icons-v4" (and its alias "SAP-icons") forces "SAP-icons v4" in any theme and resolves to itself "SAP-icons-v4"
|
|
76
|
+
* - "SAP-icons-v5" (and its alias "horizon") forces "SAP-icons v5" in any theme and resolves to itself "SAP-icons-v5"
|
|
77
|
+
* - "tnt" (and its alias "SAP-icons-TNT") resolves to "tnt-v2" in "Quartz", "Belize", and resolves to "tnt-v3" in "Horizon"
|
|
78
|
+
* - "tnt-v2" forces "TNT icons v2" in any theme and resolves to itself "tnt-v2"
|
|
79
|
+
* - "tnt-v3" forces "TNT icons v3" in any theme and resolves to itself "tnt-v3"
|
|
80
|
+
* - "business-suite" (and its alias "BusinessSuiteInAppSymbols") has no versioning and resolves to "business-suite"
|
|
81
|
+
*
|
|
82
|
+
* <b>Note:</b> "SAP-icons-v4", "SAP-icons-v5", "tnt-v2", "tnt-v3" and "business-suite" are just returned
|
|
83
|
+
* @param { IconCollection } collectionName
|
|
84
|
+
* @returns { RegisteredIconCollection } the registered collection name
|
|
85
|
+
*/
|
|
86
|
+
const getIconCollectionByTheme = (collectionName) => {
|
|
87
|
+
const horizonThemeFamily = isThemeFamily("sap_horizon");
|
|
88
|
+
if (!collectionName) {
|
|
89
|
+
return horizonThemeFamily ? RegisteredIconCollection.SAPIconsV5 : RegisteredIconCollection.SAPIconsV4;
|
|
90
|
+
}
|
|
91
|
+
if (collectionName === "tnt") {
|
|
92
|
+
return horizonThemeFamily ? RegisteredIconCollection.SAPIconsTNTV3 : RegisteredIconCollection.SAPIconsTNTV2;
|
|
44
93
|
}
|
|
45
|
-
return
|
|
94
|
+
return collectionName;
|
|
46
95
|
};
|
|
47
|
-
export { setDefaultIconCollection, getDefaultIconCollection,
|
|
96
|
+
export { setDefaultIconCollection, getDefaultIconCollection, getEffectiveIconCollection, RegisteredIconCollection, };
|
|
48
97
|
//# sourceMappingURL=Icons.js.map
|
package/dist/config/Icons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icons.js","sourceRoot":"","sources":["../../src/config/Icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Icons.js","sourceRoot":"","sources":["../../src/config/Icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAkB,CAAC;AAK9D,8FAA8F;AAC9F,IAAK,wBAMJ;AAND,WAAK,wBAAwB;IAC5B,uDAA2B,CAAA;IAC3B,uDAA2B,CAAA;IAC3B,oDAAwB,CAAA;IACxB,oDAAwB,CAAA;IACxB,yDAA6B,CAAA;AAC9B,CAAC,EANI,wBAAwB,KAAxB,wBAAwB,QAM5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAE,cAA8B,EAAE,EAAE;IAClF,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAsB,EAAE;IACtE,OAAO,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG,CAAC,cAA+B,EAAkB,EAAE;IACtF,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC;IAChC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEhF,yGAAyG;IACzG,IAAI,CAAC,cAAc,IAAI,yBAAyB,EAAE;QACjD,OAAO,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;KAC3D;IAED,sEAAsE;IACtE,yHAAyH;IACzH,OAAO,wBAAwB,CAAC,cAAc,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,wBAAwB,GAAG,CAAC,cAA+B,EAA4B,EAAE;IAC9F,MAAM,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,CAAC,cAAc,EAAE;QACpB,OAAO,kBAAkB,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC;KACtG;IAED,IAAI,cAAc,KAAK,KAAK,EAAE;QAC7B,OAAO,kBAAkB,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC;KAC5G;IAED,OAAO,cAA0C,CAAC;AACnD,CAAC,CAAC;AAEF,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACxB,CAAC"}
|
package/dist/config/RTL.js
CHANGED
|
@@ -24,6 +24,9 @@ const impliesRTL = (language) => {
|
|
|
24
24
|
* @returns {boolean} whether RTL should be used
|
|
25
25
|
*/
|
|
26
26
|
const getRTL = () => {
|
|
27
|
+
if (typeof document === "undefined") {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
27
30
|
const configurationRTL = getConfiguredRTL();
|
|
28
31
|
if (configurationRTL !== undefined) {
|
|
29
32
|
return !!configurationRTL;
|
package/dist/config/RTL.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTL.js","sourceRoot":"","sources":["../../src/config/RTL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AACnF,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAEzE,MAAM,mBAAmB,GAAG;IAC3B,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,4BAA4B,CAAC,6BAA6B,CAAC,IAAI,EAAE,CAAC;AAExF;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE;IACvC,QAAQ,GAAG,CAAC,QAAQ,IAAI,mBAAmB,CAAC,QAA4C,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEvG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAY,EAAE;IAC5B,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAE5C,IAAI,gBAAgB,KAAK,SAAS,EAAE;QACnC,OAAO,CAAC,CAAC,gBAAgB,CAAC;KAC1B;IAED,OAAO,UAAU,CAAC,WAAW,EAAE,IAAI,uBAAuB,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,sBAAsB"}
|
|
1
|
+
{"version":3,"file":"RTL.js","sourceRoot":"","sources":["../../src/config/RTL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AACnF,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAEzE,MAAM,mBAAmB,GAAG;IAC3B,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,4BAA4B,CAAC,6BAA6B,CAAC,IAAI,EAAE,CAAC;AAExF;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE;IACvC,QAAQ,GAAG,CAAC,QAAQ,IAAI,mBAAmB,CAAC,QAA4C,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEvG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAY,EAAE;IAC5B,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACpC,OAAO,KAAK,CAAC;KACb;IAED,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAE5C,IAAI,gBAAgB,KAAK,SAAS,EAAE;QACnC,OAAO,CAAC,CAAC,gBAAgB,CAAC;KAC1B;IAED,OAAO,UAAU,CAAC,WAAW,EAAE,IAAI,uBAAuB,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,sBAAsB"}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
<script type="module" crossorigin src="/assets/test/pages/i18n.html.
|
|
11
|
-
<link rel="modulepreload" href="/assets/bundle.esm.
|
|
10
|
+
<script type="module" crossorigin src="/assets/test/pages/i18n.html.cd6e3cfc.js"></script>
|
|
11
|
+
<link rel="modulepreload" href="/assets/bundle.esm.2d0cb31f.js">
|
|
12
12
|
</head>
|
|
13
13
|
|
|
14
14
|
<body>
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
<script type="module" crossorigin src="/assets/test/pages/i18n_texts.html.
|
|
12
|
-
<link rel="modulepreload" href="/assets/bundle.esm.
|
|
11
|
+
<script type="module" crossorigin src="/assets/test/pages/i18n_texts.html.7beb72ee.js"></script>
|
|
12
|
+
<link rel="modulepreload" href="/assets/bundle.esm.2d0cb31f.js">
|
|
13
13
|
</head>
|
|
14
14
|
|
|
15
15
|
<body>
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
import UI5Element from "../UI5Element.js";
|
|
2
|
+
type MutationCallback = () => void;
|
|
1
3
|
declare const getEffectiveAriaLabelText: (el: HTMLElement) => string | undefined;
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {HTMLElement} el Defines the HTMLElement, for which you need to get all related texts
|
|
7
|
+
*/
|
|
8
|
+
declare const getAllAccessibleNameRefTexts: (el: HTMLElement) => string;
|
|
2
9
|
/**
|
|
3
10
|
* @param {HTMLElement} el Defines the HTMLElement, for which you need to get all related "label for" texts
|
|
4
11
|
*/
|
|
5
12
|
declare const getAssociatedLabelForTexts: (el: HTMLElement) => string | undefined;
|
|
6
|
-
|
|
13
|
+
declare const registerUI5Element: (el: UI5Element, callback: MutationCallback) => void;
|
|
14
|
+
declare const deregisterUI5Element: (el: UI5Element) => void;
|
|
15
|
+
export { getEffectiveAriaLabelText, getAssociatedLabelForTexts, registerUI5Element, deregisterUI5Element, getAllAccessibleNameRefTexts, };
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
const associatedElements = new WeakMap();
|
|
2
|
+
const registeredElements = new WeakMap();
|
|
3
|
+
const observerOptions = {
|
|
4
|
+
attributes: true,
|
|
5
|
+
childList: true,
|
|
6
|
+
characterData: true,
|
|
7
|
+
subtree: true,
|
|
8
|
+
};
|
|
1
9
|
const getEffectiveAriaLabelText = (el) => {
|
|
2
10
|
const accessibleEl = el;
|
|
3
11
|
if (!accessibleEl.accessibleNameRef) {
|
|
@@ -6,31 +14,59 @@ const getEffectiveAriaLabelText = (el) => {
|
|
|
6
14
|
}
|
|
7
15
|
return undefined;
|
|
8
16
|
}
|
|
9
|
-
return
|
|
17
|
+
return getAllAccessibleNameRefTexts(el);
|
|
10
18
|
};
|
|
11
19
|
/**
|
|
12
20
|
*
|
|
13
21
|
* @param {HTMLElement} el Defines the HTMLElement, for which you need to get all related texts
|
|
14
22
|
*/
|
|
15
|
-
const
|
|
16
|
-
const ids = el.accessibleNameRef
|
|
23
|
+
const getAllAccessibleNameRefTexts = (el) => {
|
|
24
|
+
const ids = el.accessibleNameRef?.split(" ") ?? [];
|
|
17
25
|
const owner = el.getRootNode();
|
|
18
26
|
let result = "";
|
|
19
27
|
ids.forEach((elementId, index) => {
|
|
20
28
|
const element = owner.querySelector(`[id='${elementId}']`);
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
result +=
|
|
29
|
+
const text = `${element && element.textContent ? element.textContent : ""}`;
|
|
30
|
+
if (text) {
|
|
31
|
+
result += text;
|
|
32
|
+
if (index < ids.length - 1) {
|
|
33
|
+
result += " ";
|
|
34
|
+
}
|
|
24
35
|
}
|
|
25
36
|
});
|
|
26
37
|
return result;
|
|
27
38
|
};
|
|
39
|
+
const _getAllAssociatedElementsFromDOM = (el) => {
|
|
40
|
+
const set = new Set();
|
|
41
|
+
// adding labels with attribute for matching the el.id
|
|
42
|
+
const labelsForAssociated = _getAssociatedLabels(el);
|
|
43
|
+
labelsForAssociated.forEach(itm => {
|
|
44
|
+
set.add(itm);
|
|
45
|
+
});
|
|
46
|
+
// adding other elements that id is the same as accessibleNameRef value
|
|
47
|
+
const value = el["accessibleNameRef"];
|
|
48
|
+
const ids = value?.split(" ") ?? [];
|
|
49
|
+
ids.forEach(id => {
|
|
50
|
+
const refEl = _getReferencedElementById(el, id);
|
|
51
|
+
if (refEl) {
|
|
52
|
+
set.add(refEl);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return Array.from(set);
|
|
56
|
+
};
|
|
57
|
+
const _getAssociatedLabels = (el) => {
|
|
58
|
+
const labels = el.getRootNode().querySelectorAll(`[for="${el.id}"]`);
|
|
59
|
+
return Array.from(labels);
|
|
60
|
+
};
|
|
61
|
+
const _getReferencedElementById = (el, elementId) => {
|
|
62
|
+
return el.getRootNode().querySelector(`[id='${elementId}']`);
|
|
63
|
+
};
|
|
28
64
|
/**
|
|
29
65
|
* @param {HTMLElement} el Defines the HTMLElement, for which you need to get all related "label for" texts
|
|
30
66
|
*/
|
|
31
67
|
const getAssociatedLabelForTexts = (el) => {
|
|
32
68
|
const results = [];
|
|
33
|
-
const labels =
|
|
69
|
+
const labels = _getAssociatedLabels(el);
|
|
34
70
|
labels.forEach((label) => {
|
|
35
71
|
const labelText = label.textContent;
|
|
36
72
|
labelText && results.push(labelText);
|
|
@@ -40,5 +76,96 @@ const getAssociatedLabelForTexts = (el) => {
|
|
|
40
76
|
}
|
|
41
77
|
return undefined;
|
|
42
78
|
};
|
|
43
|
-
|
|
79
|
+
const _createInvalidationCallback = (el) => {
|
|
80
|
+
const invalidationCallback = (changeInfo) => {
|
|
81
|
+
if (!(changeInfo && changeInfo.type === "property" && changeInfo.name === "accessibleNameRef")) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const registeredElement = registeredElements.get(el);
|
|
85
|
+
if (!registeredElement) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const oldAssociatedElements = registeredElement.observedElements;
|
|
89
|
+
const newAssociatedElements = _getAllAssociatedElementsFromDOM(el);
|
|
90
|
+
oldAssociatedElements.forEach(oldElement => {
|
|
91
|
+
if (!newAssociatedElements.includes(oldElement)) {
|
|
92
|
+
_removeObservedElementFromRegisteredElement(registeredElement, oldElement);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
newAssociatedElements.forEach(newElement => {
|
|
96
|
+
if (!oldAssociatedElements.includes(newElement)) {
|
|
97
|
+
_addObservedElementToRegisteredElement(registeredElement, newElement);
|
|
98
|
+
registeredElement.observedElements.push(newElement);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
registeredElement?.callback();
|
|
102
|
+
};
|
|
103
|
+
return invalidationCallback;
|
|
104
|
+
};
|
|
105
|
+
const registerUI5Element = (el, callback) => {
|
|
106
|
+
if (registeredElements.has(el)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const allAssociatedElements = _getAllAssociatedElementsFromDOM(el);
|
|
110
|
+
const invalidationCallback = _createInvalidationCallback(el);
|
|
111
|
+
const registeredElement = {
|
|
112
|
+
host: el,
|
|
113
|
+
observedElements: allAssociatedElements,
|
|
114
|
+
callback,
|
|
115
|
+
invalidationCallback,
|
|
116
|
+
};
|
|
117
|
+
registeredElements.set(el, registeredElement);
|
|
118
|
+
el.attachInvalidate(invalidationCallback);
|
|
119
|
+
allAssociatedElements.forEach((element) => {
|
|
120
|
+
_addObservedElementToRegisteredElement(registeredElement, element);
|
|
121
|
+
});
|
|
122
|
+
callback();
|
|
123
|
+
};
|
|
124
|
+
const _addObservedElementToRegisteredElement = (registeredElement, element) => {
|
|
125
|
+
let associatedElement = associatedElements.get(element);
|
|
126
|
+
if (!associatedElement) {
|
|
127
|
+
associatedElement = { observer: null, callbacks: [] };
|
|
128
|
+
const observer = new MutationObserver(() => {
|
|
129
|
+
const callbacks = associatedElement.callbacks;
|
|
130
|
+
callbacks.forEach(callback => {
|
|
131
|
+
callback();
|
|
132
|
+
});
|
|
133
|
+
const domEl = document.getElementById(element.id);
|
|
134
|
+
// if no longer should be observed from this registeredElement, remove it
|
|
135
|
+
if (!(registeredElement.host.id === element.getAttribute("for") || domEl)) {
|
|
136
|
+
_removeObservedElementFromRegisteredElement(registeredElement, element);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
associatedElement.observer = observer;
|
|
140
|
+
observer.observe(element, observerOptions);
|
|
141
|
+
associatedElements.set(element, associatedElement);
|
|
142
|
+
}
|
|
143
|
+
if (!associatedElement.callbacks.includes(registeredElement.callback)) {
|
|
144
|
+
associatedElement.callbacks.push(registeredElement.callback);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const _removeObservedElementFromRegisteredElement = (registeredElement, element) => {
|
|
148
|
+
const associatedElement = associatedElements.get(element);
|
|
149
|
+
if (associatedElement) {
|
|
150
|
+
associatedElement.callbacks = associatedElement.callbacks.filter(itm => itm !== registeredElement.callback);
|
|
151
|
+
if (!associatedElement.callbacks.length) {
|
|
152
|
+
associatedElement.observer?.disconnect();
|
|
153
|
+
associatedElements.delete(element);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
registeredElement.observedElements = registeredElement.observedElements.filter(itm => itm !== element);
|
|
157
|
+
};
|
|
158
|
+
const deregisterUI5Element = (el) => {
|
|
159
|
+
const registeredElement = registeredElements.get(el);
|
|
160
|
+
if (!registeredElement) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const oldObservedElements = [...registeredElement.observedElements];
|
|
164
|
+
oldObservedElements.forEach(observedElement => {
|
|
165
|
+
_removeObservedElementFromRegisteredElement(registeredElement, observedElement);
|
|
166
|
+
});
|
|
167
|
+
el.detachInvalidate(registeredElement.invalidationCallback);
|
|
168
|
+
registeredElements.delete(el);
|
|
169
|
+
};
|
|
170
|
+
export { getEffectiveAriaLabelText, getAssociatedLabelForTexts, registerUI5Element, deregisterUI5Element, getAllAccessibleNameRefTexts, };
|
|
44
171
|
//# sourceMappingURL=AriaLabelHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AriaLabelHelper.js","sourceRoot":"","sources":["../../src/util/AriaLabelHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AriaLabelHelper.js","sourceRoot":"","sources":["../../src/util/AriaLabelHelper.ts"],"names":[],"mappings":"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"}
|
package/package-scripts.js
CHANGED
|
@@ -16,7 +16,7 @@ const eslintConfig = `--config ${require.resolve("@ui5/webcomponents-tools/compo
|
|
|
16
16
|
const scripts = {
|
|
17
17
|
clean: "rimraf jsdoc-dist && rimraf src/generated && rimraf dist && rimraf .port",
|
|
18
18
|
lint: `eslint . ${eslintConfig}`,
|
|
19
|
-
prepare: "nps clean integrate copy generateAssetParameters generateVersionInfo generateStyles generateTemplates typescript generateAPI",
|
|
19
|
+
prepare: "cross-env UI5_TS=true nps clean integrate copy generateAssetParameters generateVersionInfo generateStyles generateTemplates typescript generateAPI",
|
|
20
20
|
typescript: "tsc",
|
|
21
21
|
integrate: {
|
|
22
22
|
default: "nps integrate.copy-used-modules integrate.replace-amd integrate.amd-to-es6 integrate.esm-abs-to-rel integrate.third-party",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ui5/webcomponents-base",
|
|
3
|
-
"version": "1.11.0-rc.
|
|
3
|
+
"version": "1.11.0-rc.2",
|
|
4
4
|
"description": "UI5 Web Components: webcomponents.base",
|
|
5
5
|
"author": "SAP SE (https://www.sap.com)",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@buxlabs/amd-to-es6": "0.16.1",
|
|
38
38
|
"@openui5/sap.ui.core": "1.109.0",
|
|
39
|
-
"@ui5/webcomponents-tools": "1.11.0-rc.
|
|
39
|
+
"@ui5/webcomponents-tools": "1.11.0-rc.2",
|
|
40
40
|
"chromedriver": "109.0.0",
|
|
41
41
|
"clean-css": "^5.2.2",
|
|
42
42
|
"copy-and-watch": "^0.1.5",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"replace-in-file": "^6.3.5",
|
|
47
47
|
"resolve": "^1.20.0"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "a6334749f4f61a49b1ef754b75fe319991c54c17"
|
|
50
50
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import getSharedResource from "../getSharedResource.js";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import { getIconCollectionByAlias } from "../assets-meta/IconCollectionsAlias.js";
|
|
3
|
+
import { getEffectiveIconCollection } from "../config/Icons.js";
|
|
4
4
|
import { I18nText } from "../i18nBundle.js";
|
|
5
5
|
import { TemplateFunction } from "../renderer/executeTemplate.js";
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ type CollectionData = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
type IconData = {
|
|
22
|
-
collection
|
|
22
|
+
collection: string,
|
|
23
23
|
packageName: string,
|
|
24
24
|
pathData: string | Array<string>,
|
|
25
25
|
ltr: boolean,
|
|
@@ -67,11 +67,8 @@ const _fillRegistry = (bundleData: CollectionData) => {
|
|
|
67
67
|
|
|
68
68
|
// set
|
|
69
69
|
const registerIcon = (name: string, iconData: IconData) => { // eslint-disable-line
|
|
70
|
-
if (!iconData.collection) {
|
|
71
|
-
iconData.collection = getEffectiveDefaultIconCollection();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
70
|
const key = `${iconData.collection}/${name}`;
|
|
71
|
+
|
|
75
72
|
registry.set(key, {
|
|
76
73
|
pathData: iconData.pathData,
|
|
77
74
|
ltr: iconData.ltr,
|
|
@@ -79,38 +76,48 @@ const registerIcon = (name: string, iconData: IconData) => { // eslint-disable-l
|
|
|
79
76
|
packageName: iconData.packageName,
|
|
80
77
|
customTemplate: iconData.customTemplate,
|
|
81
78
|
viewBox: iconData.viewBox,
|
|
79
|
+
collection: iconData.collection,
|
|
82
80
|
});
|
|
83
81
|
};
|
|
84
82
|
|
|
85
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Processes the full icon name and splits it into - "name", "collection"
|
|
85
|
+
* to form the proper registry key ("collection/name") under which the icon is registered:
|
|
86
|
+
*
|
|
87
|
+
* - removes legacy protocol ("sap-icon://")
|
|
88
|
+
* - resolves aliases (f.e "SAP-icons-TNT/actor" => "tnt/actor")
|
|
89
|
+
* - determines theme dependant icon collection (f.e "home" => "SAP-icons-v4/home" in Quartz | "SAP-icons-v5/home" in Horizon)
|
|
90
|
+
*
|
|
91
|
+
* @param { string } name
|
|
92
|
+
* @return { object }
|
|
93
|
+
*/
|
|
94
|
+
const processName = (name: string) => {
|
|
86
95
|
// silently support ui5-compatible URIs
|
|
87
96
|
if (name.startsWith("sap-icon://")) {
|
|
88
97
|
name = name.replace("sap-icon://", "");
|
|
89
98
|
}
|
|
90
99
|
|
|
91
|
-
let collection;
|
|
100
|
+
let collection: string;
|
|
92
101
|
[name, collection] = name.split("/").reverse();
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
// Normalize collection name.
|
|
96
|
-
// - resolve `SAP-icons-TNT` to `tnt`.
|
|
97
|
-
// - resolve `BusinessSuiteInAppSymbols` to `business-suite`.
|
|
98
|
-
// - resolve `horizon` to `SAP-icons-v5`,
|
|
99
|
-
// Note: aliases can be made as a feature, if more collections need it or more aliases are needed.
|
|
100
|
-
collection = _normalizeCollection(collection);
|
|
102
|
+
|
|
101
103
|
name = name.replace("icon-", "");
|
|
102
104
|
|
|
105
|
+
if (collection) {
|
|
106
|
+
collection = getIconCollectionByAlias(collection);
|
|
107
|
+
}
|
|
108
|
+
collection = getEffectiveIconCollection(collection);
|
|
109
|
+
|
|
103
110
|
const registryKey = `${collection}/${name}`;
|
|
104
111
|
return { name, collection, registryKey };
|
|
105
112
|
};
|
|
106
113
|
|
|
107
114
|
const getIconDataSync = (name: string) => {
|
|
108
|
-
const { registryKey } =
|
|
115
|
+
const { registryKey } = processName(name);
|
|
109
116
|
return registry.get(registryKey);
|
|
110
117
|
};
|
|
111
118
|
|
|
112
119
|
const getIconData = async (name: string) => {
|
|
113
|
-
const { collection, registryKey } =
|
|
120
|
+
const { collection, registryKey } = processName(name);
|
|
114
121
|
|
|
115
122
|
let iconData: string | CollectionData = ICON_NOT_FOUND;
|
|
116
123
|
try {
|
|
@@ -140,14 +147,6 @@ const _getRegisteredNames = async () => {
|
|
|
140
147
|
return Array.from(registry.keys());
|
|
141
148
|
};
|
|
142
149
|
|
|
143
|
-
const _normalizeCollection = (collectionName: string) => {
|
|
144
|
-
if (IconCollectionsAlias[collectionName as keyof typeof IconCollectionsAlias]) {
|
|
145
|
-
return IconCollectionsAlias[collectionName as keyof typeof IconCollectionsAlias];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return collectionName;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
150
|
export {
|
|
152
151
|
registerIconLoader,
|
|
153
152
|
getIconData,
|
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Supported icon collection
|
|
2
|
+
* Supported icon collection aliases.
|
|
3
3
|
*
|
|
4
4
|
* Users might specify a collection, using both the key and the value in the following key-value pairs,
|
|
5
5
|
* e.g the following pairs are completely exchangeable:
|
|
6
|
-
* "SAP-icons-TNT/actor" and "tnt/actor", "BusinessSuiteInAppSymbols/3d" and "business-suite/3d",
|
|
7
|
-
* "SAP-icons-v5/accept" and "horizon/accept".
|
|
8
6
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* - "SAP-icons/accept" and "SAP-icons-v4/accept"
|
|
8
|
+
* - "horizon/accept" and "SAP-icons-v5/accept"
|
|
9
|
+
* - "SAP-icons-TNT/actor" and "tnt/actor"
|
|
10
|
+
* - "BusinessSuiteInAppSymbols/3d" and "business-suite/3d"
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
"SAP-icons
|
|
14
|
-
"
|
|
15
|
-
"
|
|
12
|
+
enum IconCollectionsAlias {
|
|
13
|
+
"SAP-icons" = "SAP-icons-v4",
|
|
14
|
+
"horizon" = "SAP-icons-v5",
|
|
15
|
+
"SAP-icons-TNT" = "tnt",
|
|
16
|
+
"BusinessSuiteInAppSymbols" = "business-suite",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Returns the mapped collection name for a given alias.
|
|
21
|
+
*
|
|
22
|
+
* <b>For example</b>:
|
|
23
|
+
* - "SAP-icons-TNT"resolves to "tnt"
|
|
24
|
+
* - "BusinessSuiteInAppSymbols" resolves to "business-suite"
|
|
25
|
+
* - "horizon" resolves to "SAP-icons-v5"
|
|
26
|
+
*
|
|
27
|
+
* @param { string } collectionName
|
|
28
|
+
* @return { string } the normalized collection name
|
|
29
|
+
*/
|
|
30
|
+
const getIconCollectionByAlias = (collectionName: string) => {
|
|
31
|
+
if (IconCollectionsAlias[collectionName as keyof typeof IconCollectionsAlias]) {
|
|
32
|
+
return IconCollectionsAlias[collectionName as keyof typeof IconCollectionsAlias];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return collectionName;
|
|
16
36
|
};
|
|
17
37
|
|
|
18
38
|
export default IconCollectionsAlias;
|
|
39
|
+
export {
|
|
40
|
+
getIconCollectionByAlias,
|
|
41
|
+
};
|