@skyux/core 11.39.0 → 12.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +600 -536
- package/fesm2022/skyux-core-testing.mjs +26 -26
- package/fesm2022/skyux-core-testing.mjs.map +1 -1
- package/fesm2022/skyux-core.mjs +188 -188
- package/fesm2022/skyux-core.mjs.map +1 -1
- package/lib/modules/content-info-provider/content-info-provider.d.ts +0 -3
- package/lib/modules/dock/dock.service.d.ts +2 -0
- package/package.json +8 -12
- package/esm2022/index.mjs +0 -67
- package/esm2022/lib/modules/adapter-service/adapter.module.mjs +0 -16
- package/esm2022/lib/modules/adapter-service/adapter.service.mjs +0 -205
- package/esm2022/lib/modules/adapter-service/focusable-children-options.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-auto-fit-context.mjs +0 -12
- package/esm2022/lib/modules/affix/affix-config.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-horizontal-alignment.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-offset-change.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-offset.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-placement-change.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-placement.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-position.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-rect.mjs +0 -2
- package/esm2022/lib/modules/affix/affix-utils.mjs +0 -18
- package/esm2022/lib/modules/affix/affix-vertical-alignment.mjs +0 -2
- package/esm2022/lib/modules/affix/affix.directive.mjs +0 -116
- package/esm2022/lib/modules/affix/affix.module.mjs +0 -18
- package/esm2022/lib/modules/affix/affix.service.mjs +0 -48
- package/esm2022/lib/modules/affix/affixer.mjs +0 -426
- package/esm2022/lib/modules/affix/dom-utils.mjs +0 -126
- package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.mjs +0 -2
- package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.token.mjs +0 -7
- package/esm2022/lib/modules/breakpoint-observer/breakpoint-utils.mjs +0 -38
- package/esm2022/lib/modules/breakpoint-observer/breakpoint.mjs +0 -6
- package/esm2022/lib/modules/breakpoint-observer/container-breakpoint-observer.mjs +0 -64
- package/esm2022/lib/modules/breakpoint-observer/media-breakpoint-observer.mjs +0 -58
- package/esm2022/lib/modules/breakpoint-observer/provide-breakpoint-observer.mjs +0 -24
- package/esm2022/lib/modules/breakpoint-observer/responsive-host.directive.mjs +0 -55
- package/esm2022/lib/modules/content-info-provider/content-info-descriptor.mjs +0 -2
- package/esm2022/lib/modules/content-info-provider/content-info-provider.mjs +0 -31
- package/esm2022/lib/modules/content-info-provider/content-info.mjs +0 -2
- package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +0 -26
- package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +0 -81
- package/esm2022/lib/modules/dock/dock-insert-component-config.mjs +0 -2
- package/esm2022/lib/modules/dock/dock-item-config.mjs +0 -2
- package/esm2022/lib/modules/dock/dock-item-reference.mjs +0 -2
- package/esm2022/lib/modules/dock/dock-item.mjs +0 -31
- package/esm2022/lib/modules/dock/dock-location.mjs +0 -19
- package/esm2022/lib/modules/dock/dock-options.mjs +0 -2
- package/esm2022/lib/modules/dock/dock.component.mjs +0 -101
- package/esm2022/lib/modules/dock/dock.module.mjs +0 -15
- package/esm2022/lib/modules/dock/dock.service.mjs +0 -97
- package/esm2022/lib/modules/dock/sort-by-stack-order.mjs +0 -13
- package/esm2022/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -27
- package/esm2022/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -2
- package/esm2022/lib/modules/dynamic-component/dynamic-component.module.mjs +0 -17
- package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -113
- package/esm2022/lib/modules/file-reader/file-reader.service.mjs +0 -32
- package/esm2022/lib/modules/format/app-format.mjs +0 -18
- package/esm2022/lib/modules/help/help-global-options-token.mjs +0 -6
- package/esm2022/lib/modules/help/help-global-options.mjs +0 -2
- package/esm2022/lib/modules/help/help-open-args.mjs +0 -2
- package/esm2022/lib/modules/help/help-update-args.mjs +0 -2
- package/esm2022/lib/modules/help/help.service.mjs +0 -20
- package/esm2022/lib/modules/id/id.directive.mjs +0 -31
- package/esm2022/lib/modules/id/id.module.mjs +0 -16
- package/esm2022/lib/modules/id/id.service.mjs +0 -24
- package/esm2022/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -2
- package/esm2022/lib/modules/layout-host/layout-host.service.mjs +0 -22
- package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +0 -81
- package/esm2022/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -2
- package/esm2022/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -2
- package/esm2022/lib/modules/log/log.module.mjs +0 -16
- package/esm2022/lib/modules/log/log.service.mjs +0 -148
- package/esm2022/lib/modules/log/types/log-deprecation-args.mjs +0 -2
- package/esm2022/lib/modules/log/types/log-level-token.mjs +0 -6
- package/esm2022/lib/modules/log/types/log-level.mjs +0 -10
- package/esm2022/lib/modules/media-query/media-breakpoints.mjs +0 -24
- package/esm2022/lib/modules/media-query/media-query-listener.mjs +0 -2
- package/esm2022/lib/modules/media-query/media-query.module.mjs +0 -16
- package/esm2022/lib/modules/media-query/media-query.service.mjs +0 -82
- package/esm2022/lib/modules/mutation/mutation-observer-service.mjs +0 -19
- package/esm2022/lib/modules/numeric/numeric-symbol.mjs +0 -2
- package/esm2022/lib/modules/numeric/numeric.module.mjs +0 -19
- package/esm2022/lib/modules/numeric/numeric.options.mjs +0 -24
- package/esm2022/lib/modules/numeric/numeric.pipe.mjs +0 -84
- package/esm2022/lib/modules/numeric/numeric.service.mjs +0 -200
- package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +0 -74
- package/esm2022/lib/modules/overlay/overlay-config.mjs +0 -2
- package/esm2022/lib/modules/overlay/overlay-context.mjs +0 -10
- package/esm2022/lib/modules/overlay/overlay-instance.mjs +0 -62
- package/esm2022/lib/modules/overlay/overlay-position.mjs +0 -2
- package/esm2022/lib/modules/overlay/overlay.component.mjs +0 -203
- package/esm2022/lib/modules/overlay/overlay.module.mjs +0 -15
- package/esm2022/lib/modules/overlay/overlay.service.mjs +0 -134
- package/esm2022/lib/modules/percent-pipe/percent-pipe.module.mjs +0 -19
- package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +0 -56
- package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -153
- package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +0 -115
- package/esm2022/lib/modules/screen-reader-label/screen-reader-label.directive.mjs +0 -66
- package/esm2022/lib/modules/scroll-shadow/scroll-shadow-event-args.mjs +0 -2
- package/esm2022/lib/modules/scroll-shadow/scroll-shadow.directive.mjs +0 -123
- package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -223
- package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
- package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +0 -34
- package/esm2022/lib/modules/stacking-context/stacking-context-token.mjs +0 -6
- package/esm2022/lib/modules/stacking-context/stacking-context.mjs +0 -2
- package/esm2022/lib/modules/title/set-title-args.mjs +0 -2
- package/esm2022/lib/modules/title/title.service.mjs +0 -31
- package/esm2022/lib/modules/trim/trim.directive.mjs +0 -64
- package/esm2022/lib/modules/trim/trim.module.mjs +0 -16
- package/esm2022/lib/modules/ui-config/ui-config.service.mjs +0 -21
- package/esm2022/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -2
- package/esm2022/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -2
- package/esm2022/lib/modules/viewkeeper/viewkeeper-host-options.mjs +0 -10
- package/esm2022/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -2
- package/esm2022/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -2
- package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
- package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +0 -296
- package/esm2022/lib/modules/viewkeeper/viewkeeper.module.mjs +0 -16
- package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -39
- package/esm2022/lib/modules/window/window-ref.mjs +0 -30
- package/esm2022/skyux-core.mjs +0 -5
- package/esm2022/testing/legacy/core-testing.module.mjs +0 -32
- package/esm2022/testing/legacy/mock-media-query.service.mjs +0 -47
- package/esm2022/testing/legacy/mock-ui-config.service.mjs +0 -62
- package/esm2022/testing/legacy/resize-observer-mock.mjs +0 -50
- package/esm2022/testing/modules/file-reader/file-reader-testing.service.mjs +0 -19
- package/esm2022/testing/modules/file-reader/provide-file-reader-testing.mjs +0 -22
- package/esm2022/testing/modules/help/help-testing-controller.mjs +0 -28
- package/esm2022/testing/modules/help/help-testing.module.mjs +0 -32
- package/esm2022/testing/modules/help/help-testing.service.mjs +0 -37
- package/esm2022/testing/modules/media-query/breakpoint-observer-testing.mjs +0 -26
- package/esm2022/testing/modules/media-query/media-query-testing-controller.mjs +0 -22
- package/esm2022/testing/modules/media-query/provide-media-query-testing.mjs +0 -26
- package/esm2022/testing/modules/overlay/overlay-harness-filters.mjs +0 -2
- package/esm2022/testing/modules/overlay/overlay-harness.mjs +0 -20
- package/esm2022/testing/public-api.mjs +0 -15
- package/esm2022/testing/shared/component-harness.mjs +0 -13
- package/esm2022/testing/shared/harness-filters.mjs +0 -2
- package/esm2022/testing/shared/harness-utility.mjs +0 -7
- package/esm2022/testing/shared/input-harness.mjs +0 -63
- package/esm2022/testing/shared/queryable-component-harness.mjs +0 -43
- package/esm2022/testing/skyux-core-testing.mjs +0 -5
- package/esm2022/version.mjs +0 -19
@@ -1,153 +0,0 @@
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
2
|
-
import { ReplaySubject, Subject } from 'rxjs';
|
3
|
-
import { takeUntil } from 'rxjs/operators';
|
4
|
-
import { toSkyBreakpoint } from '../breakpoint-observer/breakpoint-utils';
|
5
|
-
import { SkyMediaBreakpoints } from '../media-query/media-breakpoints';
|
6
|
-
import { SkyMediaQueryService } from '../media-query/media-query.service';
|
7
|
-
import { SkyResizeObserverService } from './resize-observer.service';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
const DEFAULT_BREAKPOINT = SkyMediaBreakpoints.md;
|
10
|
-
/**
|
11
|
-
* Acts like `SkyMediaQueryService` for a container element, emitting the same responsive breakpoints.
|
12
|
-
* @deprecated Use the `SkyResponsiveHostDirective` instead.
|
13
|
-
*/
|
14
|
-
export class SkyResizeObserverMediaQueryService extends SkyMediaQueryService {
|
15
|
-
/**
|
16
|
-
* Emits when the breakpoint changes.
|
17
|
-
*/
|
18
|
-
get breakpointChange() {
|
19
|
-
return this.#breakpointChangeObs;
|
20
|
-
}
|
21
|
-
/**
|
22
|
-
* Returns the current breakpoint.
|
23
|
-
* @deprecated Subscribe to the `breakpointChange` observable instead.
|
24
|
-
*/
|
25
|
-
get current() {
|
26
|
-
return this.#currentBreakpoint;
|
27
|
-
}
|
28
|
-
#breakpointChange = new ReplaySubject(1);
|
29
|
-
#breakpointChangeObs = this.#breakpointChange.asObservable();
|
30
|
-
#breakpoints = [
|
31
|
-
{
|
32
|
-
check: (width) => width > 0 && width <= 767,
|
33
|
-
name: SkyMediaBreakpoints.xs,
|
34
|
-
},
|
35
|
-
{
|
36
|
-
check: (width) => width > 767 && width <= 991,
|
37
|
-
name: SkyMediaBreakpoints.sm,
|
38
|
-
},
|
39
|
-
{
|
40
|
-
check: (width) => width > 991 && width <= 1199,
|
41
|
-
name: SkyMediaBreakpoints.md,
|
42
|
-
},
|
43
|
-
{
|
44
|
-
check: (width) => width > 1199,
|
45
|
-
name: SkyMediaBreakpoints.lg,
|
46
|
-
},
|
47
|
-
];
|
48
|
-
#currentBreakpoint = DEFAULT_BREAKPOINT;
|
49
|
-
#currentBreakpointObs = new ReplaySubject(1);
|
50
|
-
#ngUnsubscribe = new Subject();
|
51
|
-
#resizeObserverSvc = inject(SkyResizeObserverService);
|
52
|
-
#target;
|
53
|
-
ngOnDestroy() {
|
54
|
-
this.unobserve();
|
55
|
-
this.#target = undefined;
|
56
|
-
this.#currentBreakpointObs.complete();
|
57
|
-
this.#breakpointChange.complete();
|
58
|
-
}
|
59
|
-
/**
|
60
|
-
* @internal
|
61
|
-
*/
|
62
|
-
destroy() {
|
63
|
-
this.ngOnDestroy();
|
64
|
-
}
|
65
|
-
/**
|
66
|
-
* Sets the container element to watch. The `SkyResizeObserverMediaQueryService` will only observe one element at a
|
67
|
-
* time. Any previous subscriptions will be unsubscribed when a new element is observed.
|
68
|
-
*/
|
69
|
-
observe(element, options) {
|
70
|
-
if (this.#target) {
|
71
|
-
if (this.#target === element) {
|
72
|
-
return this;
|
73
|
-
}
|
74
|
-
this.unobserve();
|
75
|
-
}
|
76
|
-
this.#target = element;
|
77
|
-
this.#checkWidth(element, options?.updateResponsiveClasses);
|
78
|
-
this.#resizeObserverSvc
|
79
|
-
.observe(element)
|
80
|
-
.pipe(takeUntil(this.#ngUnsubscribe))
|
81
|
-
.subscribe((value) => {
|
82
|
-
const breakpoint = this.#checkBreakpoint(value.contentRect.width);
|
83
|
-
if (breakpoint) {
|
84
|
-
this.#updateBreakpoint(breakpoint, options?.updateResponsiveClasses);
|
85
|
-
}
|
86
|
-
});
|
87
|
-
return this;
|
88
|
-
}
|
89
|
-
/**
|
90
|
-
* Stop watching the container element and remove any added classes.
|
91
|
-
*/
|
92
|
-
unobserve() {
|
93
|
-
this.#removeResponsiveClasses();
|
94
|
-
this.#ngUnsubscribe.next();
|
95
|
-
this.#ngUnsubscribe.complete();
|
96
|
-
}
|
97
|
-
/**
|
98
|
-
* Subscribes to element size changes that cross breakpoints.
|
99
|
-
*/
|
100
|
-
subscribe(listener) {
|
101
|
-
return this.#currentBreakpointObs
|
102
|
-
.pipe(takeUntil(this.#ngUnsubscribe))
|
103
|
-
.subscribe((value) => {
|
104
|
-
listener(value);
|
105
|
-
});
|
106
|
-
}
|
107
|
-
#updateBreakpoint(breakpoint, updateResponsiveClasses) {
|
108
|
-
if (updateResponsiveClasses) {
|
109
|
-
this.#updateResponsiveClasses(this.current, breakpoint);
|
110
|
-
}
|
111
|
-
if (this.current !== breakpoint) {
|
112
|
-
this.#currentBreakpointObs.next(breakpoint);
|
113
|
-
const breakpointType = toSkyBreakpoint(breakpoint);
|
114
|
-
this.#breakpointChange.next(breakpointType);
|
115
|
-
}
|
116
|
-
this.#currentBreakpoint = breakpoint;
|
117
|
-
}
|
118
|
-
#updateResponsiveClasses(oldBreakpoint, newBreakpoint) {
|
119
|
-
const oldClass = this.#getClassForBreakpoint(oldBreakpoint);
|
120
|
-
const newClass = this.#getClassForBreakpoint(newBreakpoint);
|
121
|
-
const targetClassList = this.#target?.nativeElement?.classList;
|
122
|
-
targetClassList?.remove(oldClass);
|
123
|
-
targetClassList?.add(newClass);
|
124
|
-
}
|
125
|
-
#removeResponsiveClasses() {
|
126
|
-
for (const breakpoint of Object.values(SkyMediaBreakpoints)) {
|
127
|
-
if (typeof breakpoint === 'number') {
|
128
|
-
const className = this.#getClassForBreakpoint(breakpoint);
|
129
|
-
this.#target?.nativeElement?.classList?.remove(className);
|
130
|
-
}
|
131
|
-
}
|
132
|
-
}
|
133
|
-
#getClassForBreakpoint(breakpoint) {
|
134
|
-
return `sky-responsive-container-${SkyMediaBreakpoints[breakpoint]}`;
|
135
|
-
}
|
136
|
-
#checkBreakpoint(width) {
|
137
|
-
const breakpoint = this.#breakpoints.find((breakpoint) => breakpoint.check(width));
|
138
|
-
return breakpoint ? breakpoint.name : undefined;
|
139
|
-
}
|
140
|
-
#checkWidth(el, updateResponsiveClasses) {
|
141
|
-
const width = el.nativeElement.offsetWidth || 0;
|
142
|
-
const breakpoint = this.#checkBreakpoint(width);
|
143
|
-
if (breakpoint) {
|
144
|
-
this.#updateBreakpoint(breakpoint, updateResponsiveClasses);
|
145
|
-
}
|
146
|
-
}
|
147
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverMediaQueryService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
148
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverMediaQueryService }); }
|
149
|
-
}
|
150
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverMediaQueryService, decorators: [{
|
151
|
-
type: Injectable
|
152
|
-
}] });
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLW1lZGlhLXF1ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1tZWRpYS1xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUVyRSxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztBQUVsRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sa0NBQ1gsU0FBUSxvQkFBb0I7SUFHNUI7O09BRUc7SUFDSCxJQUFvQixnQkFBZ0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQW9CLE9BQU87UUFDekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGlCQUFpQixHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQztJQUN4RCxvQkFBb0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFN0Qs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QUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUUxRCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQStCO1FBQ3BELE9BQU8sNEJBQTRCLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDdkUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUN2RCxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQWMsRUFBRSx1QkFBaUM7UUFDM0QsTUFBTSxLQUFLLEdBQUksRUFBRSxDQUFDLGFBQTZCLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQzsrR0FyTFUsa0NBQWtDO21IQUFsQyxrQ0FBa0M7OzRGQUFsQyxrQ0FBa0M7a0JBRDlDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5QnJlYWtwb2ludCB9IGZyb20gJy4uL2JyZWFrcG9pbnQtb2JzZXJ2ZXIvYnJlYWtwb2ludCc7XG5pbXBvcnQgeyB0b1NreUJyZWFrcG9pbnQgfSBmcm9tICcuLi9icmVha3BvaW50LW9ic2VydmVyL2JyZWFrcG9pbnQtdXRpbHMnO1xuaW1wb3J0IHsgU2t5TWVkaWFCcmVha3BvaW50cyB9IGZyb20gJy4uL21lZGlhLXF1ZXJ5L21lZGlhLWJyZWFrcG9pbnRzJztcbmltcG9ydCB7IFNreU1lZGlhUXVlcnlMaXN0ZW5lciB9IGZyb20gJy4uL21lZGlhLXF1ZXJ5L21lZGlhLXF1ZXJ5LWxpc3RlbmVyJztcbmltcG9ydCB7IFNreU1lZGlhUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vbWVkaWEtcXVlcnkvbWVkaWEtcXVlcnkuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreVJlc2l6ZU9ic2VydmVyU2VydmljZSB9IGZyb20gJy4vcmVzaXplLW9ic2VydmVyLnNlcnZpY2UnO1xuXG5jb25zdCBERUZBVUxUX0JSRUFLUE9JTlQgPSBTa3lNZWRpYUJyZWFrcG9pbnRzLm1kO1xuXG4vKipcbiAqIEFjdHMgbGlrZSBgU2t5TWVkaWFRdWVyeVNlcnZpY2VgIGZvciBhIGNvbnRhaW5lciBlbGVtZW50LCBlbWl0dGluZyB0aGUgc2FtZSByZXNwb25zaXZlIGJyZWFrcG9pbnRzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgU2t5UmVzcG9uc2l2ZUhvc3REaXJlY3RpdmVgIGluc3RlYWQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lSZXNpemVPYnNlcnZlck1lZGlhUXVlcnlTZXJ2aWNlXG4gIGV4dGVuZHMgU2t5TWVkaWFRdWVyeVNlcnZpY2VcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gdGhlIGJyZWFrcG9pbnQgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgYnJlYWtwb2ludENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUJyZWFrcG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy4jYnJlYWtwb2ludENoYW5nZU9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuXG4gICAqIEBkZXByZWNhdGVkIFN1YnNjcmliZSB0byB0aGUgYGJyZWFrcG9pbnRDaGFuZ2VgIG9ic2VydmFibGUgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgY3VycmVudCgpOiBTa3lNZWRpYUJyZWFrcG9pbnRzIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudEJyZWFrcG9pbnQ7XG4gIH1cblxuICAjYnJlYWtwb2ludENoYW5nZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFNreUJyZWFrcG9pbnQ+KDEpO1xuICAjYnJlYWtwb2ludENoYW5nZU9icyA9IHRoaXMuI2JyZWFrcG9pbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgI2JyZWFrcG9pbnRzOiB7XG4gICAgY2hlY2s6ICh3aWR0aDogbnVtYmVyKSA9PiBib29sZWFuO1xuICAgIG5hbWU6IFNreU1lZGlhQnJlYWtwb2ludHM7XG4gIH1bXSA9IFtcbiAgICB7XG4gICAgICBjaGVjazogKHdpZHRoOiBudW1iZXIpOiBib29sZWFuID0+IHdpZHRoID4gMCAmJiB3aWR0aCA8PSA3NjcsXG4gICAgICBuYW1lOiBTa3lNZWRpYUJyZWFrcG9pbnRzLnhzLFxuICAgIH0sXG4gICAge1xuICAgICAgY2hlY2s6ICh3aWR0aDogbnVtYmVyKTogYm9vbGVhbiA9PiB3aWR0aCA+IDc2NyAmJiB3aWR0aCA8PSA5OTEsXG4gICAgICBuYW1lOiBTa3lNZWRpYUJyZWFrcG9pbnRzLnNtLFxuICAgIH0sXG4gICAge1xuICAgICAgY2hlY2s6ICh3aWR0aDogbnVtYmVyKTogYm9vbGVhbiA9PiB3aWR0aCA+IDk5MSAmJiB3aWR0aCA8PSAxMTk5LFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy5tZCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNoZWNrOiAod2lkdGg6IG51bWJlcik6IGJvb2xlYW4gPT4gd2lkdGggPiAxMTk5LFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy5sZyxcbiAgICB9LFxuICBdO1xuXG4gICNjdXJyZW50QnJlYWtwb2ludDogU2t5TWVkaWFCcmVha3BvaW50cyA9IERFRkFVTFRfQlJFQUtQT0lOVDtcblxuICAjY3VycmVudEJyZWFrcG9pbnRPYnMgPSBuZXcgUmVwbGF5U3ViamVjdDxTa3lNZWRpYUJyZWFrcG9pbnRzPigxKTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI3Jlc2l6ZU9ic2VydmVyU3ZjID0gaW5qZWN0KFNreVJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG5cbiAgI3RhcmdldDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bm9ic2VydmUoKTtcblxuICAgIHRoaXMuI3RhcmdldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNjdXJyZW50QnJlYWtwb2ludE9icy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2JyZWFrcG9pbnRDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb250YWluZXIgZWxlbWVudCB0byB3YXRjaC4gVGhlIGBTa3lSZXNpemVPYnNlcnZlck1lZGlhUXVlcnlTZXJ2aWNlYCB3aWxsIG9ubHkgb2JzZXJ2ZSBvbmUgZWxlbWVudCBhdCBhXG4gICAqIHRpbWUuIEFueSBwcmV2aW91cyBzdWJzY3JpcHRpb25zIHdpbGwgYmUgdW5zdWJzY3JpYmVkIHdoZW4gYSBuZXcgZWxlbWVudCBpcyBvYnNlcnZlZC5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHVwZGF0ZVJlc3BvbnNpdmVDbGFzc2VzPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBTa3lSZXNpemVPYnNlcnZlck1lZGlhUXVlcnlTZXJ2aWNlIHtcbiAgICBpZiAodGhpcy4jdGFyZ2V0KSB7XG4gICAgICBpZiAodGhpcy4jdGFyZ2V0ID09PSBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVub2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuI3RhcmdldCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLiNjaGVja1dpZHRoKGVsZW1lbnQsIG9wdGlvbnM/LnVwZGF0ZVJlc3BvbnNpdmVDbGFzc2VzKTtcblxuICAgIHRoaXMuI3Jlc2l6ZU9ic2VydmVyU3ZjXG4gICAgICAub2JzZXJ2ZShlbGVtZW50KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IHRoaXMuI2NoZWNrQnJlYWtwb2ludCh2YWx1ZS5jb250ZW50UmVjdC53aWR0aCk7XG4gICAgICAgIGlmIChicmVha3BvaW50KSB7XG4gICAgICAgICAgdGhpcy4jdXBkYXRlQnJlYWtwb2ludChicmVha3BvaW50LCBvcHRpb25zPy51cGRhdGVSZXNwb25zaXZlQ2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3Agd2F0Y2hpbmcgdGhlIGNvbnRhaW5lciBlbGVtZW50IGFuZCByZW1vdmUgYW55IGFkZGVkIGNsYXNzZXMuXG4gICAqL1xuICBwdWJsaWMgdW5vYnNlcnZlKCk6IHZvaWQge1xuICAgIHRoaXMuI3JlbW92ZVJlc3BvbnNpdmVDbGFzc2VzKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gZWxlbWVudCBzaXplIGNoYW5nZXMgdGhhdCBjcm9zcyBicmVha3BvaW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzdWJzY3JpYmUobGlzdGVuZXI6IFNreU1lZGlhUXVlcnlMaXN0ZW5lcik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRCcmVha3BvaW50T2JzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVCcmVha3BvaW50KFxuICAgIGJyZWFrcG9pbnQ6IFNreU1lZGlhQnJlYWtwb2ludHMsXG4gICAgdXBkYXRlUmVzcG9uc2l2ZUNsYXNzZXM/OiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBpZiAodXBkYXRlUmVzcG9uc2l2ZUNsYXNzZXMpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZVJlc3BvbnNpdmVDbGFzc2VzKHRoaXMuY3VycmVudCwgYnJlYWtwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCAhPT0gYnJlYWtwb2ludCkge1xuICAgICAgdGhpcy4jY3VycmVudEJyZWFrcG9pbnRPYnMubmV4dChicmVha3BvaW50KTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRUeXBlID0gdG9Ta3lCcmVha3BvaW50KGJyZWFrcG9pbnQpO1xuICAgICAgdGhpcy4jYnJlYWtwb2ludENoYW5nZS5uZXh0KGJyZWFrcG9pbnRUeXBlKTtcbiAgICB9XG4gICAgdGhpcy4jY3VycmVudEJyZWFrcG9pbnQgPSBicmVha3BvaW50O1xuICB9XG5cbiAgI3VwZGF0ZVJlc3BvbnNpdmVDbGFzc2VzKFxuICAgIG9sZEJyZWFrcG9pbnQ6IFNreU1lZGlhQnJlYWtwb2ludHMsXG4gICAgbmV3QnJlYWtwb2ludDogU2t5TWVkaWFCcmVha3BvaW50cyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkQ2xhc3MgPSB0aGlzLiNnZXRDbGFzc0ZvckJyZWFrcG9pbnQob2xkQnJlYWtwb2ludCk7XG4gICAgY29uc3QgbmV3Q2xhc3MgPSB0aGlzLiNnZXRDbGFzc0ZvckJyZWFrcG9pbnQobmV3QnJlYWtwb2ludCk7XG5cbiAgICBjb25zdCB0YXJnZXRDbGFzc0xpc3QgPSB0aGlzLiN0YXJnZXQ/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdDtcblxuICAgIHRhcmdldENsYXNzTGlzdD8ucmVtb3ZlKG9sZENsYXNzKTtcbiAgICB0YXJnZXRDbGFzc0xpc3Q/LmFkZChuZXdDbGFzcyk7XG4gIH1cblxuICAjcmVtb3ZlUmVzcG9uc2l2ZUNsYXNzZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBicmVha3BvaW50IG9mIE9iamVjdC52YWx1ZXMoU2t5TWVkaWFCcmVha3BvaW50cykpIHtcbiAgICAgIGlmICh0eXBlb2YgYnJlYWtwb2ludCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy4jZ2V0Q2xhc3NGb3JCcmVha3BvaW50KGJyZWFrcG9pbnQpO1xuXG4gICAgICAgIHRoaXMuI3RhcmdldD8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0Py5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjZ2V0Q2xhc3NGb3JCcmVha3BvaW50KGJyZWFrcG9pbnQ6IFNreU1lZGlhQnJlYWtwb2ludHMpOiBzdHJpbmcge1xuICAgIHJldHVybiBgc2t5LXJlc3BvbnNpdmUtY29udGFpbmVyLSR7U2t5TWVkaWFCcmVha3BvaW50c1ticmVha3BvaW50XX1gO1xuICB9XG5cbiAgI2NoZWNrQnJlYWtwb2ludCh3aWR0aDogbnVtYmVyKTogU2t5TWVkaWFCcmVha3BvaW50cyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYnJlYWtwb2ludCA9IHRoaXMuI2JyZWFrcG9pbnRzLmZpbmQoKGJyZWFrcG9pbnQpID0+XG4gICAgICBicmVha3BvaW50LmNoZWNrKHdpZHRoKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGJyZWFrcG9pbnQgPyBicmVha3BvaW50Lm5hbWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAjY2hlY2tXaWR0aChlbDogRWxlbWVudFJlZiwgdXBkYXRlUmVzcG9uc2l2ZUNsYXNzZXM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgd2lkdGggPSAoZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGggfHwgMDtcbiAgICBjb25zdCBicmVha3BvaW50ID0gdGhpcy4jY2hlY2tCcmVha3BvaW50KHdpZHRoKTtcblxuICAgIGlmIChicmVha3BvaW50KSB7XG4gICAgICB0aGlzLiN1cGRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQsIHVwZGF0ZVJlc3BvbnNpdmVDbGFzc2VzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
@@ -1,115 +0,0 @@
|
|
1
|
-
import { ApplicationRef, Injectable, NgZone, inject, } from '@angular/core';
|
2
|
-
import { Observable, Subject, animationFrames, distinctUntilChanged, filter, map, shareReplay, take, takeUntil, throttle, } from 'rxjs';
|
3
|
-
import { SkyAppWindowRef } from '../window/window-ref';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
const errorTest = /ResizeObserver loop completed with undelivered notifications/i;
|
6
|
-
let errorLogRegistered = false;
|
7
|
-
let originalOnError = undefined;
|
8
|
-
const errorHandler = (event) => {
|
9
|
-
if (errorTest.test(event.message)) {
|
10
|
-
event.stopImmediatePropagation();
|
11
|
-
event.stopPropagation();
|
12
|
-
event.preventDefault();
|
13
|
-
return false;
|
14
|
-
}
|
15
|
-
return undefined;
|
16
|
-
};
|
17
|
-
const onError = (event) => {
|
18
|
-
const message = typeof event === 'string' ? event : event.message;
|
19
|
-
// This is necessary to prevent the test runner from failing on errors, but challenging to reliably test.
|
20
|
-
/* istanbul ignore next */
|
21
|
-
if (errorTest.test(message)) {
|
22
|
-
if (event instanceof ErrorEvent) {
|
23
|
-
event.stopImmediatePropagation();
|
24
|
-
event.stopPropagation();
|
25
|
-
event.preventDefault();
|
26
|
-
}
|
27
|
-
return false;
|
28
|
-
}
|
29
|
-
return originalOnError?.call(window, event);
|
30
|
-
};
|
31
|
-
/**
|
32
|
-
* Service to create rxjs observables for changes to the content box dimensions of elements.
|
33
|
-
*/
|
34
|
-
export class SkyResizeObserverService {
|
35
|
-
#ngUnsubscribe = new Subject();
|
36
|
-
#resizeObserver = new ResizeObserver((entries) => this.#resizeSubject.next(entries));
|
37
|
-
#resizeSubject = new Subject();
|
38
|
-
#tracking = new Map();
|
39
|
-
#window = inject(SkyAppWindowRef);
|
40
|
-
#zone = inject(NgZone);
|
41
|
-
constructor() {
|
42
|
-
this.#expectWindowError();
|
43
|
-
// Because the resize observer is a native browser API, it does not shut down
|
44
|
-
// synchronously when the service is destroyed. Leave the error handling
|
45
|
-
// accommodation in place until the application is destroyed. This also works
|
46
|
-
// for the test runner.
|
47
|
-
inject(ApplicationRef).onDestroy(() => this.#resetWindowError());
|
48
|
-
}
|
49
|
-
ngOnDestroy() {
|
50
|
-
this.#ngUnsubscribe.next();
|
51
|
-
this.#ngUnsubscribe.complete();
|
52
|
-
this.#resizeObserver.disconnect();
|
53
|
-
}
|
54
|
-
/**
|
55
|
-
* Create rxjs observable to get size changes for an element ref.
|
56
|
-
*/
|
57
|
-
observe(element) {
|
58
|
-
const checkTracking = this.#tracking.has(element.nativeElement);
|
59
|
-
if (!checkTracking) {
|
60
|
-
this.#tracking.set(element.nativeElement, new Observable((observer) => {
|
61
|
-
const subscription = this.#resizeSubject.subscribe(observer);
|
62
|
-
this.#resizeObserver?.observe(element.nativeElement);
|
63
|
-
return () => {
|
64
|
-
this.#resizeObserver?.unobserve(element.nativeElement);
|
65
|
-
subscription.unsubscribe();
|
66
|
-
this.#tracking.delete(element.nativeElement);
|
67
|
-
};
|
68
|
-
}).pipe(filter(Boolean), filter((entries) => entries.some((entry) => entry.target === element.nativeElement)), map((entries) => entries.find((entry) => entry.target === element.nativeElement)),
|
69
|
-
// Ignore subpixel changes.
|
70
|
-
distinctUntilChanged((a, b) => Math.round(a.contentRect.width) ===
|
71
|
-
Math.round(b.contentRect.width) &&
|
72
|
-
Math.round(a.contentRect.height) ===
|
73
|
-
Math.round(b.contentRect.height)),
|
74
|
-
// Emit the last value for late subscribers. Track references so it
|
75
|
-
// un-observes when all subscribers are gone.
|
76
|
-
shareReplay({ bufferSize: 1, refCount: true }),
|
77
|
-
// Only emit prior to an animation frame to prevent layout thrashing.
|
78
|
-
throttle(() => animationFrames().pipe(take(1)), {
|
79
|
-
leading: false,
|
80
|
-
trailing: true,
|
81
|
-
}), takeUntil(this.#ngUnsubscribe)));
|
82
|
-
}
|
83
|
-
return this.#tracking.get(element.nativeElement);
|
84
|
-
}
|
85
|
-
#expectWindowError() {
|
86
|
-
if (!errorLogRegistered) {
|
87
|
-
errorLogRegistered = true;
|
88
|
-
// ResizeObserver throws an error when it is disconnected while it is
|
89
|
-
// still observing an element. When an element is no longer observed, this
|
90
|
-
// is not a concern.
|
91
|
-
this.#zone.runOutsideAngular(() => this.#window.nativeWindow.addEventListener('error', errorHandler));
|
92
|
-
}
|
93
|
-
if (this.#window.nativeWindow.onerror !== onError) {
|
94
|
-
originalOnError = this.#window.nativeWindow.onerror;
|
95
|
-
this.#window.nativeWindow.onerror = onError;
|
96
|
-
}
|
97
|
-
}
|
98
|
-
#resetWindowError() {
|
99
|
-
this.#window.nativeWindow.removeEventListener('error', errorHandler);
|
100
|
-
if (originalOnError) {
|
101
|
-
this.#window.nativeWindow.onerror = originalOnError;
|
102
|
-
originalOnError = undefined;
|
103
|
-
}
|
104
|
-
errorLogRegistered = false;
|
105
|
-
}
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
107
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverService, providedIn: 'root' }); }
|
108
|
-
}
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyResizeObserverService, decorators: [{
|
110
|
-
type: Injectable,
|
111
|
-
args: [{
|
112
|
-
providedIn: 'root',
|
113
|
-
}]
|
114
|
-
}], ctorParameters: () => [] });
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBRWQsVUFBVSxFQUNWLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFdkQsTUFBTSxTQUFTLEdBQ2IsK0RBQStELENBQUM7QUFDbEUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsSUFBSSxlQUFlLEdBRUgsU0FBUyxDQUFDO0FBRTFCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBdUIsRUFBRTtJQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQTBCLEVBQXVCLEVBQUU7SUFDbEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxD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LElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FDbEUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1lBQ3BELGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztRQUNELGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDOytHQXRHVSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBhbmltYXRpb25GcmFtZXMsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGhyb3R0bGUsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lBcHBXaW5kb3dSZWYgfSBmcm9tICcuLi93aW5kb3cvd2luZG93LXJlZic7XG5cbmNvbnN0IGVycm9yVGVzdCA9XG4gIC9SZXNpemVPYnNlcnZlciBsb29wIGNvbXBsZXRlZCB3aXRoIHVuZGVsaXZlcmVkIG5vdGlmaWNhdGlvbnMvaTtcbmxldCBlcnJvckxvZ1JlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBvcmlnaW5hbE9uRXJyb3I6XG4gIHwgKChldmVudDogc3RyaW5nIHwgRXZlbnQpID0+IGJvb2xlYW4gfCB1bmRlZmluZWQpXG4gIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5jb25zdCBlcnJvckhhbmRsZXIgPSAoZXZlbnQ6IEVycm9yRXZlbnQpOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGVycm9yVGVzdC50ZXN0KGV2ZW50Lm1lc3NhZ2UpKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IG9uRXJyb3IgPSAoZXZlbnQ6IHN0cmluZyB8IEVycm9yRXZlbnQpOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgPyBldmVudCA6IGV2ZW50Lm1lc3NhZ2U7XG4gIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIHRlc3QgcnVubmVyIGZyb20gZmFpbGluZyBvbiBlcnJvcnMsIGJ1dCBjaGFsbGVuZ2luZyB0byByZWxpYWJseSB0ZXN0LlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoZXJyb3JUZXN0LnRlc3QobWVzc2FnZSkpIHtcbiAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvcmlnaW5hbE9uRXJyb3I/LmNhbGwod2luZG93LCBldmVudCk7XG59O1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gY3JlYXRlIHJ4anMgb2JzZXJ2YWJsZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGNvbnRlbnQgYm94IGRpbWVuc2lvbnMgb2YgZWxlbWVudHMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXNpemVPYnNlcnZlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZWFkb25seSAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5ICNyZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT5cbiAgICB0aGlzLiNyZXNpemVTdWJqZWN0Lm5leHQoZW50cmllcyksXG4gICk7XG4gIHJlYWRvbmx5ICNyZXNpemVTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPigpO1xuICByZWFkb25seSAjdHJhY2tpbmcgPSBuZXcgTWFwPEVsZW1lbnQsIE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT4+KCk7XG4gIHJlYWRvbmx5ICN3aW5kb3cgPSBpbmplY3QoU2t5QXBwV2luZG93UmVmKTtcbiAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNleHBlY3RXaW5kb3dFcnJvcigpO1xuICAgIC8vIEJlY2F1c2UgdGhlIHJlc2l6ZSBvYnNlcnZlciBpcyBhIG5hdGl2ZSBicm93c2VyIEFQSSwgaXQgZG9lcyBub3Qgc2h1dCBkb3duXG4gICAgLy8gc3luY2hyb25vdXNseSB3aGVuIHRoZSBzZXJ2aWNlIGlzIGRlc3Ryb3llZC4gTGVhdmUgdGhlIGVycm9yIGhhbmRsaW5nXG4gICAgLy8gYWNjb21tb2RhdGlvbiBpbiBwbGFjZSB1bnRpbCB0aGUgYXBwbGljYXRpb24gaXMgZGVzdHJveWVkLiBUaGlzIGFsc28gd29ya3NcbiAgICAvLyBmb3IgdGhlIHRlc3QgcnVubmVyLlxuICAgIGluamVjdChBcHBsaWNhdGlvblJlZikub25EZXN0cm95KCgpID0+IHRoaXMuI3Jlc2V0V2luZG93RXJyb3IoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcnhqcyBvYnNlcnZhYmxlIHRvIGdldCBzaXplIGNoYW5nZXMgZm9yIGFuIGVsZW1lbnQgcmVmLlxuICAgKi9cbiAgcHVibGljIG9ic2VydmUoZWxlbWVudDogRWxlbWVudFJlZik6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT4ge1xuICAgIGNvbnN0IGNoZWNrVHJhY2tpbmcgPSB0aGlzLiN0cmFja2luZy5oYXMoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICghY2hlY2tUcmFja2luZykge1xuICAgICAgdGhpcy4jdHJhY2tpbmcuc2V0KFxuICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG5ldyBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy4jcmVzaXplU3ViamVjdC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgICAgIHRoaXMuI3Jlc2l6ZU9ic2VydmVyPy5vYnNlcnZlKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI3Jlc2l6ZU9ic2VydmVyPy51bm9ic2VydmUoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy4jdHJhY2tpbmcuZGVsZXRlKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgICAgICAgZmlsdGVyKChlbnRyaWVzKSA9PlxuICAgICAgICAgICAgZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICksXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+XG4gICAgICAgICAgICAgIGVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAoZW50cnkpID0+IGVudHJ5LnRhcmdldCA9PT0gZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICApIGFzIFJlc2l6ZU9ic2VydmVyRW50cnksXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvLyBJZ25vcmUgc3VicGl4ZWwgY2hhbmdlcy5cbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGEuY29udGVudFJlY3Qud2lkdGgpID09PVxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYi5jb250ZW50UmVjdC53aWR0aCkgJiZcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChhLmNvbnRlbnRSZWN0LmhlaWdodCkgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiLmNvbnRlbnRSZWN0LmhlaWdodCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvLyBFbWl0IHRoZSBsYXN0IHZhbHVlIGZvciBsYXRlIHN1YnNjcmliZXJzLiBUcmFjayByZWZlcmVuY2VzIHNvIGl0XG4gICAgICAgICAgLy8gdW4tb2JzZXJ2ZXMgd2hlbiBhbGwgc3Vic2NyaWJlcnMgYXJlIGdvbmUuXG4gICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICAgICAgICAvLyBPbmx5IGVtaXQgcHJpb3IgdG8gYW4gYW5pbWF0aW9uIGZyYW1lIHRvIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgICAgICB0aHJvdHRsZSgoKSA9PiBhbmltYXRpb25GcmFtZXMoKS5waXBlKHRha2UoMSkpLCB7XG4gICAgICAgICAgICBsZWFkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHRyYWlsaW5nOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI3RyYWNraW5nLmdldChcbiAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICApIGFzIE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT47XG4gIH1cblxuICAjZXhwZWN0V2luZG93RXJyb3IoKTogdm9pZCB7XG4gICAgaWYgKCFlcnJvckxvZ1JlZ2lzdGVyZWQpIHtcbiAgICAgIGVycm9yTG9nUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgICAvLyBSZXNpemVPYnNlcnZlciB0aHJvd3MgYW4gZXJyb3Igd2hlbiBpdCBpcyBkaXNjb25uZWN0ZWQgd2hpbGUgaXQgaXNcbiAgICAgIC8vIHN0aWxsIG9ic2VydmluZyBhbiBlbGVtZW50LiBXaGVuIGFuIGVsZW1lbnQgaXMgbm8gbG9uZ2VyIG9ic2VydmVkLCB0aGlzXG4gICAgICAvLyBpcyBub3QgYSBjb25jZXJuLlxuICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICB0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JIYW5kbGVyKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93Lm9uZXJyb3IgIT09IG9uRXJyb3IpIHtcbiAgICAgIG9yaWdpbmFsT25FcnJvciA9IHRoaXMuI3dpbmRvdy5uYXRpdmVXaW5kb3cub25lcnJvcjtcbiAgICAgIHRoaXMuI3dpbmRvdy5uYXRpdmVXaW5kb3cub25lcnJvciA9IG9uRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0V2luZG93RXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9ySGFuZGxlcik7XG4gICAgaWYgKG9yaWdpbmFsT25FcnJvcikge1xuICAgICAgdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5vbmVycm9yID0gb3JpZ2luYWxPbkVycm9yO1xuICAgICAgb3JpZ2luYWxPbkVycm9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlcnJvckxvZ1JlZ2lzdGVyZWQgPSBmYWxzZTtcbiAgfVxufVxuIl19
|
@@ -1,66 +0,0 @@
|
|
1
|
-
import { Directive, ElementRef, Input, Renderer2, inject, } from '@angular/core';
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
const SCREEN_READER_LABELS_CONTAINER_ID = 'sky-screen-reader-labels-container';
|
4
|
-
/**
|
5
|
-
* Adds the element to a screen reader only section of the body.
|
6
|
-
* This prevents components' DOM from including text only intended for screen readers.
|
7
|
-
*
|
8
|
-
* @internal
|
9
|
-
*/
|
10
|
-
export class SkyScreenReaderLabelDirective {
|
11
|
-
ngOnDestroy() {
|
12
|
-
this.#removeLabelEl();
|
13
|
-
}
|
14
|
-
/**
|
15
|
-
* Indicates if the label should be created in the DOM.
|
16
|
-
* @default false
|
17
|
-
*/
|
18
|
-
set createLabel(value) {
|
19
|
-
this.#_createLabel = value ?? false;
|
20
|
-
this.#updateLabelEl();
|
21
|
-
}
|
22
|
-
get createLabel() {
|
23
|
-
return this.#_createLabel;
|
24
|
-
}
|
25
|
-
#elementRef = inject(ElementRef);
|
26
|
-
#renderer = inject(Renderer2);
|
27
|
-
#_createLabel = false;
|
28
|
-
#updateLabelEl() {
|
29
|
-
if (this.createLabel) {
|
30
|
-
const containerEl = this.#getContainerEl() || this.#createContainerEl();
|
31
|
-
this.#renderer.appendChild(containerEl, this.#elementRef.nativeElement);
|
32
|
-
}
|
33
|
-
else {
|
34
|
-
this.#removeLabelEl();
|
35
|
-
}
|
36
|
-
}
|
37
|
-
#getContainerEl() {
|
38
|
-
return document.getElementById(SCREEN_READER_LABELS_CONTAINER_ID);
|
39
|
-
}
|
40
|
-
#createContainerEl() {
|
41
|
-
const el = document.createElement('div');
|
42
|
-
el.id = SCREEN_READER_LABELS_CONTAINER_ID;
|
43
|
-
el.style.display = 'none';
|
44
|
-
this.#renderer.appendChild(document.body, el);
|
45
|
-
return el;
|
46
|
-
}
|
47
|
-
#removeLabelEl() {
|
48
|
-
const containerEl = this.#getContainerEl();
|
49
|
-
this.#elementRef.nativeElement.remove();
|
50
|
-
if (containerEl && containerEl.childNodes.length === 0) {
|
51
|
-
containerEl.remove();
|
52
|
-
}
|
53
|
-
}
|
54
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyScreenReaderLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
55
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: SkyScreenReaderLabelDirective, isStandalone: true, selector: "[skyScreenReaderLabel]", inputs: { createLabel: "createLabel" }, ngImport: i0 }); }
|
56
|
-
}
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyScreenReaderLabelDirective, decorators: [{
|
58
|
-
type: Directive,
|
59
|
-
args: [{
|
60
|
-
selector: '[skyScreenReaderLabel]',
|
61
|
-
standalone: true,
|
62
|
-
}]
|
63
|
-
}], propDecorators: { createLabel: [{
|
64
|
-
type: Input
|
65
|
-
}] } });
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLXJlYWRlci1sYWJlbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvc2NyZWVuLXJlYWRlci1sYWJlbC9zY3JlZW4tcmVhZGVyLWxhYmVsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7QUFFdkIsTUFBTSxpQ0FBaUMsR0FBRyxvQ0FBb0MsQ0FBQztBQUUvRTs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyw2QkFBNkI7SUFDakMsV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csV0FBVyxDQUFDLEtBQTBCO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVRLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsaUNBQWlDLENBQUM7UUFDMUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRTFCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV4QyxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7K0dBdkRVLDZCQUE2QjttR0FBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUp6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFXWSxXQUFXO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IFNDUkVFTl9SRUFERVJfTEFCRUxTX0NPTlRBSU5FUl9JRCA9ICdza3ktc2NyZWVuLXJlYWRlci1sYWJlbHMtY29udGFpbmVyJztcblxuLyoqXG4gKiBBZGRzIHRoZSBlbGVtZW50IHRvIGEgc2NyZWVuIHJlYWRlciBvbmx5IHNlY3Rpb24gb2YgdGhlIGJvZHkuXG4gKiBUaGlzIHByZXZlbnRzIGNvbXBvbmVudHMnIERPTSBmcm9tIGluY2x1ZGluZyB0ZXh0IG9ubHkgaW50ZW5kZWQgZm9yIHNjcmVlbiByZWFkZXJzLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5U2NyZWVuUmVhZGVyTGFiZWxdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5U2NyZWVuUmVhZGVyTGFiZWxEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jcmVtb3ZlTGFiZWxFbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGFiZWwgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIERPTS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY3JlYXRlTGFiZWwodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfY3JlYXRlTGFiZWwgPSB2YWx1ZSA/PyBmYWxzZTtcbiAgICB0aGlzLiN1cGRhdGVMYWJlbEVsKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNyZWF0ZUxhYmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfY3JlYXRlTGFiZWw7XG4gIH1cblxuICByZWFkb25seSAjZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgI3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICNfY3JlYXRlTGFiZWwgPSBmYWxzZTtcblxuICAjdXBkYXRlTGFiZWxFbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jcmVhdGVMYWJlbCkge1xuICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLiNnZXRDb250YWluZXJFbCgpIHx8IHRoaXMuI2NyZWF0ZUNvbnRhaW5lckVsKCk7XG5cbiAgICAgIHRoaXMuI3JlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lckVsLCB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNyZW1vdmVMYWJlbEVsKCk7XG4gICAgfVxuICB9XG5cbiAgI2dldENvbnRhaW5lckVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNDUkVFTl9SRUFERVJfTEFCRUxTX0NPTlRBSU5FUl9JRCk7XG4gIH1cblxuICAjY3JlYXRlQ29udGFpbmVyRWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWwuaWQgPSBTQ1JFRU5fUkVBREVSX0xBQkVMU19DT05UQUlORVJfSUQ7XG4gICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIGVsKTtcblxuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gICNyZW1vdmVMYWJlbEVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy4jZ2V0Q29udGFpbmVyRWwoKTtcblxuICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcblxuICAgIGlmIChjb250YWluZXJFbCAmJiBjb250YWluZXJFbC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGFpbmVyRWwucmVtb3ZlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
@@ -1,2 +0,0 @@
|
|
1
|
-
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNoYWRvdy1ldmVudC1hcmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL3Njcm9sbC1zaGFkb3cvc2Nyb2xsLXNoYWRvdy1ldmVudC1hcmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNreVNjcm9sbFNoYWRvd0V2ZW50QXJncyB7XG4gIGJvdHRvbVNoYWRvdzogc3RyaW5nO1xuXG4gIHRvcFNoYWRvdzogc3RyaW5nO1xufVxuIl19
|
@@ -1,123 +0,0 @@
|
|
1
|
-
import { Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, inject, } from '@angular/core';
|
2
|
-
import { Subject } from 'rxjs';
|
3
|
-
import { SkyMutationObserverService } from '../mutation/mutation-observer-service';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
/**
|
6
|
-
* Raises an event when the box shadow for a component's header or footer should be adjusted
|
7
|
-
* based on the scroll position of the host element.
|
8
|
-
* @internal
|
9
|
-
*/
|
10
|
-
export class SkyScrollShadowDirective {
|
11
|
-
constructor() {
|
12
|
-
this.skyScrollShadow = new EventEmitter();
|
13
|
-
this.#ngUnsubscribe = new Subject();
|
14
|
-
this.#elRef = inject(ElementRef);
|
15
|
-
this.#mutationObserverSvc = inject(SkyMutationObserverService);
|
16
|
-
this.#ngZone = inject(NgZone);
|
17
|
-
this.#_enabled = false;
|
18
|
-
}
|
19
|
-
set skyScrollShadowEnabled(value) {
|
20
|
-
this.#_enabled = value;
|
21
|
-
if (value) {
|
22
|
-
this.#initMutationObserver();
|
23
|
-
}
|
24
|
-
else {
|
25
|
-
this.#emitShadow({
|
26
|
-
bottomShadow: 'none',
|
27
|
-
topShadow: 'none',
|
28
|
-
});
|
29
|
-
this.#destroyMutationObserver();
|
30
|
-
}
|
31
|
-
}
|
32
|
-
get skyScrollShadowEnabled() {
|
33
|
-
return this.#_enabled;
|
34
|
-
}
|
35
|
-
#currentShadow;
|
36
|
-
#mutationObserver;
|
37
|
-
#ngUnsubscribe;
|
38
|
-
#elRef;
|
39
|
-
#mutationObserverSvc;
|
40
|
-
#ngZone;
|
41
|
-
#_enabled;
|
42
|
-
windowResize() {
|
43
|
-
this.#checkForShadow();
|
44
|
-
}
|
45
|
-
scroll() {
|
46
|
-
this.#checkForShadow();
|
47
|
-
}
|
48
|
-
ngOnDestroy() {
|
49
|
-
this.#ngUnsubscribe.next();
|
50
|
-
this.#ngUnsubscribe.complete();
|
51
|
-
this.#destroyMutationObserver();
|
52
|
-
}
|
53
|
-
#initMutationObserver() {
|
54
|
-
if (!this.#mutationObserver) {
|
55
|
-
const el = this.#elRef.nativeElement;
|
56
|
-
// MutationObserver is patched by Zone.js and therefore becomes part of the
|
57
|
-
// Angular change detection cycle, but this can lead to infinite loops in some
|
58
|
-
// scenarios. This will keep MutationObserver from triggering change detection.
|
59
|
-
this.#ngZone.runOutsideAngular(() => {
|
60
|
-
this.#mutationObserver = this.#mutationObserverSvc.create(() => {
|
61
|
-
this.#checkForShadow();
|
62
|
-
});
|
63
|
-
this.#mutationObserver.observe(el, {
|
64
|
-
attributes: true,
|
65
|
-
characterData: true,
|
66
|
-
childList: true,
|
67
|
-
subtree: true,
|
68
|
-
});
|
69
|
-
});
|
70
|
-
}
|
71
|
-
}
|
72
|
-
#destroyMutationObserver() {
|
73
|
-
if (this.#mutationObserver) {
|
74
|
-
this.#mutationObserver.disconnect();
|
75
|
-
this.#mutationObserver = undefined;
|
76
|
-
}
|
77
|
-
}
|
78
|
-
#checkForShadow() {
|
79
|
-
if (this.skyScrollShadowEnabled) {
|
80
|
-
const el = this.#elRef.nativeElement;
|
81
|
-
const topShadow = this.#buildShadowStyle(el.scrollTop);
|
82
|
-
const bottomShadow = this.#buildShadowStyle(el.scrollHeight - el.scrollTop - el.clientHeight);
|
83
|
-
this.#emitShadow({
|
84
|
-
bottomShadow,
|
85
|
-
topShadow,
|
86
|
-
});
|
87
|
-
}
|
88
|
-
}
|
89
|
-
#buildShadowStyle(pixelsFromEnd) {
|
90
|
-
// Progressively darken the shadow until the user scrolls 30 pixels from the top or bottom
|
91
|
-
// of the scrollable element, with a max opacity of 0.3.
|
92
|
-
const opacity = Math.min(pixelsFromEnd / 30, 1) * 0.3;
|
93
|
-
return opacity > 0 ? `0px 1px 8px 0px rgba(0, 0, 0, ${opacity})` : 'none';
|
94
|
-
}
|
95
|
-
#emitShadow(shadow) {
|
96
|
-
if (!this.#currentShadow ||
|
97
|
-
this.#currentShadow.bottomShadow !== shadow.bottomShadow ||
|
98
|
-
this.#currentShadow.topShadow !== shadow.topShadow) {
|
99
|
-
this.skyScrollShadow.emit(shadow);
|
100
|
-
this.#currentShadow = shadow;
|
101
|
-
}
|
102
|
-
}
|
103
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyScrollShadowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
104
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: SkyScrollShadowDirective, isStandalone: true, selector: "[skyScrollShadow]", inputs: { skyScrollShadowEnabled: "skyScrollShadowEnabled" }, outputs: { skyScrollShadow: "skyScrollShadow" }, host: { listeners: { "window:resize": "windowResize()", "scroll": "scroll()" } }, ngImport: i0 }); }
|
105
|
-
}
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyScrollShadowDirective, decorators: [{
|
107
|
-
type: Directive,
|
108
|
-
args: [{
|
109
|
-
standalone: true,
|
110
|
-
selector: '[skyScrollShadow]',
|
111
|
-
}]
|
112
|
-
}], propDecorators: { skyScrollShadowEnabled: [{
|
113
|
-
type: Input
|
114
|
-
}], skyScrollShadow: [{
|
115
|
-
type: Output
|
116
|
-
}], windowResize: [{
|
117
|
-
type: HostListener,
|
118
|
-
args: ['window:resize']
|
119
|
-
}], scroll: [{
|
120
|
-
type: HostListener,
|
121
|
-
args: ['scroll']
|
122
|
-
}] } });
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNoYWRvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvc2Nyb2xsLXNoYWRvdy9zY3JvbGwtc2hhZG93LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUluRjs7OztHQUlHO0FBS0gsTUFBTSxPQUFPLHdCQUF3QjtJQUpyQztRQTBCUyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBTXRFLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1QixXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLHlCQUFvQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzFELFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEMsY0FBUyxHQUFHLEtBQUssQ0FBQztLQW1GbkI7SUFwSEMsSUFDVyxzQkFBc0IsQ0FBQyxLQUFjO1FBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2YsWUFBWSxFQUFFLE1BQU07Z0JBQ3BCLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMs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QUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZO1lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQ2xELENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQzsrR0FwSFUsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOzhCQUdZLHNCQUFzQjtzQkFEaEMsS0FBSztnQkFxQkMsZUFBZTtzQkFEckIsTUFBTTtnQkFnQkEsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxlQUFlO2dCQU10QixNQUFNO3NCQURaLFlBQVk7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbXV0YXRpb24vbXV0YXRpb24tb2JzZXJ2ZXItc2VydmljZSc7XG5cbmltcG9ydCB7IFNreVNjcm9sbFNoYWRvd0V2ZW50QXJncyB9IGZyb20gJy4vc2Nyb2xsLXNoYWRvdy1ldmVudC1hcmdzJztcblxuLyoqXG4gKiBSYWlzZXMgYW4gZXZlbnQgd2hlbiB0aGUgYm94IHNoYWRvdyBmb3IgYSBjb21wb25lbnQncyBoZWFkZXIgb3IgZm9vdGVyIHNob3VsZCBiZSBhZGp1c3RlZFxuICogYmFzZWQgb24gdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgaG9zdCBlbGVtZW50LlxuICogQGludGVybmFsXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tza3lTY3JvbGxTaGFkb3ddJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5U2Nyb2xsU2hhZG93RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lTY3JvbGxTaGFkb3dFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jX2VuYWJsZWQgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jaW5pdE11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZW1pdFNoYWRvdyh7XG4gICAgICAgIGJvdHRvbVNoYWRvdzogJ25vbmUnLFxuICAgICAgICB0b3BTaGFkb3c6ICdub25lJyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNkZXN0cm95TXV0YXRpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2t5U2Nyb2xsU2hhZG93RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2VuYWJsZWQ7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIHNreVNjcm9sbFNoYWRvdyA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5U2Nyb2xsU2hhZG93RXZlbnRBcmdzPigpO1xuXG4gICNjdXJyZW50U2hhZG93OiBTa3lTY3JvbGxTaGFkb3dFdmVudEFyZ3MgfCB1bmRlZmluZWQ7XG5cbiAgI211dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5ICNlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgI211dGF0aW9uT2JzZXJ2ZXJTdmMgPSBpbmplY3QoU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UpO1xuICByZWFkb25seSAjbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgI19lbmFibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyB3aW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy4jY2hlY2tGb3JTaGFkb3coKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3Njcm9sbCcpXG4gIHB1YmxpYyBzY3JvbGwoKTogdm9pZCB7XG4gICAgdGhpcy4jY2hlY2tGb3JTaGFkb3coKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLiNkZXN0cm95TXV0YXRpb25PYnNlcnZlcigpO1xuICB9XG5cbiAgI2luaXRNdXRhdGlvbk9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jbXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAvLyBNdXRhdGlvbk9ic2VydmVyIGlzIHBhdGNoZWQgYnkgWm9uZS5qcyBhbmQgdGhlcmVmb3JlIGJlY29tZXMgcGFydCBvZiB0aGVcbiAgICAgIC8vIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYnV0IHRoaXMgY2FuIGxlYWQgdG8gaW5maW5pdGUgbG9vcHMgaW4gc29tZVxuICAgICAgLy8gc2NlbmFyaW9zLiBUaGlzIHdpbGwga2VlcCBNdXRhdGlvbk9ic2VydmVyIGZyb20gdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgdGhpcy4jbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy4jbXV0YXRpb25PYnNlcnZlciA9IHRoaXMuI211dGF0aW9uT2JzZXJ2ZXJTdmMuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNjaGVja0ZvclNoYWRvdygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZWwsIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lNdXRhdGlvbk9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNtdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuI211dGF0aW9uT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2NoZWNrRm9yU2hhZG93KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNreVNjcm9sbFNoYWRvd0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGVsOiBFbGVtZW50ID0gdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgY29uc3QgdG9wU2hhZG93ID0gdGhpcy4jYnVpbGRTaGFkb3dTdHlsZShlbC5zY3JvbGxUb3ApO1xuXG4gICAgICBjb25zdCBib3R0b21TaGFkb3cgPSB0aGlzLiNidWlsZFNoYWRvd1N0eWxlKFxuICAgICAgICBlbC5zY3JvbGxIZWlnaHQgLSBlbC5zY3JvbGxUb3AgLSBlbC5jbGllbnRIZWlnaHQsXG4gICAgICApO1xuXG4gICAgICB0aGlzLiNlbWl0U2hhZG93KHtcbiAgICAgICAgYm90dG9tU2hhZG93LFxuICAgICAgICB0b3BTaGFkb3csXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjYnVpbGRTaGFkb3dTdHlsZShwaXhlbHNGcm9tRW5kOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIFByb2dyZXNzaXZlbHkgZGFya2VuIHRoZSBzaGFkb3cgdW50aWwgdGhlIHVzZXIgc2Nyb2xscyAzMCBwaXhlbHMgZnJvbSB0aGUgdG9wIG9yIGJvdHRvbVxuICAgIC8vIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsIHdpdGggYSBtYXggb3BhY2l0eSBvZiAwLjMuXG4gICAgY29uc3Qgb3BhY2l0eSA9IE1hdGgubWluKHBpeGVsc0Zyb21FbmQgLyAzMCwgMSkgKiAwLjM7XG5cbiAgICByZXR1cm4gb3BhY2l0eSA+IDAgPyBgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgJHtvcGFjaXR5fSlgIDogJ25vbmUnO1xuICB9XG5cbiAgI2VtaXRTaGFkb3coc2hhZG93OiBTa3lTY3JvbGxTaGFkb3dFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy4jY3VycmVudFNoYWRvdyB8fFxuICAgICAgdGhpcy4jY3VycmVudFNoYWRvdy5ib3R0b21TaGFkb3cgIT09IHNoYWRvdy5ib3R0b21TaGFkb3cgfHxcbiAgICAgIHRoaXMuI2N1cnJlbnRTaGFkb3cudG9wU2hhZG93ICE9PSBzaGFkb3cudG9wU2hhZG93XG4gICAgKSB7XG4gICAgICB0aGlzLnNreVNjcm9sbFNoYWRvdy5lbWl0KHNoYWRvdyk7XG4gICAgICB0aGlzLiNjdXJyZW50U2hhZG93ID0gc2hhZG93O1xuICAgIH1cbiAgfVxufVxuIl19
|