@progress/kendo-angular-common 21.4.1 → 22.0.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,65 +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 { EventEmitter } from '@angular/core';
6
- import { isDocumentAvailable } from '../utils';
7
- export class ResizeService {
8
- resizeBatchService;
9
- resize = new EventEmitter();
10
- acceptedSize = false;
11
- lastWidth;
12
- lastHeight;
13
- state = 0 /* ServiceState.Initial */;
14
- parentElement;
15
- constructor(resizeBatchService) {
16
- this.resizeBatchService = resizeBatchService;
17
- }
18
- acceptSize(size = this.measure()) {
19
- this.lastWidth = size.width;
20
- this.lastHeight = size.height;
21
- this.acceptedSize = true;
22
- }
23
- checkChanges() {
24
- if (!isDocumentAvailable()) {
25
- return;
26
- }
27
- if (this.state === 0 /* ServiceState.Initial */) {
28
- this.state = 1 /* ServiceState.Initializing */;
29
- // batch initial measure
30
- this.resizeBatchService.schedule(this, this.init);
31
- }
32
- }
33
- destroy() {
34
- this.resizeBatchService.cancel(this);
35
- }
36
- checkSize() {
37
- if (!this.parentElement) {
38
- return false;
39
- }
40
- const { width, height } = this.measure();
41
- const sameSize = width === this.lastWidth && height === this.lastHeight;
42
- if (sameSize) {
43
- return false;
44
- }
45
- this.lastWidth = width;
46
- this.lastHeight = height;
47
- this.acceptedSize = false;
48
- this.resize.emit({ width, height });
49
- return true;
50
- }
51
- initSize() {
52
- const size = this.measure();
53
- this.lastWidth = size.width;
54
- this.lastHeight = size.height;
55
- }
56
- measure() {
57
- let width = 0;
58
- let height = 0;
59
- if (this.parentElement) {
60
- height = this.parentElement.offsetHeight;
61
- width = this.parentElement.offsetWidth;
62
- }
63
- return { height, width };
64
- }
65
- }
@@ -1,8 +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 { ResizeSensorComponent } from './resize-sensor/resize-sensor.component';
6
- export { ResizeBatchService } from './resize-sensor/resize-batch.service';
7
- export { ResizeCompatService } from './resize-sensor/compat.service';
8
- export { ResizeObserverService } from './resize-sensor/observer.service';
@@ -1,5 +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 { TemplateContextDirective } from './template-context.directive';
@@ -1,37 +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 { Directive, ViewContainerRef, Input } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * @hidden
9
- */
10
- export class TemplateContextDirective {
11
- set templateContext(context) {
12
- if (this.insertedViewRef) {
13
- this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));
14
- this.insertedViewRef = undefined;
15
- }
16
- if (context.templateRef) {
17
- this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);
18
- }
19
- }
20
- insertedViewRef;
21
- viewContainerRef;
22
- constructor(viewContainerRef) {
23
- this.viewContainerRef = viewContainerRef;
24
- }
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TemplateContextDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
26
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TemplateContextDirective, isStandalone: true, selector: "[templateContext]", inputs: { templateContext: "templateContext" }, ngImport: i0 });
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TemplateContextDirective, decorators: [{
29
- type: Directive,
30
- args: [{
31
- // eslint-disable-next-line @angular-eslint/directive-selector
32
- selector: '[templateContext]',
33
- standalone: true
34
- }]
35
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { templateContext: [{
36
- type: Input
37
- }] } });
@@ -1,262 +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 { Directive, ElementRef, EventEmitter, Input, NgZone, Renderer2, isDevMode } from "@angular/core";
6
- import { isDocumentAvailable } from "../utils";
7
- import { MultiTabStop } from "./toggle-button-tab-stop";
8
- import { Subscription } from "rxjs";
9
- import { take } from "rxjs/operators";
10
- import { Keys } from "../enums";
11
- import { normalizeKeys } from "../utils/keys-normalizer";
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "./toggle-button-tab-stop";
14
- const tags = ['kendo-splitbutton', 'kendo-combobox', 'kendo-multicolumncombobox', 'kendo-datepicker', 'kendo-timepicker', 'kendo-datetimepicker'];
15
- /**
16
- * Includes the button that toggles the Popup in the tab sequence when applied
17
- * to a SplitButton, ComboBox, MultiComboBox, DatePicker, TimePicker, and DateTimePicker component.
18
- * ```ts-no-run
19
- * _@Component({
20
- * selector: 'my-app',
21
- * template: `
22
- * <kendo-combobox [data]="data"
23
- * kendoToggleButtonTabStop>
24
- * </kendo-combobox>
25
- *
26
- * <kendo-datepicker [(ngModel)]="value"
27
- * kendoToggleButtonTabStop>
28
- * </kendo-datepicker>
29
- * `
30
- * })
31
- * class AppComponent {}
32
- * ```
33
- */
34
- export class ToggleButtonTabStopDirective {
35
- hostEl;
36
- renderer;
37
- zone;
38
- hostComponent;
39
- /**
40
- * @hidden
41
- *
42
- * Allows setting the interactive state of the toggle button.
43
- *
44
- * @default true
45
- */
46
- active;
47
- /**
48
- * Defines the value of the `aria-label` attribute of the toggle button when active.
49
- *
50
- * @default "toggle popup"
51
- */
52
- toggleButtonAriaLabel = 'toggle popup';
53
- button;
54
- sub = new Subscription();
55
- focusButton;
56
- isSplitButton;
57
- observer;
58
- /**
59
- * @hidden
60
- */
61
- constructor(hostEl, renderer, zone, hostComponent) {
62
- this.hostEl = hostEl;
63
- this.renderer = renderer;
64
- this.zone = zone;
65
- this.hostComponent = hostComponent;
66
- if (isDevMode() && tags.indexOf(hostEl.nativeElement.tagName.toLowerCase()) === -1) {
67
- console.warn(`The kendoToggleButtonTabStop directive can be applied to the following components only: ${tags}`);
68
- }
69
- }
70
- ngOnInit() {
71
- this.active = true;
72
- }
73
- ngAfterViewInit() {
74
- if (!isDocumentAvailable()) {
75
- return;
76
- }
77
- this.isSplitButton = this.hostEl.nativeElement.classList.contains('k-split-button');
78
- if (this.active) {
79
- this.activateButton();
80
- }
81
- if (!(this.hostComponent?.escape instanceof EventEmitter)) {
82
- return;
83
- }
84
- this.sub = this.hostComponent?.escape.subscribe(() => {
85
- this.returnFocusToToggleButton();
86
- });
87
- // Returns the focus to the toggle button when component is opened through it, and the Popup is closed
88
- // while the active element is within the component or popup.
89
- this.sub.add(this.hostComponent.close.subscribe((e) => {
90
- if (!e.isDefaultPrevented() && this.focusButton) {
91
- this.zone.runOutsideAngular(() => {
92
- setTimeout(() => this.focusButton = false);
93
- });
94
- const mainFocusableElement = this.hostEl.nativeElement.querySelector('.k-split-button > .k-button:first-child, .k-input-inner');
95
- const optionsListContainer = document.getElementById(`${mainFocusableElement.getAttribute('aria-controls')}`);
96
- const inList = !!optionsListContainer && optionsListContainer.contains(document.activeElement);
97
- const inWrapper = this.hostEl.nativeElement.contains(document.activeElement);
98
- const focusInComponent = inList || inWrapper;
99
- if (focusInComponent) {
100
- this.returnFocusToToggleButton();
101
- }
102
- }
103
- }));
104
- }
105
- ngOnChanges(changes) {
106
- if (!isDocumentAvailable()) {
107
- return;
108
- }
109
- if (changes['active']) {
110
- if (changes['active'].currentValue) {
111
- this.activateButton();
112
- }
113
- else {
114
- this.deactivateButton();
115
- }
116
- }
117
- if (changes['toggleButtonAriaLabel']) {
118
- if (this.button) {
119
- this.renderer.setAttribute(this.button, 'aria-label', changes['toggleButtonAriaLabel'].currentValue);
120
- }
121
- }
122
- }
123
- ngOnDestroy() {
124
- this.removeListeners();
125
- this.sub.unsubscribe();
126
- }
127
- activateButton() {
128
- const el = this.hostEl.nativeElement;
129
- const tabindex = el.querySelector('button:not([tabindex^="-"]), input:not([tabindex^="-"])')?.getAttribute('tabindex');
130
- this.button = el.querySelector('.k-input-button, .k-split-button-arrow');
131
- if (this.button) {
132
- this.renderer.removeAttribute(this.button, 'role');
133
- this.renderer.setAttribute(this.button, 'tabindex', tabindex);
134
- this.renderer.setAttribute(this.button, 'aria-label', this.toggleButtonAriaLabel);
135
- }
136
- if (!this.observer) {
137
- this.initializeObserver(el);
138
- }
139
- this.removeListeners();
140
- this.addListeners();
141
- }
142
- deactivateButton() {
143
- if (this.button) {
144
- this.renderer.setAttribute(this.button, 'role', 'presentation');
145
- this.renderer.setAttribute(this.button, 'tabindex', '-1');
146
- this.renderer.removeAttribute(this.button, 'aria-label');
147
- }
148
- this.removeListeners();
149
- if (this.observer) {
150
- this.observer.disconnect();
151
- }
152
- this.observer = null;
153
- }
154
- onFocus = () => {
155
- this.renderer.setStyle(this.button, 'box-shadow', 'inset 0 0 0 1px rgba(0, 0, 0, 0.08)');
156
- };
157
- onBlur = () => {
158
- this.renderer.removeStyle(this.button, 'box-shadow');
159
- };
160
- onClick = (e) => {
161
- const code = normalizeKeys(e);
162
- const splitButtonToggleEnter = e instanceof KeyboardEvent && code === Keys.Enter;
163
- const isClick = e instanceof PointerEvent;
164
- if (splitButtonToggleEnter || isClick) {
165
- this.focusButton = true;
166
- }
167
- };
168
- onKeyDown = (e) => {
169
- const code = normalizeKeys(e);
170
- if (code === Keys.ArrowDown && e.altKey) {
171
- e.stopImmediatePropagation();
172
- this.focusButton = true;
173
- this.button.click();
174
- }
175
- };
176
- addListeners() {
177
- if (this.button) {
178
- this.zone.runOutsideAngular(() => this.button.addEventListener('focus', this.onFocus));
179
- this.zone.runOutsideAngular(() => this.button.addEventListener('blur', this.onBlur));
180
- this.zone.runOutsideAngular(() => this.button.addEventListener('click', this.onClick));
181
- if (this.isSplitButton) {
182
- this.zone.runOutsideAngular(() => this.button.addEventListener('keyup', this.onClick));
183
- }
184
- this.zone.runOutsideAngular(() => this.button.addEventListener('keydown', this.onKeyDown, true));
185
- }
186
- }
187
- removeListeners() {
188
- if (this.button) {
189
- this.zone.runOutsideAngular(() => this.button.removeEventListener('focus', this.onFocus));
190
- this.zone.runOutsideAngular(() => this.button.removeEventListener('blur', this.onBlur));
191
- this.zone.runOutsideAngular(() => this.button.removeEventListener('click', this.onClick));
192
- if (this.isSplitButton) {
193
- this.zone.runOutsideAngular(() => this.button.removeEventListener('keyup', this.onClick));
194
- }
195
- this.zone.runOutsideAngular(() => this.button.removeEventListener('keydown', this.onKeyDown));
196
- }
197
- }
198
- focusToggleButton() {
199
- if (this.focusButton) {
200
- this.zone.runOutsideAngular(() => this.button.focus());
201
- }
202
- this.focusButton = false;
203
- }
204
- returnFocusToToggleButton() {
205
- if (this.isSplitButton) {
206
- this.zone.onStable.pipe(take(1)).subscribe(() => {
207
- this.focusToggleButton();
208
- });
209
- }
210
- else {
211
- this.focusToggleButton();
212
- }
213
- }
214
- // Keeps the `aria-controls` and `aria-expanded` attributes of the main focusable element of the component
215
- // and the toggle button element in sync.
216
- initializeObserver(element) {
217
- const mainFocusableElement = element.querySelector('.k-split-button > .k-button:first-child, .k-input-inner');
218
- const initialExpanded = mainFocusableElement.getAttribute('aria-expanded');
219
- const initialControls = mainFocusableElement.getAttribute('aria-controls');
220
- if (this.button) {
221
- this.renderer.setAttribute(this.button, 'aria-expanded', initialExpanded);
222
- if (initialControls) {
223
- this.renderer.setAttribute(this.button, 'aria-controls', initialControls);
224
- }
225
- }
226
- this.zone.runOutsideAngular(() => {
227
- const mutationConfig = { attributes: true };
228
- const callback = (mutationList) => {
229
- for (const mutation of mutationList) {
230
- if (mutation.attributeName === 'aria-expanded') {
231
- this.renderer.setAttribute(this.button, 'aria-expanded', mainFocusableElement.getAttribute('aria-expanded'));
232
- }
233
- else if (mutation.attributeName === 'aria-controls') {
234
- const controlsRef = mainFocusableElement.getAttribute('aria-controls');
235
- if (!this.isSplitButton && controlsRef) {
236
- this.renderer.setAttribute(this.button, 'aria-controls', controlsRef);
237
- }
238
- else {
239
- this.renderer.removeAttribute(this.button, 'aria-controls');
240
- }
241
- }
242
- }
243
- };
244
- this.observer = new MutationObserver(callback);
245
- this.observer.observe(mainFocusableElement, mutationConfig);
246
- });
247
- }
248
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToggleButtonTabStopDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.MultiTabStop }], target: i0.ɵɵFactoryTarget.Directive });
249
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ToggleButtonTabStopDirective, isStandalone: true, selector: "[kendoToggleButtonTabStop]", inputs: { active: ["kendoToggleButtonTabStop", "active"], toggleButtonAriaLabel: "toggleButtonAriaLabel" }, usesOnChanges: true, ngImport: i0 });
250
- }
251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToggleButtonTabStopDirective, decorators: [{
252
- type: Directive,
253
- args: [{
254
- selector: '[kendoToggleButtonTabStop]',
255
- standalone: true
256
- }]
257
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.MultiTabStop }], propDecorators: { active: [{
258
- type: Input,
259
- args: ['kendoToggleButtonTabStop']
260
- }], toggleButtonAriaLabel: [{
261
- type: Input
262
- }] } });
@@ -1,10 +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 class MultiTabStop {
9
- escape;
10
- }
@@ -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 { ToggleButtonTabStopDirective } from './toggle-button-tab-stop/toggle-button-tab-stop.directive';
6
- export { MultiTabStop } from './toggle-button-tab-stop/toggle-button-tab-stop';
@@ -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 class KendoInput {
6
- }
@@ -1,9 +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 { isChanged } from './is-changed';
6
- /**
7
- * @hidden
8
- */
9
- export const anyChanged = (propertyNames, changes, skipFirstChange = true) => propertyNames.some(name => isChanged(name, changes, skipFirstChange));
@@ -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
- import { detectDesktopBrowser, detectMobileOS } from "@progress/kendo-common";
6
- /**
7
- * @hidden
8
- *
9
- * Returns true if the used browser is Safari.
10
- */
11
- export const isSafari = (userAgent) => {
12
- return detectDesktopBrowser(userAgent).safari ||
13
- (detectMobileOS(userAgent) && detectMobileOS(userAgent).browser === 'mobilesafari');
14
- };
15
- /**
16
- * @hidden
17
- *
18
- * Returns true if the used browser is Firefox.
19
- */
20
- export const isFirefox = (userAgent) => {
21
- const desktopBrowser = detectDesktopBrowser(userAgent);
22
- const mobileOS = detectMobileOS(userAgent);
23
- return desktopBrowser?.mozilla || mobileOS?.browser === 'firefox';
24
- };
25
- /**
26
- * @hidden
27
- */
28
- export const firefoxMaxHeight = 17895697;
@@ -1,20 +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 focusableSelector = [
9
- 'a[href]:not([tabindex^="-"]):not([disabled])',
10
- 'area[href]:not([tabindex^="-"]):not([disabled])',
11
- 'input:not([tabindex^="-"]):not([disabled])',
12
- 'select:not([tabindex^="-"]):not([disabled])',
13
- 'textarea:not([tabindex^="-"]):not([disabled])',
14
- 'button:not([tabindex^="-"]):not([disabled])',
15
- 'iframe:not([tabindex^="-"]):not([disabled])',
16
- 'object:not([tabindex^="-"]):not([disabled])',
17
- 'embed:not([tabindex^="-"]):not([disabled])',
18
- '*[tabindex]:not([tabindex^="-"]):not([disabled])',
19
- '*[contenteditable]:not([tabindex^="-"]):not([disabled]):not([contenteditable="false"])'
20
- ].join(',');
@@ -1,13 +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 isControlRequired = (control) => {
9
- if (!control?.validator) {
10
- return false;
11
- }
12
- return control.validator(control)?.hasOwnProperty('required');
13
- };
@@ -1,27 +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 getterCache = {};
7
- getterCache['undefined'] = () => undefined;
8
- /**
9
- * @hidden
10
- */
11
- export function getter(field) {
12
- if (getterCache[field]) {
13
- return getterCache[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
- getterCache[field] = function (obj) {
20
- let result = obj;
21
- for (let idx = 0; idx < fields.length && result; idx++) {
22
- result = result[fields[idx]];
23
- }
24
- return result;
25
- };
26
- return getterCache[field];
27
- }
@@ -1,29 +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 guid = () => {
9
- let id = "";
10
- for (let i = 0; i < 32; i++) {
11
- const random = Math.random() * 16 | 0; // eslint-disable-line no-bitwise
12
- if (i === 8 || i === 12 || i === 16 || i === 20) {
13
- id += "-";
14
- }
15
- let charValue;
16
- if (i === 12) {
17
- charValue = 4;
18
- }
19
- else if (i === 16) {
20
- // eslint-disable-next-line no-bitwise
21
- charValue = random & 3 | 8;
22
- }
23
- else {
24
- charValue = random;
25
- }
26
- id += charValue.toString(16);
27
- }
28
- return id;
29
- };
@@ -1,8 +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 hasObservers = (emitter) => emitter && emitter.observers.length > 0;
@@ -1,49 +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 { isPresent } from "./ng-class-parser";
6
- import { take } from "rxjs/operators";
7
- /**
8
- * @hidden
9
- */
10
- export const setHTMLAttributes = (attributes, renderer, element, zone) => {
11
- if (zone) {
12
- zone.onStable.pipe(take(1)).subscribe(() => {
13
- applyAttributes(attributes, renderer, element);
14
- });
15
- }
16
- else {
17
- applyAttributes(attributes, renderer, element);
18
- }
19
- };
20
- /**
21
- * @hidden
22
- */
23
- export const removeHTMLAttributes = (attributes, renderer, element) => {
24
- for (const attribute in attributes) {
25
- if (attribute) {
26
- renderer.removeAttribute(element, attribute);
27
- }
28
- }
29
- };
30
- /**
31
- * @hidden
32
- */
33
- export const parseAttributes = (target, source) => {
34
- const targetObj = target;
35
- Object.keys(source).forEach(key => {
36
- delete targetObj[key];
37
- });
38
- return targetObj;
39
- };
40
- /**
41
- * @hidden
42
- */
43
- export const applyAttributes = (attributes, renderer, element) => {
44
- for (const attribute in attributes) {
45
- if (attribute && isPresent(attributes[attribute])) {
46
- renderer.setAttribute(element, attribute, attributes[attribute]);
47
- }
48
- }
49
- };
@@ -1,10 +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 isChanged = (propertyName, changes, skipFirstChange = true) => (typeof changes[propertyName] !== 'undefined' &&
9
- (!changes[propertyName].isFirstChange() || !skipFirstChange) &&
10
- changes[propertyName].previousValue !== changes[propertyName].currentValue);
@@ -1,8 +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 isDocumentAvailable = () => typeof document !== 'undefined';