@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.
Files changed (143) hide show
  1. package/documentation.json +600 -536
  2. package/fesm2022/skyux-core-testing.mjs +26 -26
  3. package/fesm2022/skyux-core-testing.mjs.map +1 -1
  4. package/fesm2022/skyux-core.mjs +188 -188
  5. package/fesm2022/skyux-core.mjs.map +1 -1
  6. package/lib/modules/content-info-provider/content-info-provider.d.ts +0 -3
  7. package/lib/modules/dock/dock.service.d.ts +2 -0
  8. package/package.json +8 -12
  9. package/esm2022/index.mjs +0 -67
  10. package/esm2022/lib/modules/adapter-service/adapter.module.mjs +0 -16
  11. package/esm2022/lib/modules/adapter-service/adapter.service.mjs +0 -205
  12. package/esm2022/lib/modules/adapter-service/focusable-children-options.mjs +0 -2
  13. package/esm2022/lib/modules/affix/affix-auto-fit-context.mjs +0 -12
  14. package/esm2022/lib/modules/affix/affix-config.mjs +0 -2
  15. package/esm2022/lib/modules/affix/affix-horizontal-alignment.mjs +0 -2
  16. package/esm2022/lib/modules/affix/affix-offset-change.mjs +0 -2
  17. package/esm2022/lib/modules/affix/affix-offset.mjs +0 -2
  18. package/esm2022/lib/modules/affix/affix-placement-change.mjs +0 -2
  19. package/esm2022/lib/modules/affix/affix-placement.mjs +0 -2
  20. package/esm2022/lib/modules/affix/affix-position.mjs +0 -2
  21. package/esm2022/lib/modules/affix/affix-rect.mjs +0 -2
  22. package/esm2022/lib/modules/affix/affix-utils.mjs +0 -18
  23. package/esm2022/lib/modules/affix/affix-vertical-alignment.mjs +0 -2
  24. package/esm2022/lib/modules/affix/affix.directive.mjs +0 -116
  25. package/esm2022/lib/modules/affix/affix.module.mjs +0 -18
  26. package/esm2022/lib/modules/affix/affix.service.mjs +0 -48
  27. package/esm2022/lib/modules/affix/affixer.mjs +0 -426
  28. package/esm2022/lib/modules/affix/dom-utils.mjs +0 -126
  29. package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.mjs +0 -2
  30. package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.token.mjs +0 -7
  31. package/esm2022/lib/modules/breakpoint-observer/breakpoint-utils.mjs +0 -38
  32. package/esm2022/lib/modules/breakpoint-observer/breakpoint.mjs +0 -6
  33. package/esm2022/lib/modules/breakpoint-observer/container-breakpoint-observer.mjs +0 -64
  34. package/esm2022/lib/modules/breakpoint-observer/media-breakpoint-observer.mjs +0 -58
  35. package/esm2022/lib/modules/breakpoint-observer/provide-breakpoint-observer.mjs +0 -24
  36. package/esm2022/lib/modules/breakpoint-observer/responsive-host.directive.mjs +0 -55
  37. package/esm2022/lib/modules/content-info-provider/content-info-descriptor.mjs +0 -2
  38. package/esm2022/lib/modules/content-info-provider/content-info-provider.mjs +0 -31
  39. package/esm2022/lib/modules/content-info-provider/content-info.mjs +0 -2
  40. package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +0 -26
  41. package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +0 -81
  42. package/esm2022/lib/modules/dock/dock-insert-component-config.mjs +0 -2
  43. package/esm2022/lib/modules/dock/dock-item-config.mjs +0 -2
  44. package/esm2022/lib/modules/dock/dock-item-reference.mjs +0 -2
  45. package/esm2022/lib/modules/dock/dock-item.mjs +0 -31
  46. package/esm2022/lib/modules/dock/dock-location.mjs +0 -19
  47. package/esm2022/lib/modules/dock/dock-options.mjs +0 -2
  48. package/esm2022/lib/modules/dock/dock.component.mjs +0 -101
  49. package/esm2022/lib/modules/dock/dock.module.mjs +0 -15
  50. package/esm2022/lib/modules/dock/dock.service.mjs +0 -97
  51. package/esm2022/lib/modules/dock/sort-by-stack-order.mjs +0 -13
  52. package/esm2022/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -27
  53. package/esm2022/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -2
  54. package/esm2022/lib/modules/dynamic-component/dynamic-component.module.mjs +0 -17
  55. package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -113
  56. package/esm2022/lib/modules/file-reader/file-reader.service.mjs +0 -32
  57. package/esm2022/lib/modules/format/app-format.mjs +0 -18
  58. package/esm2022/lib/modules/help/help-global-options-token.mjs +0 -6
  59. package/esm2022/lib/modules/help/help-global-options.mjs +0 -2
  60. package/esm2022/lib/modules/help/help-open-args.mjs +0 -2
  61. package/esm2022/lib/modules/help/help-update-args.mjs +0 -2
  62. package/esm2022/lib/modules/help/help.service.mjs +0 -20
  63. package/esm2022/lib/modules/id/id.directive.mjs +0 -31
  64. package/esm2022/lib/modules/id/id.module.mjs +0 -16
  65. package/esm2022/lib/modules/id/id.service.mjs +0 -24
  66. package/esm2022/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -2
  67. package/esm2022/lib/modules/layout-host/layout-host.service.mjs +0 -22
  68. package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +0 -81
  69. package/esm2022/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -2
  70. package/esm2022/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -2
  71. package/esm2022/lib/modules/log/log.module.mjs +0 -16
  72. package/esm2022/lib/modules/log/log.service.mjs +0 -148
  73. package/esm2022/lib/modules/log/types/log-deprecation-args.mjs +0 -2
  74. package/esm2022/lib/modules/log/types/log-level-token.mjs +0 -6
  75. package/esm2022/lib/modules/log/types/log-level.mjs +0 -10
  76. package/esm2022/lib/modules/media-query/media-breakpoints.mjs +0 -24
  77. package/esm2022/lib/modules/media-query/media-query-listener.mjs +0 -2
  78. package/esm2022/lib/modules/media-query/media-query.module.mjs +0 -16
  79. package/esm2022/lib/modules/media-query/media-query.service.mjs +0 -82
  80. package/esm2022/lib/modules/mutation/mutation-observer-service.mjs +0 -19
  81. package/esm2022/lib/modules/numeric/numeric-symbol.mjs +0 -2
  82. package/esm2022/lib/modules/numeric/numeric.module.mjs +0 -19
  83. package/esm2022/lib/modules/numeric/numeric.options.mjs +0 -24
  84. package/esm2022/lib/modules/numeric/numeric.pipe.mjs +0 -84
  85. package/esm2022/lib/modules/numeric/numeric.service.mjs +0 -200
  86. package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +0 -74
  87. package/esm2022/lib/modules/overlay/overlay-config.mjs +0 -2
  88. package/esm2022/lib/modules/overlay/overlay-context.mjs +0 -10
  89. package/esm2022/lib/modules/overlay/overlay-instance.mjs +0 -62
  90. package/esm2022/lib/modules/overlay/overlay-position.mjs +0 -2
  91. package/esm2022/lib/modules/overlay/overlay.component.mjs +0 -203
  92. package/esm2022/lib/modules/overlay/overlay.module.mjs +0 -15
  93. package/esm2022/lib/modules/overlay/overlay.service.mjs +0 -134
  94. package/esm2022/lib/modules/percent-pipe/percent-pipe.module.mjs +0 -19
  95. package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +0 -56
  96. package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -153
  97. package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +0 -115
  98. package/esm2022/lib/modules/screen-reader-label/screen-reader-label.directive.mjs +0 -66
  99. package/esm2022/lib/modules/scroll-shadow/scroll-shadow-event-args.mjs +0 -2
  100. package/esm2022/lib/modules/scroll-shadow/scroll-shadow.directive.mjs +0 -123
  101. package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -223
  102. package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
  103. package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +0 -34
  104. package/esm2022/lib/modules/stacking-context/stacking-context-token.mjs +0 -6
  105. package/esm2022/lib/modules/stacking-context/stacking-context.mjs +0 -2
  106. package/esm2022/lib/modules/title/set-title-args.mjs +0 -2
  107. package/esm2022/lib/modules/title/title.service.mjs +0 -31
  108. package/esm2022/lib/modules/trim/trim.directive.mjs +0 -64
  109. package/esm2022/lib/modules/trim/trim.module.mjs +0 -16
  110. package/esm2022/lib/modules/ui-config/ui-config.service.mjs +0 -21
  111. package/esm2022/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -2
  112. package/esm2022/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -2
  113. package/esm2022/lib/modules/viewkeeper/viewkeeper-host-options.mjs +0 -10
  114. package/esm2022/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -2
  115. package/esm2022/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -2
  116. package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
  117. package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +0 -296
  118. package/esm2022/lib/modules/viewkeeper/viewkeeper.module.mjs +0 -16
  119. package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -39
  120. package/esm2022/lib/modules/window/window-ref.mjs +0 -30
  121. package/esm2022/skyux-core.mjs +0 -5
  122. package/esm2022/testing/legacy/core-testing.module.mjs +0 -32
  123. package/esm2022/testing/legacy/mock-media-query.service.mjs +0 -47
  124. package/esm2022/testing/legacy/mock-ui-config.service.mjs +0 -62
  125. package/esm2022/testing/legacy/resize-observer-mock.mjs +0 -50
  126. package/esm2022/testing/modules/file-reader/file-reader-testing.service.mjs +0 -19
  127. package/esm2022/testing/modules/file-reader/provide-file-reader-testing.mjs +0 -22
  128. package/esm2022/testing/modules/help/help-testing-controller.mjs +0 -28
  129. package/esm2022/testing/modules/help/help-testing.module.mjs +0 -32
  130. package/esm2022/testing/modules/help/help-testing.service.mjs +0 -37
  131. package/esm2022/testing/modules/media-query/breakpoint-observer-testing.mjs +0 -26
  132. package/esm2022/testing/modules/media-query/media-query-testing-controller.mjs +0 -22
  133. package/esm2022/testing/modules/media-query/provide-media-query-testing.mjs +0 -26
  134. package/esm2022/testing/modules/overlay/overlay-harness-filters.mjs +0 -2
  135. package/esm2022/testing/modules/overlay/overlay-harness.mjs +0 -20
  136. package/esm2022/testing/public-api.mjs +0 -15
  137. package/esm2022/testing/shared/component-harness.mjs +0 -13
  138. package/esm2022/testing/shared/harness-filters.mjs +0 -2
  139. package/esm2022/testing/shared/harness-utility.mjs +0 -7
  140. package/esm2022/testing/shared/input-harness.mjs +0 -63
  141. package/esm2022/testing/shared/queryable-component-harness.mjs +0 -43
  142. package/esm2022/testing/skyux-core-testing.mjs +0 -5
  143. 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