@ui5/webcomponents-base 1.0.0-rc.15 → 1.0.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.
Files changed (115) hide show
  1. package/.eslintignore +2 -1
  2. package/CHANGELOG.md +53 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +6 -2
  5. package/dist/CSP.js +59 -0
  6. package/dist/Device.js +5 -0
  7. package/dist/EventProvider.js +19 -25
  8. package/dist/FontFace.js +7 -95
  9. package/dist/InitialConfiguration.js +11 -7
  10. package/dist/Keys.js +9 -0
  11. package/dist/ManagedStyles.js +83 -0
  12. package/dist/Render.js +3 -1
  13. package/dist/StaticAreaItem.js +11 -9
  14. package/dist/SystemCSSVars.js +4 -25
  15. package/dist/UI5Element.js +43 -59
  16. package/dist/UI5ElementMetadata.js +9 -1
  17. package/dist/asset-registries/Icons.js +26 -8
  18. package/dist/asset-registries/Illustrations.js +10 -3
  19. package/dist/asset-registries/LocaleData.js +11 -2
  20. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  21. package/dist/config/Theme.js +14 -0
  22. package/dist/css/FontFace.css +45 -0
  23. package/dist/css/OverrideFontFace.css +32 -0
  24. package/dist/css/SystemCSSVars.css +17 -0
  25. package/dist/delegate/ItemNavigation.js +66 -0
  26. package/dist/generated/AssetParameters.js +1 -1
  27. package/dist/generated/css/FontFace.css.js +5 -0
  28. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  29. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  30. package/dist/i18nBundle.js +33 -2
  31. package/dist/renderer/LitRenderer.js +7 -4
  32. package/dist/renderer/directives/style-map.js +72 -0
  33. package/dist/resources/bundle.esm.js +19 -8
  34. package/dist/resources/bundle.esm.js.map +1 -1
  35. package/dist/sap/base/Log.js +2 -10
  36. package/dist/sap/base/assert.js +1 -5
  37. package/dist/test-resources/elements/WithStaticArea.js +2 -1
  38. package/dist/test-resources/pages/AllTestElements.html +3 -0
  39. package/dist/test-resources/pages/i18n.html +1 -3
  40. package/dist/test-resources/specs/ConfigurationChange.spec.js +9 -9
  41. package/dist/test-resources/specs/ConfigurationScript.spec.js +24 -24
  42. package/dist/test-resources/specs/ConfigurationURL.spec.js +33 -33
  43. package/dist/test-resources/specs/CustomTheme.spec.js +7 -7
  44. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  45. package/dist/test-resources/specs/StaticArea.spec.js +55 -13
  46. package/dist/test-resources/specs/Theming.spec.js +11 -11
  47. package/dist/test-resources/specs/UI5ElementInvalidation.js +29 -29
  48. package/dist/test-resources/specs/UI5ElementLifecycle.js +11 -11
  49. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +11 -11
  50. package/dist/test-resources/specs/UI5ElementMetadataExt.js +8 -8
  51. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +6 -6
  52. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +36 -36
  53. package/dist/test-resources/specs/UI5ElementShadowDOM.js +9 -9
  54. package/dist/test-resources/specs/UI5ElementSlots.js +9 -9
  55. package/dist/theming/CustomStyle.js +23 -3
  56. package/dist/theming/applyTheme.js +11 -10
  57. package/dist/theming/getEffectiveLinksHrefs.js +20 -0
  58. package/dist/theming/getStylesString.js +4 -2
  59. package/dist/theming/getThemeDesignerTheme.js +25 -5
  60. package/dist/theming/preloadLinks.js +23 -0
  61. package/dist/types/DataType.js +12 -0
  62. package/dist/types/Float.js +4 -0
  63. package/dist/types/Integer.js +4 -0
  64. package/dist/updateShadowRoot.js +8 -4
  65. package/dist/util/createLinkInHead.js +19 -0
  66. package/dist/util/encodeXML.js +35 -0
  67. package/dist/util/escapeRegex.js +10 -0
  68. package/dist/util/generateHighlightedMarkup.js +42 -0
  69. package/hash.txt +1 -1
  70. package/lib/generate-asset-parameters/index.js +0 -1
  71. package/lib/generate-styles/index.js +18 -0
  72. package/package-scripts.js +9 -6
  73. package/package.json +9 -11
  74. package/src/CSP.js +59 -0
  75. package/src/Device.js +5 -0
  76. package/src/EventProvider.js +19 -25
  77. package/src/FontFace.js +7 -95
  78. package/src/InitialConfiguration.js +11 -7
  79. package/src/Keys.js +9 -0
  80. package/src/ManagedStyles.js +83 -0
  81. package/src/Render.js +3 -1
  82. package/src/StaticAreaItem.js +11 -9
  83. package/src/SystemCSSVars.js +4 -25
  84. package/src/UI5Element.js +43 -59
  85. package/src/UI5ElementMetadata.js +9 -1
  86. package/src/asset-registries/Icons.js +26 -8
  87. package/src/asset-registries/Illustrations.js +10 -3
  88. package/src/asset-registries/LocaleData.js +11 -2
  89. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  90. package/src/config/Theme.js +14 -0
  91. package/src/css/FontFace.css +45 -0
  92. package/src/css/OverrideFontFace.css +32 -0
  93. package/src/css/SystemCSSVars.css +17 -0
  94. package/src/delegate/ItemNavigation.js +66 -0
  95. package/src/i18nBundle.js +33 -2
  96. package/src/renderer/LitRenderer.js +7 -4
  97. package/src/renderer/directives/style-map.js +72 -0
  98. package/src/theming/CustomStyle.js +23 -3
  99. package/src/theming/applyTheme.js +11 -10
  100. package/src/theming/getEffectiveLinksHrefs.js +20 -0
  101. package/src/theming/getStylesString.js +4 -2
  102. package/src/theming/getThemeDesignerTheme.js +25 -5
  103. package/src/theming/preloadLinks.js +23 -0
  104. package/src/types/DataType.js +12 -0
  105. package/src/types/Float.js +4 -0
  106. package/src/types/Integer.js +4 -0
  107. package/src/updateShadowRoot.js +8 -4
  108. package/src/util/createLinkInHead.js +19 -0
  109. package/src/util/encodeXML.js +35 -0
  110. package/src/util/escapeRegex.js +10 -0
  111. package/src/util/generateHighlightedMarkup.js +42 -0
  112. package/dist/config/AssetsPath.js +0 -17
  113. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  114. package/src/config/AssetsPath.js +0 -17
  115. package/src/theming/createThemePropertiesStyleTag.js +0 -20
package/.eslintignore CHANGED
@@ -10,4 +10,5 @@ rollup.config*.js
10
10
  wdio.conf.js
11
11
  postcss.config.js
12
12
  package-scripts.js
13
- .eslintrc.js
13
+ .eslintrc.js
14
+ src/renderer/directives/style-map.js
package/CHANGELOG.md CHANGED
@@ -3,6 +3,59 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.0.2](https://github.com/SAP/ui5-webcomponents/compare/v1.0.1...v1.0.2) (2021-11-29)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * prevent runtime error on malformed custom theme object ([#4375](https://github.com/SAP/ui5-webcomponents/issues/4375)) ([dd10d7c](https://github.com/SAP/ui5-webcomponents/commit/dd10d7c))
12
+
13
+
14
+
15
+
16
+
17
+ ## [1.0.1](https://github.com/SAP/ui5-webcomponents/compare/v1.0.0...v1.0.1) (2021-11-10)
18
+
19
+ **Note:** Version bump only for package @ui5/webcomponents-base
20
+
21
+
22
+
23
+
24
+
25
+ # [1.0.0](https://github.com/SAP/ui5-webcomponents/compare/v1.0.0-rc.16...v1.0.0) (2021-11-10)
26
+
27
+
28
+ **Note:** Version bump only for package @ui5/webcomponents-base
29
+
30
+
31
+
32
+
33
+
34
+ # [1.0.0-rc.16](https://github.com/SAP/ui5-webcomponents/compare/v1.0.0-rc.15...v1.0.0-rc.16) (2021-11-09)
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * **framework:** apply RTL for components with popovers ([#3657](https://github.com/SAP/ui5-webcomponents/issues/3657)) ([28e868b](https://github.com/SAP/ui5-webcomponents/commit/28e868b))
40
+ * **framework:** Multiple properties have no attribute ([#3725](https://github.com/SAP/ui5-webcomponents/issues/3725)) ([2548935](https://github.com/SAP/ui5-webcomponents/commit/2548935))
41
+ * **framework:** removing the base theme works with adopted stylesheets ([#4158](https://github.com/SAP/ui5-webcomponents/issues/4158)) ([aa1f594](https://github.com/SAP/ui5-webcomponents/commit/aa1f594))
42
+ * **framework:** detach events correctly to prevent memory leaks ([#3941](https://github.com/SAP/ui5-webcomponents/issues/3941)) ([6c877ee](https://github.com/SAP/ui5-webcomponents/commit/6c877ee))
43
+
44
+
45
+ ### Features
46
+
47
+ * **framework:** add SAP-icons5.0 ([#4244](https://github.com/SAP/ui5-webcomponents/issues/4244)) ([c0a226e](https://github.com/SAP/ui5-webcomponents/commit/c0a226e))
48
+ * rework stableDomRef concept ([#4210](https://github.com/SAP/ui5-webcomponents/issues/4210)) ([d1ebea3](https://github.com/SAP/ui5-webcomponents/commit/d1ebea3))
49
+ * **framework:** allow using a custom i18n library ([#4119](https://github.com/SAP/ui5-webcomponents/issues/4119)) ([56f366f](https://github.com/SAP/ui5-webcomponents/commit/56f366f))
50
+ * **framework:** Implement better custom theme support ([#4121](https://github.com/SAP/ui5-webcomponents/issues/4121)) ([31e30f8](https://github.com/SAP/ui5-webcomponents/commit/31e30f8))
51
+ * **framework:** handle Page UP/DOWN ([#3727](https://github.com/SAP/ui5-webcomponents/issues/3727)) ([91a974f](https://github.com/SAP/ui5-webcomponents/commit/91a974f))
52
+ * **framework:** introduce sap_horizon theme initial draft ([#3991](https://github.com/SAP/ui5-webcomponents/issues/3991)) ([b1afaf0](https://github.com/SAP/ui5-webcomponents/commit/b1afaf0)), closes [#3988](https://github.com/SAP/ui5-webcomponents/issues/3988)
53
+ * **framework:** load "72Black" font face ([#4139](https://github.com/SAP/ui5-webcomponents/issues/4139)) ([2be7869](https://github.com/SAP/ui5-webcomponents/commit/2be7869))
54
+
55
+
56
+
57
+
58
+
6
59
  # [1.0.0-rc.15](https://github.com/SAP/ui5-webcomponents/compare/v1.0.0-rc.14...v1.0.0-rc.15) (2021-07-23)
7
60
 
8
61
 
package/README.md CHANGED
@@ -7,7 +7,31 @@
7
7
 
8
8
  Contains the base files for all Web Components, most notably `@ui5/webcomponents-base/dist/UI5Element.js`.
9
9
 
10
- For a complete list of all app development related public module imports from the `base` package, click [here](../../docs/Public%20Module%20Imports.md#base):
10
+ ## Provided APIs for applications
11
+
12
+ ### `Boot.js`
13
+
14
+ - `attachBoot`
15
+
16
+ ### `CustomElementsScope.js`
17
+
18
+ - `setCustomElementsScopingSuffix`
19
+ - `getCustomElementsScopingSuffix`
20
+ - `setCustomElementsScopingRules`
21
+ - `getCustomElementsScopingRules`
22
+
23
+ ### `i18nBundle.js`
24
+
25
+ - `registerI18nLoader`
26
+ - `getI18nBundle`
27
+
28
+ ### `PropertiesFileFormat.js`
29
+
30
+ - `parseProperties`
31
+
32
+ ### `Render.js`
33
+
34
+ - `renderFinished`
11
35
 
12
36
  ## Resources
13
37
  - [UI5 Web Components - README.md](https://github.com/SAP/ui5-webcomponents/blob/master/README.md)
@@ -18,7 +42,7 @@ For a complete list of all app development related public module imports from th
18
42
  We welcome all comments, suggestions, questions, and bug reports. Please follow our [Support Guidelines](https://github.com/SAP/ui5-webcomponents/blob/master/SUPPORT.md#-content) on how to report an issue, or chat with us in the `#webcomponents` channel of the [OpenUI5 Community Slack](https://join-ui5-slack.herokuapp.com/).
19
43
 
20
44
  ## Contribute
21
- Please check our [Contribution Guidelines](https://github.com/SAP/ui5-webcomponents/blob/master/CONTRIBUTING.md).
45
+ Please check our [Contribution Guidelines](https://github.com/SAP/ui5-webcomponents/blob/master/docs/6-contributing/02-conventions-and-guidelines.md).
22
46
 
23
47
  ## License
24
48
  Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved.
package/bundle.esm.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { registerThemePropertiesLoader } from "./dist/AssetRegistry.js";
2
+ import EventProvider from "./dist/EventProvider.js";
2
3
 
3
4
  // ESM bundle targets browsers with native support
4
5
  import "./dist/features/OpenUI5Support.js";
@@ -23,7 +24,7 @@ window.isIE = isIE; // attached to the window object for testing purposes
23
24
  window.registerThemePropertiesLoader = registerThemePropertiesLoader;
24
25
 
25
26
  // i18n
26
- import { registerI18nLoader, fetchI18nBundle, getI18nBundle } from "./dist/i18nBundle.js";
27
+ import { registerI18nLoader, getI18nBundle } from "./dist/i18nBundle.js";
27
28
 
28
29
  // Note: keep in sync with rollup.config value for IIFE
29
30
  import { getAnimationMode } from "./dist/config/AnimationMode.js";
@@ -34,6 +35,8 @@ import { getNoConflict, setNoConflict } from "./dist/config/NoConflict.js";
34
35
  import { getRTL } from "./dist/config/RTL.js";
35
36
  import { getFirstDayOfWeek } from "./dist/config/FormatSettings.js";
36
37
  import { _getRegisteredNames as getIconNames } from "./dist/asset-registries/Icons.js"
38
+ import applyDirection from "./dist/locale/applyDirection.js";
39
+
37
40
  window["sap-ui-webcomponents-bundle"] = {
38
41
  configuration : {
39
42
  getAnimationMode,
@@ -48,7 +51,8 @@ window["sap-ui-webcomponents-bundle"] = {
48
51
  },
49
52
  getIconNames,
50
53
  registerI18nLoader,
51
- fetchI18nBundle,
52
54
  getI18nBundle,
53
55
  renderFinished,
56
+ applyDirection,
57
+ EventProvider,
54
58
  };
package/dist/CSP.js ADDED
@@ -0,0 +1,59 @@
1
+ const roots = new Map();
2
+ let useLinks = false;
3
+ let preloadLinks = true;
4
+
5
+ /**
6
+ * Use this function to provide the path to the directory where the css resources for the given package will be served from
7
+ *
8
+ * @public
9
+ * @param packageName name of the package that is being configured
10
+ * @param root path, accessible by the server that will serve the css resources
11
+ */
12
+ const setPackageCSSRoot = (packageName, root) => {
13
+ roots.set(packageName, root);
14
+ };
15
+
16
+ const getUrl = (packageName, path) => {
17
+ return `${roots.get(packageName)}${path}`;
18
+ };
19
+
20
+ /**
21
+ * Call this function to enable or disable the usage of <link> tags instead of <style> tags to achieve CSP compliance
22
+ * Example: "setUseLinks(true)" will unconditionally use <link> tags for all browsers;
23
+ * Example: "setUseLinks(!document.adoptedStyleSheets) will only enable the usage of <link> tags for browsers that do not support constructable stylesheets.
24
+ *
25
+ * @public
26
+ * @param use whether links will be used
27
+ */
28
+ const setUseLinks = use => {
29
+ useLinks = use;
30
+ };
31
+
32
+ /**
33
+ * Call this function to enable or disable the preloading of <link> tags.
34
+ * Note: only taken into account when <link> tags are being used.
35
+ * Note: links are being preloaded by default, so call "setPreloadLinks(false)" to opt out of this.
36
+ *
37
+ * @public
38
+ * @param preload
39
+ */
40
+ const setPreloadLinks = preload => {
41
+ preloadLinks = preload;
42
+ };
43
+
44
+ const shouldUseLinks = () => {
45
+ return useLinks;
46
+ };
47
+
48
+ const shouldPreloadLinks = () => {
49
+ return preloadLinks;
50
+ };
51
+
52
+ export {
53
+ setPackageCSSRoot,
54
+ getUrl,
55
+ setUseLinks,
56
+ setPreloadLinks,
57
+ shouldUseLinks,
58
+ shouldPreloadLinks,
59
+ };
package/dist/Device.js CHANGED
@@ -91,6 +91,10 @@ const isDesktop = () => {
91
91
  return (!isTablet() && !isPhone()) || isWindows8OrAbove();
92
92
  };
93
93
 
94
+ const isCombi = () => {
95
+ return isTablet() && isDesktop();
96
+ };
97
+
94
98
  export {
95
99
  supportsTouch,
96
100
  isIE,
@@ -99,4 +103,5 @@ export {
99
103
  isPhone,
100
104
  isTablet,
101
105
  isDesktop,
106
+ isCombi,
102
107
  };
@@ -1,36 +1,37 @@
1
1
  class EventProvider {
2
2
  constructor() {
3
- this._eventRegistry = {};
3
+ this._eventRegistry = new Map();
4
4
  }
5
5
 
6
6
  attachEvent(eventName, fnFunction) {
7
7
  const eventRegistry = this._eventRegistry;
8
- let eventListeners = eventRegistry[eventName];
8
+ const eventListeners = eventRegistry.get(eventName);
9
9
 
10
10
  if (!Array.isArray(eventListeners)) {
11
- eventRegistry[eventName] = [];
12
- eventListeners = eventRegistry[eventName];
11
+ eventRegistry.set(eventName, [fnFunction]);
12
+ return;
13
13
  }
14
14
 
15
- eventListeners.push({
16
- "function": fnFunction,
17
- });
15
+ if (!eventListeners.includes(fnFunction)) {
16
+ eventListeners.push(fnFunction);
17
+ }
18
18
  }
19
19
 
20
20
  detachEvent(eventName, fnFunction) {
21
21
  const eventRegistry = this._eventRegistry;
22
- let eventListeners = eventRegistry[eventName];
22
+ const eventListeners = eventRegistry.get(eventName);
23
23
 
24
24
  if (!eventListeners) {
25
25
  return;
26
26
  }
27
+ const indexOfFnToDetach = eventListeners.indexOf(fnFunction);
27
28
 
28
- eventListeners = eventListeners.filter(event => {
29
- return event["function"] !== fnFunction; // eslint-disable-line
30
- });
29
+ if (indexOfFnToDetach !== -1) {
30
+ eventListeners.splice(indexOfFnToDetach, 1);
31
+ }
31
32
 
32
33
  if (eventListeners.length === 0) {
33
- delete eventRegistry[eventName];
34
+ eventRegistry.delete(eventName);
34
35
  }
35
36
  }
36
37
 
@@ -43,14 +44,14 @@ class EventProvider {
43
44
  */
44
45
  fireEvent(eventName, data) {
45
46
  const eventRegistry = this._eventRegistry;
46
- const eventListeners = eventRegistry[eventName];
47
+ const eventListeners = eventRegistry.get(eventName);
47
48
 
48
49
  if (!eventListeners) {
49
50
  return [];
50
51
  }
51
52
 
52
- return eventListeners.map(event => {
53
- return event["function"].call(this, data); // eslint-disable-line
53
+ return eventListeners.map(fn => {
54
+ return fn.call(this, data); // eslint-disable-line
54
55
  });
55
56
  }
56
57
 
@@ -67,24 +68,17 @@ class EventProvider {
67
68
 
68
69
  isHandlerAttached(eventName, fnFunction) {
69
70
  const eventRegistry = this._eventRegistry;
70
- const eventListeners = eventRegistry[eventName];
71
+ const eventListeners = eventRegistry.get(eventName);
71
72
 
72
73
  if (!eventListeners) {
73
74
  return false;
74
75
  }
75
76
 
76
- for (let i = 0; i < eventListeners.length; i++) {
77
- const event = eventListeners[i];
78
- if (event["function"] === fnFunction) { // eslint-disable-line
79
- return true;
80
- }
81
- }
82
-
83
- return false;
77
+ return eventListeners.includes(fnFunction);
84
78
  }
85
79
 
86
80
  hasListeners(eventName) {
87
- return !!this._eventRegistry[eventName];
81
+ return !!this._eventRegistry.get(eventName);
88
82
  }
89
83
  }
90
84
 
package/dist/FontFace.js CHANGED
@@ -1,95 +1,7 @@
1
- /**
2
- * CSS font face used for the texts provided by SAP.
3
- */
4
- import createStyleInHead from "./util/createStyleInHead.js";
1
+ import { hasStyle, createStyle } from "./ManagedStyles.js";
5
2
  import { getFeature } from "./FeaturesRegistry.js";
6
-
7
- /* CDN Locations */
8
- const font72RegularWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents`;
9
- const font72RegularWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents`;
10
-
11
- const font72RegularFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents`;
12
- const font72RegularFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents`;
13
-
14
- const font72BoldWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents`;
15
- const font72BoldWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents`;
16
-
17
- const font72BoldFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents`;
18
- const font72BoldFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents`;
19
-
20
- const fontFaceCSS = `
21
- @font-face {
22
- font-family: "72";
23
- font-style: normal;
24
- font-weight: 400;
25
- src: local("72"),
26
- url(${font72RegularWoff2}) format("woff2"),
27
- url(${font72RegularWoff}) format("woff");
28
- }
29
-
30
- @font-face {
31
- font-family: "72full";
32
- font-style: normal;
33
- font-weight: 400;
34
- src: local('72-full'),
35
- url(${font72RegularFullWoff2}) format("woff2"),
36
- url(${font72RegularFullWoff}) format("woff");
37
-
38
- }
39
-
40
- @font-face {
41
- font-family: "72";
42
- font-style: normal;
43
- font-weight: 700;
44
- src: local('72-Bold'),
45
- url(${font72BoldWoff2}) format("woff2"),
46
- url(${font72BoldWoff}) format("woff");
47
- }
48
-
49
- @font-face {
50
- font-family: "72full";
51
- font-style: normal;
52
- font-weight: 700;
53
- src: local('72-Bold-full'),
54
- url(${font72BoldFullWoff2}) format("woff2"),
55
- url(${font72BoldFullWoff}) format("woff");
56
- }
57
- `;
58
-
59
- /**
60
- * Some diacritics are supported by the 72 font:
61
- * * Grave
62
- * * Acute
63
- * * Circumflex
64
- * * Tilde
65
- *
66
- * However, the following diacritics and the combination of multiple diacritics (including the supported ones) are not supported:
67
- * * Breve
68
- * * Horn
69
- * * Dot below
70
- * * Hook above
71
- *
72
- *
73
- * Override for the characters that aren't covered by the '72' font to other system fonts
74
- *
75
- * U+0102-0103: A and a with Breve
76
- * U+01A0-01A1: O and o with Horn
77
- * U+01AF-01B0: U and u with Horn
78
- * U+1EA0-1EB7: A and a with diacritics that are not supported by the font and combination of multiple diacritics
79
- * U+1EB8-1EC7: E and e with diacritics that are not supported by the font and combination of multiple diacritics
80
- * U+1EC8-1ECB: I and i with diacritics that are not supported by the font and combination of multiple diacritics
81
- * U+1ECC-1EE3: O and o with diacritics that are not supported by the font and combination of multiple diacritics
82
- * U+1EE4-1EF1: U and u with diacritics that are not supported by the font and combination of multiple diacritics
83
- * U+1EF4-1EF7: Y and y with diacritics that are not supported by the font and combination of multiple diacritics
84
- *
85
- */
86
- const overrideFontFaceCSS = `
87
- @font-face {
88
- font-family: '72override';
89
- unicode-range: U+0102-0103, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, U+1EE4-1EF1, U+1EF4-1EF7;
90
- src: local('Arial'), local('Helvetica'), local('sans-serif');
91
- }
92
- `;
3
+ import fontFaceCSS from "./generated/css/FontFace.css.js";
4
+ import overrideFontFaceCSS from "./generated/css/OverrideFontFace.css.js";
93
5
 
94
6
  const insertFontFace = () => {
95
7
  const OpenUI5Support = getFeature("OpenUI5Support");
@@ -104,14 +16,14 @@ const insertFontFace = () => {
104
16
  };
105
17
 
106
18
  const insertMainFontFace = () => {
107
- if (!document.querySelector(`head>style[data-ui5-font-face]`)) {
108
- createStyleInHead(fontFaceCSS, { "data-ui5-font-face": "" });
19
+ if (!hasStyle("data-ui5-font-face")) {
20
+ createStyle(fontFaceCSS, "data-ui5-font-face");
109
21
  }
110
22
  };
111
23
 
112
24
  const insertOverrideFontFace = () => {
113
- if (!document.querySelector(`head>style[data-ui5-font-face-override]`)) {
114
- createStyleInHead(overrideFontFaceCSS, { "data-ui5-font-face-override": "" });
25
+ if (!hasStyle("data-ui5-font-face-override")) {
26
+ createStyle(overrideFontFaceCSS, "data-ui5-font-face-override");
115
27
  }
116
28
  };
117
29
 
@@ -13,7 +13,6 @@ let initialConfig = {
13
13
  noConflict: false, // no URL
14
14
  formatSettings: {},
15
15
  fetchDefaultLanguage: false,
16
- assetsPath: "",
17
16
  };
18
17
 
19
18
  /* General settings */
@@ -62,11 +61,6 @@ const getFormatSettings = () => {
62
61
  return initialConfig.formatSettings;
63
62
  };
64
63
 
65
- const getAssetsPath = () => {
66
- initConfiguration();
67
- return initialConfig.assetsPath;
68
- };
69
-
70
64
  const booleanMapping = new Map();
71
65
  booleanMapping.set("true", true);
72
66
  booleanMapping.set("false", false);
@@ -112,6 +106,14 @@ const parseURLParameters = () => {
112
106
  });
113
107
  };
114
108
 
109
+ const normalizeParamValue = (param, value) => {
110
+ if (param === "theme" && value.includes("@")) { // the theme parameter might have @<URL-TO-THEME> in the value - strip this
111
+ return value.split("@")[0];
112
+ }
113
+
114
+ return value;
115
+ };
116
+
115
117
  const applyURLParam = (key, value, paramType) => {
116
118
  const lowerCaseValue = value.toLowerCase();
117
119
  const param = key.split(`${paramType}-`)[1];
@@ -119,6 +121,9 @@ const applyURLParam = (key, value, paramType) => {
119
121
  if (booleanMapping.has(value)) {
120
122
  value = booleanMapping.get(lowerCaseValue);
121
123
  }
124
+
125
+ value = normalizeParamValue(param, value);
126
+
122
127
  initialConfig[param] = value;
123
128
  };
124
129
 
@@ -158,5 +163,4 @@ export {
158
163
  getNoConflict,
159
164
  getCalendarType,
160
165
  getFormatSettings,
161
- getAssetsPath,
162
166
  };
package/dist/Keys.js CHANGED
@@ -163,8 +163,12 @@ const isPageDown = event => (event.key ? event.key === "PageDown" : event.keyCod
163
163
 
164
164
  const isPageUpShift = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, false, true);
165
165
 
166
+ const isPageUpAlt = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, true, false);
167
+
166
168
  const isPageDownShift = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, false, true);
167
169
 
170
+ const isPageDownAlt = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, true, false);
171
+
168
172
  const isPageUpShiftCtrl = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, true, false, true);
169
173
 
170
174
  const isPageDownShiftCtrl = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, true, false, true);
@@ -187,6 +191,8 @@ const isF4 = event => {
187
191
 
188
192
  const isF4Shift = event => (event.key ? event.key === "F4" : event.keyCode === KeyCodes.F4) && checkModifierKeys(event, false, false, true);
189
193
 
194
+ const isF7 = event => (event.key ? event.key === "F7" : event.keyCode === KeyCodes.F7) && !hasModifierKeys(event);
195
+
190
196
  const isShowByArrows = event => {
191
197
  return ((event.key === "ArrowDown" || event.key === "Down") || (event.key === "ArrowUp" || event.key === "Up")) && checkModifierKeys(event, /* Ctrl */ false, /* Alt */ true, /* Shift */ false);
192
198
  };
@@ -230,10 +236,13 @@ export {
230
236
  isShow,
231
237
  isF4,
232
238
  isF4Shift,
239
+ isF7,
233
240
  isPageUp,
234
241
  isPageDown,
235
242
  isPageUpShift,
243
+ isPageUpAlt,
236
244
  isPageDownShift,
245
+ isPageDownAlt,
237
246
  isPageUpShiftCtrl,
238
247
  isPageDownShiftCtrl,
239
248
  };
@@ -0,0 +1,83 @@
1
+ import createStyleInHead from "./util/createStyleInHead.js";
2
+ import createLinkInHead from "./util/createLinkInHead.js";
3
+ import { shouldUseLinks, getUrl } from "./CSP.js";
4
+
5
+ const getStyleId = (name, value) => {
6
+ return value ? `${name}|${value}` : name;
7
+ };
8
+
9
+ const createStyle = (data, name, value = "") => {
10
+ const content = typeof data === "string" ? data : data.content;
11
+
12
+ if (shouldUseLinks()) {
13
+ const attributes = {};
14
+ attributes[name] = value;
15
+ const href = getUrl(data.packageName, data.fileName);
16
+ createLinkInHead(href, attributes);
17
+ } else if (document.adoptedStyleSheets) {
18
+ const stylesheet = new CSSStyleSheet();
19
+ stylesheet.replaceSync(content);
20
+ stylesheet._ui5StyleId = getStyleId(name, value); // set an id so that we can find the style later
21
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, stylesheet];
22
+ } else {
23
+ const attributes = {};
24
+ attributes[name] = value;
25
+ createStyleInHead(content, attributes);
26
+ }
27
+ };
28
+
29
+ const updateStyle = (data, name, value = "") => {
30
+ const content = typeof data === "string" ? data : data.content;
31
+
32
+ if (shouldUseLinks()) {
33
+ document.querySelector(`head>link[${name}="${value}"]`).href = getUrl(data.packageName, data.fileName);
34
+ } else if (document.adoptedStyleSheets) {
35
+ document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value)).replaceSync(content || "");
36
+ } else {
37
+ document.querySelector(`head>style[${name}="${value}"]`).textContent = content || "";
38
+ }
39
+ };
40
+
41
+ const hasStyle = (name, value = "") => {
42
+ if (shouldUseLinks()) {
43
+ return !!document.querySelector(`head>link[${name}="${value}"]`);
44
+ }
45
+
46
+ if (document.adoptedStyleSheets) {
47
+ return !!document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value));
48
+ }
49
+
50
+ return !!document.querySelector(`head>style[${name}="${value}"]`);
51
+ };
52
+
53
+ const removeStyle = (name, value = "") => {
54
+ if (shouldUseLinks()) {
55
+ const linkElement = document.querySelector(`head>link[${name}="${value}"]`);
56
+ if (linkElement) {
57
+ linkElement.parentElement.removeChild(linkElement);
58
+ }
59
+ } else if (document.adoptedStyleSheets) {
60
+ document.adoptedStyleSheets = document.adoptedStyleSheets.filter(sh => sh._ui5StyleId !== getStyleId(name, value));
61
+ } else {
62
+ const styleElement = document.querySelector(`head > style[${name}="${value}"]`);
63
+ if (styleElement) {
64
+ styleElement.parentElement.removeChild(styleElement);
65
+ }
66
+ }
67
+ };
68
+
69
+ const createOrUpdateStyle = (data, name, value = "") => {
70
+ if (hasStyle(name, value)) {
71
+ updateStyle(data, name, value);
72
+ } else {
73
+ createStyle(data, name, value);
74
+ }
75
+ };
76
+
77
+ export {
78
+ createStyle,
79
+ hasStyle,
80
+ updateStyle,
81
+ removeStyle,
82
+ createOrUpdateStyle,
83
+ };
package/dist/Render.js CHANGED
@@ -135,6 +135,7 @@ const _resolveTaskPromise = () => {
135
135
  * reRenderAllUI5Elements({tag: "ui5-button"}) -> re-renders only instances of ui5-button
136
136
  * reRenderAllUI5Elements({rtlAware: true}) -> re-renders only rtlAware components
137
137
  * reRenderAllUI5Elements({languageAware: true}) -> re-renders only languageAware components
138
+ * reRenderAllUI5Elements({themeAware: true}) -> re-renders only themeAware components
138
139
  * reRenderAllUI5Elements({rtlAware: true, languageAware: true}) -> re-renders components that are rtlAware or languageAware
139
140
  * etc...
140
141
  *
@@ -147,7 +148,8 @@ const reRenderAllUI5Elements = async filters => {
147
148
  const tag = element.constructor.getMetadata().getTag();
148
149
  const rtlAware = isRtlAware(element.constructor);
149
150
  const languageAware = element.constructor.getMetadata().isLanguageAware();
150
- if (!filters || (filters.tag === tag) || (filters.rtlAware && rtlAware) || (filters.languageAware && languageAware)) {
151
+ const themeAware = element.constructor.getMetadata().isThemeAware();
152
+ if (!filters || (filters.tag === tag) || (filters.rtlAware && rtlAware) || (filters.languageAware && languageAware) || (filters.themeAware && themeAware)) {
151
153
  renderDeferred(element);
152
154
  }
153
155
  });
@@ -3,6 +3,7 @@ import updateShadowRoot from "./updateShadowRoot.js";
3
3
  import { renderFinished } from "./Render.js";
4
4
  import getEffectiveContentDensity from "./util/getEffectiveContentDensity.js";
5
5
  import { getEffectiveScopingSuffixForTag } from "./CustomElementsScope.js";
6
+ import getEffectiveDir from "./locale/getEffectiveDir.js";
6
7
 
7
8
  /**
8
9
  *
@@ -33,6 +34,7 @@ class StaticAreaItem extends HTMLElement {
33
34
  update() {
34
35
  if (this._rendered) {
35
36
  this._updateContentDensity();
37
+ this._updateDirection();
36
38
  updateShadowRoot(this.ownerElement, true);
37
39
  }
38
40
  }
@@ -51,6 +53,15 @@ class StaticAreaItem extends HTMLElement {
51
53
  }
52
54
  }
53
55
 
56
+ _updateDirection() {
57
+ const dir = getEffectiveDir(this.ownerElement);
58
+ if (dir) {
59
+ this.setAttribute("dir", dir);
60
+ } else {
61
+ this.removeAttribute("dir");
62
+ }
63
+ }
64
+
54
65
  /**
55
66
  * @protected
56
67
  * Returns reference to the DOM element where the current fragment is added.
@@ -65,15 +76,6 @@ class StaticAreaItem extends HTMLElement {
65
76
  return this.shadowRoot;
66
77
  }
67
78
 
68
- /**
69
- * @protected
70
- * @param refName
71
- * @returns {Element}
72
- */
73
- getStableDomRef(refName) {
74
- return this.shadowRoot.querySelector(`[data-ui5-stable=${refName}]`);
75
- }
76
-
77
79
  static getTag() {
78
80
  const pureTag = "ui5-static-area-item";
79
81
  const suffix = getEffectiveScopingSuffixForTag(pureTag);