@progress/kendo-angular-common 21.4.1 → 22.0.0

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 (66) hide show
  1. package/fesm2022/progress-kendo-angular-common.mjs +34 -34
  2. package/package.json +5 -7
  3. package/esm2022/adornments/prefix.directive.mjs +0 -53
  4. package/esm2022/adornments/separator-orientation.mjs +0 -5
  5. package/esm2022/adornments/separator.component.mjs +0 -70
  6. package/esm2022/adornments/suffix.directive.mjs +0 -59
  7. package/esm2022/adornments.mjs +0 -7
  8. package/esm2022/directives.mjs +0 -68
  9. package/esm2022/dom-queries/closest-by-selector.mjs +0 -20
  10. package/esm2022/dom-queries/closest-in-scope.mjs +0 -13
  11. package/esm2022/dom-queries/closest.mjs +0 -10
  12. package/esm2022/dom-queries/contains.mjs +0 -13
  13. package/esm2022/dom-queries/find-element.mjs +0 -22
  14. package/esm2022/dom-queries/find-focusable-child.mjs +0 -9
  15. package/esm2022/dom-queries/find-focusable.mjs +0 -9
  16. package/esm2022/dom-queries/has-classes.mjs +0 -9
  17. package/esm2022/dom-queries/is-focusable-with-tab-key.mjs +0 -14
  18. package/esm2022/dom-queries/is-focusable.mjs +0 -14
  19. package/esm2022/dom-queries/is-visible.mjs +0 -12
  20. package/esm2022/dom-queries/matches-classes.mjs +0 -6
  21. package/esm2022/dom-queries/matches-node-name.mjs +0 -11
  22. package/esm2022/dom-queries/rtl-scroll-position.mjs +0 -17
  23. package/esm2022/dom-queries.mjs +0 -18
  24. package/esm2022/draggable/draggable.directive.mjs +0 -68
  25. package/esm2022/draggable.mjs +0 -5
  26. package/esm2022/enums/keys.mjs +0 -75
  27. package/esm2022/enums.mjs +0 -5
  28. package/esm2022/events/events-outside-angular.directive.mjs +0 -58
  29. package/esm2022/events.mjs +0 -5
  30. package/esm2022/index.mjs +0 -24
  31. package/esm2022/localization/replace-message-placeholder.mjs +0 -8
  32. package/esm2022/preventable-event.mjs +0 -22
  33. package/esm2022/progress-kendo-angular-common.mjs +0 -8
  34. package/esm2022/resize-sensor/compat.service.mjs +0 -103
  35. package/esm2022/resize-sensor/observer.service.mjs +0 -41
  36. package/esm2022/resize-sensor/resize-batch.service.mjs +0 -69
  37. package/esm2022/resize-sensor/resize-sensor.component.mjs +0 -71
  38. package/esm2022/resize-sensor/resize.service.mjs +0 -65
  39. package/esm2022/resize-sensor.mjs +0 -8
  40. package/esm2022/template-context/index.mjs +0 -5
  41. package/esm2022/template-context/template-context.directive.mjs +0 -37
  42. package/esm2022/toggle-button-tab-stop/toggle-button-tab-stop.directive.mjs +0 -262
  43. package/esm2022/toggle-button-tab-stop/toggle-button-tab-stop.mjs +0 -10
  44. package/esm2022/toggle-button-tab-stop.mjs +0 -6
  45. package/esm2022/tokens.mjs +0 -6
  46. package/esm2022/utils/any-changed.mjs +0 -9
  47. package/esm2022/utils/detect-browser.mjs +0 -28
  48. package/esm2022/utils/focusable-selectors.mjs +0 -20
  49. package/esm2022/utils/forms-utils.mjs +0 -13
  50. package/esm2022/utils/getter.mjs +0 -27
  51. package/esm2022/utils/guid.mjs +0 -29
  52. package/esm2022/utils/has-observers.mjs +0 -8
  53. package/esm2022/utils/html-attributes.mjs +0 -49
  54. package/esm2022/utils/is-changed.mjs +0 -10
  55. package/esm2022/utils/is-document-available.mjs +0 -8
  56. package/esm2022/utils/keys-normalizer.mjs +0 -95
  57. package/esm2022/utils/ng-class-parser.mjs +0 -78
  58. package/esm2022/utils/objects-equal.mjs +0 -12
  59. package/esm2022/utils/process-css-value.mjs +0 -23
  60. package/esm2022/utils/scrollbar-width.service.mjs +0 -43
  61. package/esm2022/utils/setter.mjs +0 -28
  62. package/esm2022/utils.mjs +0 -14
  63. package/esm2022/watermark/index.mjs +0 -6
  64. package/esm2022/watermark/utils.mjs +0 -58
  65. package/esm2022/watermark/validation.mjs +0 -22
  66. package/esm2022/watermark/watermark.component.mjs +0 -116
@@ -1,95 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Keys } from "../enums";
6
- /**
7
- * @hidden
8
- *
9
- * Maps keyCode values (65-90) to Keys enum values (KeyA-KeyZ).
10
- * Used to handle letter keys correctly across different keyboard layouts.
11
- */
12
- const keyCodeToKeysMap = {
13
- 65: Keys.KeyA,
14
- 66: Keys.KeyB,
15
- 67: Keys.KeyC,
16
- 68: Keys.KeyD,
17
- 69: Keys.KeyE,
18
- 70: Keys.KeyF,
19
- 71: Keys.KeyG,
20
- 72: Keys.KeyH,
21
- 73: Keys.KeyI,
22
- 74: Keys.KeyJ,
23
- 75: Keys.KeyK,
24
- 76: Keys.KeyL,
25
- 77: Keys.KeyM,
26
- 78: Keys.KeyN,
27
- 79: Keys.KeyO,
28
- 80: Keys.KeyP,
29
- 81: Keys.KeyQ,
30
- 82: Keys.KeyR,
31
- 83: Keys.KeyS,
32
- 84: Keys.KeyT,
33
- 85: Keys.KeyU,
34
- 86: Keys.KeyV,
35
- 87: Keys.KeyW,
36
- 88: Keys.KeyX,
37
- 89: Keys.KeyY,
38
- 90: Keys.KeyZ
39
- };
40
- /**
41
- * @hidden
42
- *
43
- * Normalizes keyboard events to ensure consistent key handling across different keyboard layouts.
44
- *
45
- * This function addresses the following scenarios:
46
- * 1. On some keyboards, PageUp/Down, Home/End, and arrow keys are mapped to Numpad keys
47
- * 2. For letter keys (KeyA-KeyZ), checks the deprecated keyCode property to handle non-QWERTY layouts
48
- * (e.g., AZERTY, QWERTZ) where event.code may not match the expected letter
49
- *
50
- * @param event - The keyboard event to normalize
51
- * @returns The normalized key code string (e.g., 'KeyA', 'ArrowDown', 'Enter')
52
- *
53
- * @example
54
- * // On an AZERTY layout, pressing Ctrl+A (where 'A' is physically at 'Q' position)
55
- * // event.code = 'KeyQ', event.keyCode = 65
56
- * const code = normalizeKeys(event); // Returns 'KeyA'
57
- */
58
- export const normalizeKeys = (event) => {
59
- const keyCode = event.keyCode;
60
- if (keyCode >= 65 && keyCode <= 90) {
61
- const normalizedKey = keyCodeToKeysMap[keyCode];
62
- if (normalizedKey) {
63
- return normalizedKey;
64
- }
65
- }
66
- // Handle numpad keys that may be mapped to navigation keys
67
- if (event.code === Keys.Numpad1 && event.key === Keys.End) {
68
- return Keys.End;
69
- }
70
- if (event.code === Keys.Numpad2 && event.key === Keys.ArrowDown) {
71
- return Keys.ArrowDown;
72
- }
73
- if (event.code === Keys.Numpad3 && event.key === Keys.PageDown) {
74
- return Keys.PageDown;
75
- }
76
- if (event.code === Keys.Numpad4 && event.key === Keys.ArrowLeft) {
77
- return Keys.ArrowLeft;
78
- }
79
- if (event.code === Keys.Numpad6 && event.key === Keys.ArrowRight) {
80
- return Keys.ArrowRight;
81
- }
82
- if (event.code === Keys.Numpad7 && event.key === Keys.Home) {
83
- return Keys.Home;
84
- }
85
- if (event.code === Keys.Numpad8 && event.key === Keys.ArrowUp) {
86
- return Keys.ArrowUp;
87
- }
88
- if (event.code === Keys.Numpad9 && event.key === Keys.PageUp) {
89
- return Keys.PageUp;
90
- }
91
- if (event.code === Keys.NumpadEnter) {
92
- return Keys.Enter;
93
- }
94
- return event.code;
95
- };
@@ -1,78 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- /* eslint-disable @typescript-eslint/no-explicit-any */
6
- /**
7
- * @hidden
8
- */
9
- export const isPresent = (value) => value !== null && value !== undefined;
10
- /**
11
- * @hidden
12
- */
13
- export const isObjectPresent = (value) => {
14
- return isObject(value) && Object.keys(value).length > 0;
15
- };
16
- /**
17
- * @hidden
18
- */
19
- export const isString = (value) => value instanceof String || typeof value === 'string';
20
- /**
21
- * @hidden
22
- */
23
- export const isObject = (value) => isPresent(value) && !Array.isArray(value) && typeof value === 'object';
24
- /**
25
- * @hidden
26
- */
27
- export const isSet = (value) => isPresent(value) && value instanceof Set;
28
- /**
29
- * @hidden
30
- */
31
- export const splitStringToArray = (value) => value.trim().replace(/\s+/g, " ").split(' ');
32
- /**
33
- * Receives CSS class declarations either as an object, string, set or array and returns an array of the class names.
34
- *
35
- * @hidden
36
- */
37
- export const parseCSSClassNames = (value) => {
38
- if (Array.isArray(value)) {
39
- return parseArrayClassNames(value);
40
- }
41
- if (isSet(value)) {
42
- return parseArrayClassNames(Array.from(value));
43
- }
44
- if (isObject(value)) {
45
- return parseObjectClassNames(value);
46
- }
47
- if (isString(value)) {
48
- return parseStringClassNames(value);
49
- }
50
- };
51
- const parseObjectClassNames = (value) => {
52
- const classes = [];
53
- Object.keys(value).forEach((className) => {
54
- const currentClassName = splitStringToArray(className);
55
- if (value[className] && currentClassName.length) {
56
- classes.push(...currentClassName);
57
- }
58
- });
59
- return classes;
60
- };
61
- const parseStringClassNames = (value) => {
62
- const classes = [];
63
- const classesArray = splitStringToArray(value);
64
- classesArray.forEach((className) => {
65
- classes.push(className);
66
- });
67
- return classes;
68
- };
69
- const parseArrayClassNames = (value) => {
70
- const classes = [];
71
- value.forEach((className) => {
72
- const current = splitStringToArray(className);
73
- if (current[0]) {
74
- classes.push(...current);
75
- }
76
- });
77
- return classes;
78
- };
@@ -1,12 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- export const areObjectsEqual = (firstObject, secondObject) => {
6
- if (Object.keys(firstObject).length !== Object.keys(secondObject).length) {
7
- return false;
8
- }
9
- const equalSettings = Object.entries(firstObject)
10
- .filter(([key, value]) => value === secondObject[key.toString()]);
11
- return equalSettings.length === Object.keys(firstObject).length;
12
- };
@@ -1,23 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- export const processCssValue = (value) => {
6
- if (typeof value === 'number') {
7
- return `${value}px`;
8
- }
9
- else if (typeof value === 'string') {
10
- const trimmedValue = value.trim();
11
- const numValue = parseInt(trimmedValue, 10);
12
- if (!isNaN(numValue) && Number.isFinite(numValue)) {
13
- if (numValue.toString() === trimmedValue) {
14
- return `${numValue}px`;
15
- }
16
- else {
17
- return value;
18
- }
19
- }
20
- return null;
21
- }
22
- return null;
23
- };
@@ -1,43 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Injectable, EventEmitter } from '@angular/core';
6
- import { isDocumentAvailable } from './is-document-available';
7
- import * as i0 from "@angular/core";
8
- const canCreateElement = () => isDocumentAvailable() && document.createElement;
9
- const propName = '--kendo-scrollbar-width';
10
- /**
11
- * @hidden
12
- */
13
- export const scrollbarWidth = () => {
14
- let scrollbarWidth = 0;
15
- if (canCreateElement()) {
16
- const div = document.createElement('div');
17
- div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';
18
- div.innerHTML = '&nbsp;';
19
- document.body.appendChild(div);
20
- scrollbarWidth = div.offsetWidth - div.scrollWidth;
21
- document.body.removeChild(div);
22
- }
23
- return scrollbarWidth;
24
- };
25
- /**
26
- * @hidden
27
- */
28
- export class ScrollbarWidthService {
29
- changes = new EventEmitter();
30
- constructor() {
31
- if (typeof window !== 'undefined' && isDocumentAvailable()) {
32
- document.body.style.setProperty(propName, `${scrollbarWidth()}px`);
33
- }
34
- }
35
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollbarWidthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
36
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollbarWidthService, providedIn: 'root' });
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollbarWidthService, decorators: [{
39
- type: Injectable,
40
- args: [{
41
- providedIn: 'root'
42
- }]
43
- }], ctorParameters: () => [] });
@@ -1,28 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- const FIELD_REGEX = /\[(?:(\d+)|['"](.*?)['"])\]|((?:(?!\[.*?\]|\.).)+)/g;
6
- const setterCache = {};
7
- setterCache['undefined'] = (obj) => obj;
8
- /**
9
- * @hidden
10
- */
11
- export function setter(field) {
12
- if (setterCache[field]) {
13
- return setterCache[field];
14
- }
15
- const fields = [];
16
- field.replace(FIELD_REGEX, function (_match, index, indexAccessor, fieldName) {
17
- fields.push(index !== undefined ? index : (indexAccessor || fieldName));
18
- });
19
- setterCache[field] = function (obj, value) {
20
- let root = obj;
21
- const depth = fields.length - 1;
22
- for (let idx = 0; idx < depth && root; idx++) {
23
- root = root[fields[idx]] = root[fields[idx]] || {};
24
- }
25
- root[fields[depth]] = value;
26
- };
27
- return setterCache[field];
28
- }
package/esm2022/utils.mjs DELETED
@@ -1,14 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- export { isDocumentAvailable } from './utils/is-document-available';
6
- export { isChanged } from './utils/is-changed';
7
- export { anyChanged } from './utils/any-changed';
8
- export { hasObservers } from './utils/has-observers';
9
- export { guid } from './utils/guid';
10
- export { isSafari, isFirefox, firefoxMaxHeight } from './utils/detect-browser';
11
- export * from './utils/html-attributes';
12
- export { isControlRequired } from './utils/forms-utils';
13
- export { areObjectsEqual } from './utils/objects-equal';
14
- export { processCssValue } from './utils/process-css-value';
@@ -1,6 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- export { WatermarkOverlayComponent } from './watermark.component';
6
- export { shouldShowValidationUI, getLicenseMessage } from './validation';
@@ -1,58 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- /**
6
- * @hidden
7
- */
8
- export const watermarkStyles = `
9
- position: absolute;
10
- width: 100%;
11
- height: 100%;
12
- top: 0;
13
- left: 0;
14
- right: 0;
15
- bottom: 0;
16
- opacity: 0.2;
17
- zIndex: 101;
18
- pointerEvents: none;
19
- backgroundImage: url('data:image/png;base64,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');
20
- `;
21
- /**
22
- * @hidden
23
- */
24
- export const bannerStyles = {
25
- display: 'flex',
26
- justifyContent: 'center',
27
- alignItems: 'center',
28
- position: 'fixed',
29
- top: '16px',
30
- right: '16px',
31
- padding: '12px',
32
- borderRadius: '4px',
33
- boxShadow: '0px 4px 5px 0px rgba(0, 0, 0, 0.04), 0px 2px 4px 0px rgba(0, 0, 0, 0.03)',
34
- fontSize: '14px',
35
- fontWeight: 400,
36
- lineHeight: '20px',
37
- backgroundColor: '#FFC000',
38
- color: '#1E1E1E',
39
- zIndex: 20000
40
- };
41
- /**
42
- * @hidden
43
- */
44
- export const buttonStyles = {
45
- display: 'inline-flex',
46
- position: 'relative',
47
- border: 'none',
48
- borderRadius: '4px',
49
- padding: '5px',
50
- backgroundColor: 'transparent',
51
- transition: 'color 0.2s ease-in-out',
52
- outline: 'none',
53
- cursor: 'pointer'
54
- };
55
- /**
56
- * @hidden
57
- */
58
- export const licenseKeyUrl = 'https://www.telerik.com/kendo-angular-ui/components/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-banner';
@@ -1,22 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { getLicenseStatus } from "@progress/kendo-licensing";
6
- const allowed = ['telerik.com', 'progress.com', 'stackblitz.io', 'csb.app'];
7
- /**
8
- * @hidden
9
- */
10
- export function shouldShowValidationUI(isPackageValid) {
11
- const skip = allowed.some((hostname) => globalThis.document?.location.hostname.endsWith(hostname));
12
- return !skip && !isPackageValid;
13
- }
14
- /**
15
- * @hidden
16
- *
17
- * Returns the notification message to display, if any.
18
- */
19
- export function getLicenseMessage(meta) {
20
- const message = getLicenseStatus(meta).message;
21
- return message?.notificationMessage;
22
- }
@@ -1,116 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';
6
- import { watermarkStyles, bannerStyles, licenseKeyUrl, buttonStyles } from './utils';
7
- import { isDocumentAvailable } from '../utils';
8
- import { NgStyle } from '@angular/common';
9
- import * as i0 from "@angular/core";
10
- let bannerPresentOnPage = false;
11
- /**
12
- * @hidden
13
- */
14
- export class WatermarkOverlayComponent {
15
- watermarkStyle = watermarkStyles;
16
- licenseMessage;
17
- banner;
18
- isOpen = true;
19
- bannerMounted = false;
20
- bannerStyles = bannerStyles;
21
- buttonStyles = buttonStyles;
22
- licenseKeyUrl = licenseKeyUrl;
23
- ngOnInit() {
24
- if (!bannerPresentOnPage) {
25
- this.bannerMounted = true;
26
- bannerPresentOnPage = true;
27
- }
28
- }
29
- ngAfterViewInit() {
30
- if (this.isBannerRendered) {
31
- document.body.appendChild(this.banner.nativeElement);
32
- }
33
- }
34
- ngOnDestroy() {
35
- if (this.isBannerRendered) {
36
- document.body.removeChild(this.banner.nativeElement);
37
- }
38
- }
39
- closeBanner() {
40
- this.isOpen = false;
41
- }
42
- get isBannerRendered() {
43
- return isDocumentAvailable() && !!this.banner?.nativeElement;
44
- }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WatermarkOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WatermarkOverlayComponent, isStandalone: true, selector: "div[kendoWatermarkOverlay]", inputs: { licenseMessage: "licenseMessage" }, host: { properties: { "style": "this.watermarkStyle" } }, viewQueries: [{ propertyName: "banner", first: true, predicate: ["banner"], descendants: true }], ngImport: i0, template: `
47
- @if (isOpen && bannerMounted) {
48
- <div #banner [ngStyle]="bannerStyles">
49
- <span [ngStyle]="{ display: 'flex', alignSelf: 'center', marginRight: '8px' }">
50
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
51
- <path fill-rule="evenodd" clip-rule="evenodd" d="M8 1L0 15H16L8 1ZM7 6V11H9V6H7ZM7 14V12H9V14H7Z" fill="#1E1E1E"/>
52
- </svg>
53
- </span>
54
- @if (licenseMessage) {
55
- <span [innerHtml]="licenseMessage"></span>
56
- }
57
- @if (!licenseMessage) {
58
- <span>
59
- We couldn't verify your <a [href]="licenseKeyUrl">license key</a> for Kendo UI for Angular. Please see the browser
60
- console for details and resolution steps.
61
- </span>
62
- }
63
- <div [ngStyle]="{ display: 'flex', alignItems: 'center', marginLeft: '24px' }">
64
- <button title='Close' [ngStyle]="buttonStyles" (click)="closeBanner()">
65
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
66
- <path d="M13 4.41562L9.41563 8L13 11.5844L11.5844 13L8 9.41563L4.41562 13L3 11.5844L6.58437 8L3 4.41562L4.41562 3L8 6.58437L11.5844 3L13 4.41562Z" fill="#1E1E1E"/>
67
- </svg>
68
- </button>
69
- </div>
70
- </div>
71
- }
72
- `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
73
- }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WatermarkOverlayComponent, decorators: [{
75
- type: Component,
76
- args: [{
77
- selector: 'div[kendoWatermarkOverlay]',
78
- template: `
79
- @if (isOpen && bannerMounted) {
80
- <div #banner [ngStyle]="bannerStyles">
81
- <span [ngStyle]="{ display: 'flex', alignSelf: 'center', marginRight: '8px' }">
82
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
83
- <path fill-rule="evenodd" clip-rule="evenodd" d="M8 1L0 15H16L8 1ZM7 6V11H9V6H7ZM7 14V12H9V14H7Z" fill="#1E1E1E"/>
84
- </svg>
85
- </span>
86
- @if (licenseMessage) {
87
- <span [innerHtml]="licenseMessage"></span>
88
- }
89
- @if (!licenseMessage) {
90
- <span>
91
- We couldn't verify your <a [href]="licenseKeyUrl">license key</a> for Kendo UI for Angular. Please see the browser
92
- console for details and resolution steps.
93
- </span>
94
- }
95
- <div [ngStyle]="{ display: 'flex', alignItems: 'center', marginLeft: '24px' }">
96
- <button title='Close' [ngStyle]="buttonStyles" (click)="closeBanner()">
97
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
98
- <path d="M13 4.41562L9.41563 8L13 11.5844L11.5844 13L8 9.41563L4.41562 13L3 11.5844L6.58437 8L3 4.41562L4.41562 3L8 6.58437L11.5844 3L13 4.41562Z" fill="#1E1E1E"/>
99
- </svg>
100
- </button>
101
- </div>
102
- </div>
103
- }
104
- `,
105
- standalone: true,
106
- imports: [NgStyle]
107
- }]
108
- }], propDecorators: { watermarkStyle: [{
109
- type: HostBinding,
110
- args: ['style']
111
- }], licenseMessage: [{
112
- type: Input
113
- }], banner: [{
114
- type: ViewChild,
115
- args: ['banner']
116
- }] } });