@skyux/core 5.9.5 → 5.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bundles/skyux-core-testing.umd.js +30 -0
  2. package/bundles/skyux-core.umd.js +764 -739
  3. package/documentation.json +149 -146
  4. package/esm2015/lib/modules/adapter-service/adapter.service.js +10 -6
  5. package/esm2015/lib/modules/adapter-service/adapter.service.js.map +1 -1
  6. package/esm2015/lib/modules/affix/affix.service.js +6 -2
  7. package/esm2015/lib/modules/affix/affix.service.js.map +1 -1
  8. package/esm2015/lib/modules/numeric/numeric.pipe.js +3 -4
  9. package/esm2015/lib/modules/numeric/numeric.pipe.js.map +1 -1
  10. package/esm2015/lib/modules/numeric/numeric.service.js +1 -1
  11. package/esm2015/lib/modules/numeric/numeric.service.js.map +1 -1
  12. package/esm2015/lib/modules/resize-observer/resize-observer-media-query.service.js +42 -29
  13. package/esm2015/lib/modules/resize-observer/resize-observer-media-query.service.js.map +1 -1
  14. package/esm2015/lib/modules/resize-observer/resize-observer.service.js +16 -10
  15. package/esm2015/lib/modules/resize-observer/resize-observer.service.js.map +1 -1
  16. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js +28 -25
  17. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js.map +1 -1
  18. package/esm2015/testing/core-testing.module.js +29 -0
  19. package/esm2015/testing/core-testing.module.js.map +1 -0
  20. package/esm2015/testing/mock-media-query.service.js +2 -0
  21. package/esm2015/testing/mock-media-query.service.js.map +1 -1
  22. package/esm2015/testing/mock-ui-config.service.js.map +1 -1
  23. package/esm2015/testing/public-api.js +1 -0
  24. package/esm2015/testing/public-api.js.map +1 -1
  25. package/fesm2015/skyux-core-testing.js +28 -2
  26. package/fesm2015/skyux-core-testing.js.map +1 -1
  27. package/fesm2015/skyux-core.js +103 -77
  28. package/fesm2015/skyux-core.js.map +1 -1
  29. package/lib/modules/adapter-service/adapter.service.d.ts +1 -1
  30. package/lib/modules/affix/affix.service.d.ts +1 -1
  31. package/lib/modules/numeric/numeric.pipe.d.ts +3 -4
  32. package/lib/modules/numeric/numeric.service.d.ts +1 -1
  33. package/lib/modules/resize-observer/resize-observer-media-query.service.d.ts +2 -5
  34. package/lib/modules/resize-observer/resize-observer.service.d.ts +1 -2
  35. package/lib/modules/scrollable-host/scrollable-host.service.d.ts +7 -4
  36. package/package.json +2 -2
  37. package/testing/core-testing.module.d.ts +6 -0
  38. package/testing/mock-ui-config.service.d.ts +2 -1
  39. package/testing/public-api.d.ts +1 -0
@@ -27,8 +27,7 @@ export class SkyScrollableHostService {
27
27
  /**
28
28
  * Returns an observable which emits the given element's current scrollable host
29
29
  * @param elementRef The element whose scrollable host is being requested
30
- * @param completionObservable An observable which alerts the internal observers that they should complete
31
- * @returns An observable which emits the current scrollable host
30
+ * @returns An observable which emits the current scrollable host element.
32
31
  * @internal
33
32
  */
34
33
  watchScrollableHost(elementRef) {
@@ -38,11 +37,13 @@ export class SkyScrollableHostService {
38
37
  return new Observable((subscriber) => {
39
38
  subscribers.push(subscriber);
40
39
  let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
40
+ // Setup mutation observers only once, for all subscribers.
41
41
  if (subscribers.length === 1) {
42
42
  parentMutationObserver = this.mutationObserverSvc.create(() => {
43
43
  const newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
44
+ // Reset observer if scrollable host changes.
44
45
  if (newScrollableHost !== scrollableHost &&
45
- elementRef.nativeElement.offsetParent) {
46
+ this.isElementVisible(elementRef)) {
46
47
  scrollableHost = newScrollableHost;
47
48
  this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
48
49
  notifySubscribers(subscribers, scrollableHost);
@@ -50,7 +51,9 @@ export class SkyScrollableHostService {
50
51
  });
51
52
  this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
52
53
  documentHiddenElementMutationObserver = this.mutationObserverSvc.create(() => {
53
- if (scrollableHost && !elementRef.nativeElement.offsetParent) {
54
+ if (scrollableHost && !this.isElementVisible(elementRef)) {
55
+ // If the scrollable host is not visible, set it to undefined and unsubscribe from its mutation changes.
56
+ // Then, observe the document element so that a new scrollable host can be found.
54
57
  scrollableHost = undefined;
55
58
  this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
56
59
  notifySubscribers(subscribers, scrollableHost);
@@ -58,10 +61,11 @@ export class SkyScrollableHostService {
58
61
  });
59
62
  this.observeDocumentHiddenElementChanges(documentHiddenElementMutationObserver);
60
63
  }
64
+ // Emit the scrollable host to the subscriber.
61
65
  subscriber.next(scrollableHost);
66
+ // Teardown callback for the subscription.
62
67
  subscriber.add(() => {
63
68
  const subIndex = subscribers.indexOf(subscriber);
64
- /* sanity check */
65
69
  /* istanbul ignore else */
66
70
  if (subIndex >= 0) {
67
71
  subscribers.splice(subIndex, 1);
@@ -76,7 +80,6 @@ export class SkyScrollableHostService {
76
80
  /**
77
81
  * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.
78
82
  * @param elementRef The element whose scrollable host scroll events are being requested
79
- * @param completionObservable An observable which alerts the internal observers that they should complete
80
83
  * @returns An observable which emits when the elements scrollable host is scrolled or is changed
81
84
  */
82
85
  watchScrollableHostScrollEvents(elementRef) {
@@ -87,6 +90,7 @@ export class SkyScrollableHostService {
87
90
  let scrollEventSubscription;
88
91
  return new Observable((subscriber) => {
89
92
  subscribers.push(subscriber);
93
+ // Setup mutation observers only once, for all subscribers.
90
94
  if (subscribers.length === 1) {
91
95
  scrollableHostSubscription = this.watchScrollableHost(elementRef).subscribe((newScrollableHost) => {
92
96
  newScrollableHostObservable.next();
@@ -96,6 +100,8 @@ export class SkyScrollableHostService {
96
100
  }
97
101
  scrollableHost = newScrollableHost;
98
102
  newScrollableHostObservable = new Subject();
103
+ // Only subscribe to scroll events if the host element is defined.
104
+ /* istanbul ignore else */
99
105
  if (newScrollableHost) {
100
106
  scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')
101
107
  .pipe(takeUntil(newScrollableHostObservable))
@@ -105,9 +111,9 @@ export class SkyScrollableHostService {
105
111
  }
106
112
  });
107
113
  }
114
+ // Teardown callback for the subscription.
108
115
  subscriber.add(() => {
109
116
  const subIndex = subscribers.indexOf(subscriber);
110
- /* sanity check */
111
117
  /* istanbul ignore else */
112
118
  if (subIndex >= 0) {
113
119
  subscribers.splice(subIndex, 1);
@@ -124,7 +130,6 @@ export class SkyScrollableHostService {
124
130
  const regex = /(auto|scroll)/;
125
131
  const windowObj = this.windowRef.nativeWindow;
126
132
  const bodyObj = windowObj.document.body;
127
- /* Sanity check */
128
133
  if (!element) {
129
134
  return windowObj;
130
135
  }
@@ -132,7 +137,7 @@ export class SkyScrollableHostService {
132
137
  let parent = element;
133
138
  do {
134
139
  parent = parent.parentNode;
135
- /* Sanity check for if this function is called for an element which has been removed from the DOM */
140
+ // Return `window` if the parent element has been removed from the DOM.
136
141
  if (!(parent instanceof HTMLElement)) {
137
142
  return windowObj;
138
143
  }
@@ -155,22 +160,20 @@ export class SkyScrollableHostService {
155
160
  }
156
161
  observeForScrollableHostChanges(element, mutationObserver) {
157
162
  mutationObserver.disconnect();
158
- if (element instanceof HTMLElement) {
159
- mutationObserver.observe(element, {
160
- attributes: true,
161
- attributeFilter: ['class', 'style'],
162
- childList: true,
163
- subtree: true,
164
- });
165
- }
166
- else {
167
- mutationObserver.observe(document.documentElement, {
168
- attributes: true,
169
- attributeFilter: ['class', 'style'],
170
- childList: true,
171
- subtree: true,
172
- });
173
- }
163
+ const target = element instanceof HTMLElement ? element : document.documentElement;
164
+ mutationObserver.observe(target, {
165
+ attributes: true,
166
+ attributeFilter: ['class', 'style'],
167
+ childList: true,
168
+ subtree: true,
169
+ });
170
+ }
171
+ /**
172
+ * Determines if an element is "visible" in the DOM.
173
+ * @see https://stackoverflow.com/a/11639664/6178885
174
+ */
175
+ isElementVisible(elementRef) {
176
+ return elementRef.nativeElement.offsetParent;
174
177
  }
175
178
  }
176
179
  SkyScrollableHostService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyScrollableHostService, deps: [{ token: i1.MutationObserverService }, { token: i2.SkyAppWindowRef }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1 +1 @@
1
- {"version":3,"file":"scrollable-host.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/scrollable-host/scrollable-host.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementRef, Injectable } from '@angular/core';\n\nimport { Observable, Subject, Subscriber, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyAppWindowRef } from '../window/window-ref';\n\nfunction notifySubscribers(subscribers: Subscriber<unknown>[], item?: unknown) {\n for (const subscriber of subscribers) {\n subscriber.next(item);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyScrollableHostService {\n constructor(\n private mutationObserverSvc: MutationObserverService,\n private windowRef: SkyAppWindowRef\n ) {}\n\n /**\n * Returns the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @returns The current scrollable host\n */\n public getScrollableHost(elementRef: ElementRef): HTMLElement | Window {\n return this.findScrollableHost(elementRef.nativeElement);\n }\n\n /**\n * Returns an observable which emits the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits the current scrollable host\n * @internal\n */\n public watchScrollableHost(\n elementRef: ElementRef\n ): Observable<HTMLElement | Window> {\n const subscribers: Subscriber<HTMLElement | Window>[] = [];\n let parentMutationObserver: MutationObserver;\n let documentHiddenElementMutationObserver: MutationObserver;\n\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n let scrollableHost = this.findScrollableHost(elementRef.nativeElement);\n if (subscribers.length === 1) {\n parentMutationObserver = this.mutationObserverSvc.create(() => {\n const newScrollableHost = this.findScrollableHost(\n elementRef.nativeElement\n );\n\n if (\n newScrollableHost !== scrollableHost &&\n elementRef.nativeElement.offsetParent\n ) {\n scrollableHost = newScrollableHost;\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n });\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n documentHiddenElementMutationObserver = this.mutationObserverSvc.create(\n () => {\n if (scrollableHost && !elementRef.nativeElement.offsetParent) {\n scrollableHost = undefined;\n\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n }\n );\n this.observeDocumentHiddenElementChanges(\n documentHiddenElementMutationObserver\n );\n }\n subscriber.next(scrollableHost);\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n documentHiddenElementMutationObserver.disconnect();\n parentMutationObserver.disconnect();\n }\n });\n });\n }\n\n /**\n * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.\n * @param elementRef The element whose scrollable host scroll events are being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits when the elements scrollable host is scrolled or is changed\n */\n public watchScrollableHostScrollEvents(\n elementRef: ElementRef\n ): Observable<void> {\n const subscribers: Subscriber<void>[] = [];\n let scrollableHost: HTMLElement | Window;\n\n let newScrollableHostObservable = new Subject();\n let scrollableHostSubscription: Subscription;\n let scrollEventSubscription: Subscription;\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n if (subscribers.length === 1) {\n scrollableHostSubscription = this.watchScrollableHost(\n elementRef\n ).subscribe((newScrollableHost) => {\n newScrollableHostObservable.next();\n newScrollableHostObservable.complete();\n if (scrollableHost && scrollableHost !== newScrollableHost) {\n notifySubscribers(subscribers);\n }\n scrollableHost = newScrollableHost;\n newScrollableHostObservable = new Subject();\n if (newScrollableHost) {\n scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')\n .pipe(takeUntil(newScrollableHostObservable))\n .subscribe(() => {\n notifySubscribers(subscribers);\n });\n }\n });\n }\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n scrollableHostSubscription.unsubscribe();\n scrollEventSubscription.unsubscribe();\n newScrollableHostObservable.complete();\n }\n });\n });\n }\n\n private findScrollableHost(element: HTMLElement): HTMLElement | Window {\n const regex = /(auto|scroll)/;\n const windowObj = this.windowRef.nativeWindow;\n const bodyObj = windowObj.document.body;\n\n /* Sanity check */\n if (!element) {\n return windowObj;\n }\n\n let style = windowObj.getComputedStyle(element);\n let parent: HTMLElement = element;\n\n do {\n parent = parent.parentNode as HTMLElement;\n\n /* Sanity check for if this function is called for an element which has been removed from the DOM */\n if (!(parent instanceof HTMLElement)) {\n return windowObj;\n }\n\n style = windowObj.getComputedStyle(parent);\n } while (\n !regex.test(style.overflow) &&\n !regex.test(style.overflowY) &&\n parent !== bodyObj\n );\n\n if (parent === bodyObj) {\n return windowObj;\n }\n\n return parent;\n }\n\n private observeDocumentHiddenElementChanges(\n mutationObserver: MutationObserver\n ) {\n mutationObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style', 'hidden'],\n childList: true,\n subtree: true,\n });\n }\n\n private observeForScrollableHostChanges(\n element: HTMLElement | Window,\n mutationObserver: MutationObserver\n ) {\n mutationObserver.disconnect();\n if (element instanceof HTMLElement) {\n mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: ['class', 'style'],\n childList: true,\n subtree: true,\n });\n } else {\n mutationObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style'],\n childList: true,\n subtree: true,\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"scrollable-host.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/scrollable-host/scrollable-host.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementRef, Injectable } from '@angular/core';\n\nimport { Observable, Subject, Subscriber, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyAppWindowRef } from '../window/window-ref';\n\nfunction notifySubscribers(subscribers: Subscriber<unknown>[], item?: unknown) {\n for (const subscriber of subscribers) {\n subscriber.next(item);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyScrollableHostService {\n constructor(\n private mutationObserverSvc: MutationObserverService,\n private windowRef: SkyAppWindowRef\n ) {}\n\n /**\n * Returns the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @returns The current scrollable host\n */\n public getScrollableHost(elementRef: ElementRef): HTMLElement | Window {\n return this.findScrollableHost(elementRef.nativeElement);\n }\n\n /**\n * Returns an observable which emits the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @returns An observable which emits the current scrollable host element.\n * @internal\n */\n public watchScrollableHost(\n elementRef: ElementRef\n ): Observable<HTMLElement | Window | undefined> {\n const subscribers: Subscriber<HTMLElement | Window>[] = [];\n\n let parentMutationObserver: MutationObserver;\n let documentHiddenElementMutationObserver: MutationObserver;\n\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n let scrollableHost = this.findScrollableHost(elementRef.nativeElement);\n\n // Setup mutation observers only once, for all subscribers.\n if (subscribers.length === 1) {\n parentMutationObserver = this.mutationObserverSvc.create(() => {\n const newScrollableHost = this.findScrollableHost(\n elementRef.nativeElement\n );\n\n // Reset observer if scrollable host changes.\n if (\n newScrollableHost !== scrollableHost &&\n this.isElementVisible(elementRef)\n ) {\n scrollableHost = newScrollableHost;\n\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n });\n\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n documentHiddenElementMutationObserver = this.mutationObserverSvc.create(\n () => {\n if (scrollableHost && !this.isElementVisible(elementRef)) {\n // If the scrollable host is not visible, set it to undefined and unsubscribe from its mutation changes.\n // Then, observe the document element so that a new scrollable host can be found.\n scrollableHost = undefined;\n\n this.observeForScrollableHostChanges(\n scrollableHost,\n parentMutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n }\n );\n\n this.observeDocumentHiddenElementChanges(\n documentHiddenElementMutationObserver\n );\n }\n\n // Emit the scrollable host to the subscriber.\n subscriber.next(scrollableHost);\n\n // Teardown callback for the subscription.\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n documentHiddenElementMutationObserver.disconnect();\n parentMutationObserver.disconnect();\n }\n });\n });\n }\n\n /**\n * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.\n * @param elementRef The element whose scrollable host scroll events are being requested\n * @returns An observable which emits when the elements scrollable host is scrolled or is changed\n */\n public watchScrollableHostScrollEvents(\n elementRef: ElementRef\n ): Observable<void> {\n const subscribers: Subscriber<void>[] = [];\n\n let scrollableHost: HTMLElement | Window;\n\n let newScrollableHostObservable = new Subject();\n let scrollableHostSubscription: Subscription;\n let scrollEventSubscription: Subscription;\n\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n // Setup mutation observers only once, for all subscribers.\n if (subscribers.length === 1) {\n scrollableHostSubscription = this.watchScrollableHost(\n elementRef\n ).subscribe((newScrollableHost) => {\n newScrollableHostObservable.next();\n newScrollableHostObservable.complete();\n\n if (scrollableHost && scrollableHost !== newScrollableHost) {\n notifySubscribers(subscribers);\n }\n\n scrollableHost = newScrollableHost;\n newScrollableHostObservable = new Subject();\n\n // Only subscribe to scroll events if the host element is defined.\n /* istanbul ignore else */\n if (newScrollableHost) {\n scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')\n .pipe(takeUntil(newScrollableHostObservable))\n .subscribe(() => {\n notifySubscribers(subscribers);\n });\n }\n });\n }\n\n // Teardown callback for the subscription.\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n scrollableHostSubscription.unsubscribe();\n scrollEventSubscription.unsubscribe();\n newScrollableHostObservable.complete();\n }\n });\n });\n }\n\n private findScrollableHost(\n element: HTMLElement | undefined\n ): HTMLElement | Window {\n const regex = /(auto|scroll)/;\n const windowObj = this.windowRef.nativeWindow;\n const bodyObj = windowObj.document.body;\n\n if (!element) {\n return windowObj;\n }\n\n let style = windowObj.getComputedStyle(element);\n let parent = element;\n\n do {\n parent = parent.parentNode as HTMLElement;\n\n // Return `window` if the parent element has been removed from the DOM.\n if (!(parent instanceof HTMLElement)) {\n return windowObj;\n }\n\n style = windowObj.getComputedStyle(parent);\n } while (\n !regex.test(style.overflow) &&\n !regex.test(style.overflowY) &&\n parent !== bodyObj\n );\n\n if (parent === bodyObj) {\n return windowObj;\n }\n\n return parent;\n }\n\n private observeDocumentHiddenElementChanges(\n mutationObserver: MutationObserver\n ) {\n mutationObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style', 'hidden'],\n childList: true,\n subtree: true,\n });\n }\n\n private observeForScrollableHostChanges(\n element: HTMLElement | Window | undefined,\n mutationObserver: MutationObserver\n ) {\n mutationObserver.disconnect();\n\n const target =\n element instanceof HTMLElement ? element : document.documentElement;\n\n mutationObserver.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'style'],\n childList: true,\n subtree: true,\n });\n }\n\n /**\n * Determines if an element is \"visible\" in the DOM.\n * @see https://stackoverflow.com/a/11639664/6178885\n */\n private isElementVisible(elementRef: ElementRef): boolean {\n return elementRef.nativeElement.offsetParent;\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { SkyMediaQueryService, SkyUIConfigService } from '@skyux/core';
3
+ import { MockSkyMediaQueryService } from './mock-media-query.service';
4
+ import { MockSkyUIConfigService } from './mock-ui-config.service';
5
+ import * as i0 from "@angular/core";
6
+ export class SkyCoreTestingModule {
7
+ }
8
+ SkyCoreTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ SkyCoreTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule });
10
+ SkyCoreTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, providers: [
11
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
12
+ {
13
+ provide: SkyUIConfigService,
14
+ useClass: MockSkyUIConfigService,
15
+ },
16
+ ] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, decorators: [{
18
+ type: NgModule,
19
+ args: [{
20
+ providers: [
21
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
22
+ {
23
+ provide: SkyUIConfigService,
24
+ useClass: MockSkyUIConfigService,
25
+ },
26
+ ],
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=core-testing.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-testing.module.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/core-testing.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;;AAWlE,MAAM,OAAO,oBAAoB;;kHAApB,oBAAoB;mHAApB,oBAAoB;mHAApB,oBAAoB,aARpB;QACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;QACrE;YACE,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,sBAAsB;SACjC;KACF;4FAEU,oBAAoB;kBAThC,QAAQ;mBAAC;oBACR,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;wBACrE;4BACE,OAAO,EAAE,kBAAkB;4BAC3B,QAAQ,EAAE,sBAAsB;yBACjC;qBACF;iBACF","sourcesContent":["import { NgModule } from '@angular/core';\nimport { SkyMediaQueryService, SkyUIConfigService } from '@skyux/core';\n\nimport { MockSkyMediaQueryService } from './mock-media-query.service';\nimport { MockSkyUIConfigService } from './mock-ui-config.service';\n\n@NgModule({\n providers: [\n { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },\n {\n provide: SkyUIConfigService,\n useClass: MockSkyUIConfigService,\n },\n ],\n})\nexport class SkyCoreTestingModule {}\n"]}
@@ -27,6 +27,8 @@ export class MockSkyMediaQueryService extends SkyMediaQueryService {
27
27
  this._currentBreakpoints = args;
28
28
  this.currentMockSubject.next(this._currentBreakpoints);
29
29
  }
30
+ /* istanbul ignore next */
31
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
30
32
  destroy() { }
31
33
  }
32
34
  MockSkyMediaQueryService.xs = '(max-width: 767px)';
@@ -1 +1 @@
1
- {"version":3,"file":"mock-media-query.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-media-query.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAgB,MAAM,MAAM,CAAC;;AAGrD,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAQrD,CAAC;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC,EAAE,EAAE;gBACzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO,KAAU,CAAC;;AAxCX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU","sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n public destroy(): void {}\n}\n"]}
1
+ {"version":3,"file":"mock-media-query.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-media-query.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAgB,MAAM,MAAM,CAAC;;AAGrD,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAQrD,CAAC;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC,EAAE,EAAE;gBACzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAED,0BAA0B;IAC1B,gEAAgE;IACzD,OAAO,KAAU,CAAC;;AA1CX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU","sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public destroy(): void {}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-ui-config.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-ui-config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,EAAE,IAAI,YAAY,EAAE,MAAM,MAAM,CAAC;;AAG1C,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,GAAW,EAAE,aAAmB;QAC/C,QAAQ,GAAG,EAAE;YACX,KAAK,iBAAiB;gBACpB,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAO,YAAY,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;gBACP,OAAO,YAAY,CAAC;oBAClB,QAAQ,EAAE;wBACR,YAAY,EAAE;4BACZ,YAAY,EAAE;gCACZ,KAAK,EAAE;oCACL;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;oCACD;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;iCACF;6BACF;4BACD,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;gCACD;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;6BACF;yBACF;wBACD,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;qBACtC;iBACF,CAAC,CAAC;aACJ;SACF;IACH,CAAC;;oHA/CU,sBAAsB;wHAAtB,sBAAsB;4FAAtB,sBAAsB;kBADlC,UAAU","sourcesContent":["import { Injectable } from '@angular/core';\nimport { SkyUIConfigService } from '@skyux/core';\n\nimport { of as observableOf } from 'rxjs';\n\n@Injectable()\nexport class MockSkyUIConfigService extends SkyUIConfigService {\n public getConfig(key: string, defaultConfig?: any): any {\n switch (key) {\n case 'defaultSettings':\n return observableOf(defaultConfig);\n case 'badData':\n return observableOf({ invalidProperty: 'invalidData' });\n default: {\n return observableOf({\n settings: {\n userSettings: {\n singleColumn: {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n multiColumn: [\n {\n tiles: [\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n ],\n },\n ],\n },\n defaultSettings: ['tile-1', 'tile-2'],\n },\n });\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"mock-ui-config.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-ui-config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAc,EAAE,IAAI,YAAY,EAAE,MAAM,MAAM,CAAC;;AAGtD,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,GAAW,EAAE,aAAmB;QAC/C,QAAQ,GAAG,EAAE;YACX,KAAK,iBAAiB;gBACpB,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAO,YAAY,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;gBACP,OAAO,YAAY,CAAC;oBAClB,QAAQ,EAAE;wBACR,YAAY,EAAE;4BACZ,YAAY,EAAE;gCACZ,KAAK,EAAE;oCACL;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;oCACD;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;iCACF;6BACF;4BACD,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;gCACD;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;6BACF;yBACF;wBACD,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;qBACtC;iBACF,CAAC,CAAC;aACJ;SACF;IACH,CAAC;;oHA/CU,sBAAsB;wHAAtB,sBAAsB;4FAAtB,sBAAsB;kBADlC,UAAU","sourcesContent":["import { Injectable } from '@angular/core';\nimport { SkyUIConfigService } from '@skyux/core';\n\nimport { Observable, of as observableOf } from 'rxjs';\n\n@Injectable()\nexport class MockSkyUIConfigService extends SkyUIConfigService {\n public getConfig(key: string, defaultConfig?: any): Observable<any> {\n switch (key) {\n case 'defaultSettings':\n return observableOf(defaultConfig);\n case 'badData':\n return observableOf({ invalidProperty: 'invalidData' });\n default: {\n return observableOf({\n settings: {\n userSettings: {\n singleColumn: {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n multiColumn: [\n {\n tiles: [\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n ],\n },\n ],\n },\n defaultSettings: ['tile-1', 'tile-2'],\n },\n });\n }\n }\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ export * from './core-testing.module';
1
2
  export * from './mock-media-query.service';
2
3
  export * from './mock-ui-config.service';
3
4
  //# sourceMappingURL=public-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/public-api.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './mock-media-query.service';\nexport * from './mock-ui-config.service';\n"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/public-api.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './core-testing.module';\nexport * from './mock-media-query.service';\nexport * from './mock-ui-config.service';\n"]}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgZone, Injectable } from '@angular/core';
2
+ import { NgZone, Injectable, NgModule } from '@angular/core';
3
3
  import { SkyMediaQueryService, SkyMediaBreakpoints, SkyUIConfigService } from '@skyux/core';
4
4
  import { BehaviorSubject, of } from 'rxjs';
5
5
 
@@ -28,6 +28,8 @@ class MockSkyMediaQueryService extends SkyMediaQueryService {
28
28
  this._currentBreakpoints = args;
29
29
  this.currentMockSubject.next(this._currentBreakpoints);
30
30
  }
31
+ /* istanbul ignore next */
32
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
31
33
  destroy() { }
32
34
  }
33
35
  MockSkyMediaQueryService.xs = '(max-width: 767px)';
@@ -95,9 +97,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
95
97
  type: Injectable
96
98
  }] });
97
99
 
100
+ class SkyCoreTestingModule {
101
+ }
102
+ SkyCoreTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
+ SkyCoreTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule });
104
+ SkyCoreTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, providers: [
105
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
106
+ {
107
+ provide: SkyUIConfigService,
108
+ useClass: MockSkyUIConfigService,
109
+ },
110
+ ] });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyCoreTestingModule, decorators: [{
112
+ type: NgModule,
113
+ args: [{
114
+ providers: [
115
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
116
+ {
117
+ provide: SkyUIConfigService,
118
+ useClass: MockSkyUIConfigService,
119
+ },
120
+ ],
121
+ }]
122
+ }] });
123
+
98
124
  /**
99
125
  * Generated bundle index. Do not edit.
100
126
  */
101
127
 
102
- export { MockSkyMediaQueryService, MockSkyUIConfigService };
128
+ export { MockSkyMediaQueryService, MockSkyUIConfigService, SkyCoreTestingModule };
103
129
  //# sourceMappingURL=skyux-core-testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-core-testing.js","sources":["../../../../../libs/components/core/testing/src/mock-media-query.service.ts","../../../../../libs/components/core/testing/src/mock-ui-config.service.ts","../../../../../libs/components/core/testing/src/skyux-core-testing.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n public destroy(): void {}\n}\n","import { Injectable } from '@angular/core';\nimport { SkyUIConfigService } from '@skyux/core';\n\nimport { of as observableOf } from 'rxjs';\n\n@Injectable()\nexport class MockSkyUIConfigService extends SkyUIConfigService {\n public getConfig(key: string, defaultConfig?: any): any {\n switch (key) {\n case 'defaultSettings':\n return observableOf(defaultConfig);\n case 'badData':\n return observableOf({ invalidProperty: 'invalidData' });\n default: {\n return observableOf({\n settings: {\n userSettings: {\n singleColumn: {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n multiColumn: [\n {\n tiles: [\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n ],\n },\n ],\n },\n defaultSettings: ['tile-1', 'tile-2'],\n },\n });\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":";;;;;MAUa,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;KAQpD;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;KACxC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC;gBACrC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACvB;SACF,CAAC,CAAC;KACJ;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACxD;IAEM,OAAO,MAAW;;AAxCX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU;;;MCHE,sBAAuB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,GAAW,EAAE,aAAmB;QAC/C,QAAQ,GAAG;YACT,KAAK,iBAAiB;gBACpB,OAAOA,EAAY,CAAC,aAAa,CAAC,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAOA,EAAY,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,SAAS;gBACP,OAAOA,EAAY,CAAC;oBAClB,QAAQ,EAAE;wBACR,YAAY,EAAE;4BACZ,YAAY,EAAE;gCACZ,KAAK,EAAE;oCACL;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;oCACD;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;iCACF;6BACF;4BACD,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;gCACD;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;6BACF;yBACF;wBACD,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;qBACtC;iBACF,CAAC,CAAC;aACJ;SACF;KACF;;oHA/CU,sBAAsB;wHAAtB,sBAAsB;4FAAtB,sBAAsB;kBADlC,UAAU;;;ACLX;;;;;;"}
1
+ {"version":3,"file":"skyux-core-testing.js","sources":["../../../../../libs/components/core/testing/src/mock-media-query.service.ts","../../../../../libs/components/core/testing/src/mock-ui-config.service.ts","../../../../../libs/components/core/testing/src/core-testing.module.ts","../../../../../libs/components/core/testing/src/skyux-core-testing.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public destroy(): void {}\n}\n","import { Injectable } from '@angular/core';\nimport { SkyUIConfigService } from '@skyux/core';\n\nimport { Observable, of as observableOf } from 'rxjs';\n\n@Injectable()\nexport class MockSkyUIConfigService extends SkyUIConfigService {\n public getConfig(key: string, defaultConfig?: any): Observable<any> {\n switch (key) {\n case 'defaultSettings':\n return observableOf(defaultConfig);\n case 'badData':\n return observableOf({ invalidProperty: 'invalidData' });\n default: {\n return observableOf({\n settings: {\n userSettings: {\n singleColumn: {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n multiColumn: [\n {\n tiles: [\n {\n id: 'tile-2',\n isCollapsed: true,\n },\n ],\n },\n {\n tiles: [\n {\n id: 'tile-1',\n isCollapsed: true,\n },\n ],\n },\n ],\n },\n defaultSettings: ['tile-1', 'tile-2'],\n },\n });\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SkyMediaQueryService, SkyUIConfigService } from '@skyux/core';\n\nimport { MockSkyMediaQueryService } from './mock-media-query.service';\nimport { MockSkyUIConfigService } from './mock-ui-config.service';\n\n@NgModule({\n providers: [\n { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },\n {\n provide: SkyUIConfigService,\n useClass: MockSkyUIConfigService,\n },\n ],\n})\nexport class SkyCoreTestingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":";;;;;MAUa,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;KAQpD;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;KACxC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC;gBACrC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACvB;SACF,CAAC,CAAC;KACJ;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACxD;;;IAIM,OAAO,MAAW;;AA1CX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU;;;MCHE,sBAAuB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,GAAW,EAAE,aAAmB;QAC/C,QAAQ,GAAG;YACT,KAAK,iBAAiB;gBACpB,OAAOA,EAAY,CAAC,aAAa,CAAC,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAOA,EAAY,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,SAAS;gBACP,OAAOA,EAAY,CAAC;oBAClB,QAAQ,EAAE;wBACR,YAAY,EAAE;4BACZ,YAAY,EAAE;gCACZ,KAAK,EAAE;oCACL;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;oCACD;wCACE,EAAE,EAAE,QAAQ;wCACZ,WAAW,EAAE,IAAI;qCAClB;iCACF;6BACF;4BACD,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;gCACD;oCACE,KAAK,EAAE;wCACL;4CACE,EAAE,EAAE,QAAQ;4CACZ,WAAW,EAAE,IAAI;yCAClB;qCACF;iCACF;6BACF;yBACF;wBACD,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;qBACtC;iBACF,CAAC,CAAC;aACJ;SACF;KACF;;oHA/CU,sBAAsB;wHAAtB,sBAAsB;4FAAtB,sBAAsB;kBADlC,UAAU;;;MCUE,oBAAoB;;kHAApB,oBAAoB;mHAApB,oBAAoB;mHAApB,oBAAoB,aARpB;QACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;QACrE;YACE,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,sBAAsB;SACjC;KACF;4FAEU,oBAAoB;kBAThC,QAAQ;mBAAC;oBACR,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;wBACrE;4BACE,OAAO,EAAE,kBAAkB;4BAC3B,QAAQ,EAAE,sBAAsB;yBACjC;qBACF;iBACF;;;ACdD;;;;;;"}