@skyux/modals 11.21.0 → 11.23.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 (50) hide show
  1. package/documentation.json +492 -417
  2. package/esm2022/lib/modules/shared/sky-modals-resources.module.mjs +3 -21
  3. package/esm2022/testing/legacy/modal-fixture.mjs +143 -0
  4. package/esm2022/testing/modules/confirm/confirm-button-harness-filters.mjs +2 -0
  5. package/esm2022/testing/modules/confirm/confirm-button-harness.mjs +52 -0
  6. package/esm2022/testing/modules/confirm/confirm-harness.mjs +90 -0
  7. package/esm2022/testing/modules/confirm/confirm-testing.controller.mjs +7 -0
  8. package/esm2022/testing/{confirm → modules/confirm}/confirm-testing.module.mjs +1 -1
  9. package/esm2022/testing/modules/confirm/confirm-testing.service.mjs +101 -0
  10. package/esm2022/testing/modules/confirm/provide-confirm-testing.mjs +20 -0
  11. package/esm2022/testing/modules/modal/controller/modal-testing.controller.mjs +8 -0
  12. package/esm2022/testing/{modal → modules/modal}/controller/modal-testing.module.mjs +1 -1
  13. package/esm2022/testing/modules/modal/controller/modal-testing.service.mjs +60 -0
  14. package/esm2022/testing/modules/modal/controller/provide-modal-testing.mjs +20 -0
  15. package/esm2022/testing/modules/modal/modal-harness-filters.mjs +2 -0
  16. package/esm2022/testing/modules/modal/modal-harness.mjs +110 -0
  17. package/esm2022/testing/public-api.mjs +9 -9
  18. package/fesm2022/skyux-modals-testing.mjs +22 -16
  19. package/fesm2022/skyux-modals-testing.mjs.map +1 -1
  20. package/fesm2022/skyux-modals.mjs +2 -20
  21. package/fesm2022/skyux-modals.mjs.map +1 -1
  22. package/lib/modules/shared/sky-modals-resources.module.d.ts +0 -4
  23. package/package.json +7 -7
  24. package/testing/public-api.d.ts +10 -10
  25. package/esm2022/testing/confirm/confirm-button-harness-filters.mjs +0 -2
  26. package/esm2022/testing/confirm/confirm-button-harness.mjs +0 -46
  27. package/esm2022/testing/confirm/confirm-harness.mjs +0 -90
  28. package/esm2022/testing/confirm/confirm-testing.controller.mjs +0 -7
  29. package/esm2022/testing/confirm/confirm-testing.service.mjs +0 -101
  30. package/esm2022/testing/confirm/provide-confirm-testing.mjs +0 -20
  31. package/esm2022/testing/modal/controller/modal-testing.controller.mjs +0 -8
  32. package/esm2022/testing/modal/controller/modal-testing.service.mjs +0 -60
  33. package/esm2022/testing/modal/controller/provide-modal-testing.mjs +0 -20
  34. package/esm2022/testing/modal/modal-harness-filters.mjs +0 -2
  35. package/esm2022/testing/modal/modal-harness.mjs +0 -110
  36. package/esm2022/testing/modal-fixture.mjs +0 -143
  37. /package/testing/{modal-fixture.d.ts → legacy/modal-fixture.d.ts} +0 -0
  38. /package/testing/{confirm → modules/confirm}/confirm-button-harness-filters.d.ts +0 -0
  39. /package/testing/{confirm → modules/confirm}/confirm-button-harness.d.ts +0 -0
  40. /package/testing/{confirm → modules/confirm}/confirm-harness.d.ts +0 -0
  41. /package/testing/{confirm → modules/confirm}/confirm-testing.controller.d.ts +0 -0
  42. /package/testing/{confirm → modules/confirm}/confirm-testing.module.d.ts +0 -0
  43. /package/testing/{confirm → modules/confirm}/confirm-testing.service.d.ts +0 -0
  44. /package/testing/{confirm → modules/confirm}/provide-confirm-testing.d.ts +0 -0
  45. /package/testing/{modal → modules/modal}/controller/modal-testing.controller.d.ts +0 -0
  46. /package/testing/{modal → modules/modal}/controller/modal-testing.module.d.ts +0 -0
  47. /package/testing/{modal → modules/modal}/controller/modal-testing.service.d.ts +0 -0
  48. /package/testing/{modal → modules/modal}/controller/provide-modal-testing.d.ts +0 -0
  49. /package/testing/{modal → modules/modal}/modal-harness-filters.d.ts +0 -0
  50. /package/testing/{modal → modules/modal}/modal-harness.d.ts +0 -0
@@ -0,0 +1,60 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { SkyModalInstance, } from '@skyux/modals';
3
+ import { SkyModalTestingController } from './modal-testing.controller';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * @internal
7
+ */
8
+ export class SkyModalTestingService extends SkyModalTestingController {
9
+ #modals = new Map();
10
+ ngOnDestroy() {
11
+ for (const instance of this.#modals.keys()) {
12
+ instance.close();
13
+ }
14
+ }
15
+ closeTopModal(args) {
16
+ const modal = this.#getTopmostModal();
17
+ if (!modal) {
18
+ throw new Error('Expected to close the topmost modal, but no modals are open.');
19
+ }
20
+ modal.instance.close(args?.data, args?.reason);
21
+ }
22
+ expectCount(value) {
23
+ const count = this.#modals.size;
24
+ if (count !== value) {
25
+ throw new Error(`Expected ${value} open ${value === 1 ? 'modal' : 'modals'}, but ${count} ${count === 1 ? 'is' : 'are'} open.`);
26
+ }
27
+ }
28
+ expectNone() {
29
+ const count = this.#modals.size;
30
+ if (count > 0) {
31
+ throw new Error(`Expected no modals to be open, but there ${count === 1 ? 'is' : 'are'} ${count} open.`);
32
+ }
33
+ }
34
+ expectOpen(component) {
35
+ const modal = this.#getTopmostModal();
36
+ if (!modal) {
37
+ throw new Error('A modal is expected to be open, but no modals are open.');
38
+ }
39
+ if (modal.component !== component) {
40
+ throw new Error(`Expected the topmost modal to be of type ${component.name}, but it is of type ${modal.component.name}.`);
41
+ }
42
+ }
43
+ open(component, config) {
44
+ const instance = new SkyModalInstance();
45
+ instance.closed.subscribe(() => {
46
+ this.#modals.delete(instance);
47
+ });
48
+ this.#modals.set(instance, { component, config, instance });
49
+ return instance;
50
+ }
51
+ #getTopmostModal() {
52
+ return Array.from(this.#modals.values()).pop();
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyModalTestingService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
55
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyModalTestingService }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyModalTestingService, decorators: [{
58
+ type: Injectable
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdGVzdGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy90ZXN0aW5nL3NyYy9tb2R1bGVzL21vZGFsL2NvbnRyb2xsZXIvbW9kYWwtdGVzdGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFHTCxnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBUXZFOztHQUVHO0FBRUgsTUFBTSxPQUFPLHNCQUNYLFNBQVEseUJBQXlCO0lBR3hCLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUVyRCxXQUFXO1FBQ2hCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUF3QjtRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxXQUFXLENBQUMsS0FBYTtRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksS0FBSyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxTQUFTLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUMvRyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxVQUFVO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUNiLDRDQUE0QyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FDeEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFhLFNBQTJCO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNENBQTRDLFNBQVMsQ0FBQyxJQUFJLHVCQUF1QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxJQUFJLENBQ1QsU0FBMkIsRUFDM0IsTUFBMEQ7UUFFMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUU1RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqRCxDQUFDOzhHQXpFVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgU3RhdGljUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreU1vZGFsQ2xvc2VBcmdzLFxuICBTa3lNb2RhbENvbmZpZ3VyYXRpb25JbnRlcmZhY2UsXG4gIFNreU1vZGFsSW5zdGFuY2UsXG4gIFNreU1vZGFsU2VydmljZUludGVyZmFjZSxcbn0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5cbmltcG9ydCB7IFNreU1vZGFsVGVzdGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuL21vZGFsLXRlc3RpbmcuY29udHJvbGxlcic7XG5cbmludGVyZmFjZSBUZXN0U3ViamVjdDxUID0gdW5rbm93bj4ge1xuICBjb21wb25lbnQ6IFR5cGU8VD47XG4gIGNvbmZpZzogU2t5TW9kYWxDb25maWd1cmF0aW9uSW50ZXJmYWNlIHwgU3RhdGljUHJvdmlkZXJbXSB8IHVuZGVmaW5lZDtcbiAgaW5zdGFuY2U6IFNreU1vZGFsSW5zdGFuY2U7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lNb2RhbFRlc3RpbmdTZXJ2aWNlXG4gIGV4dGVuZHMgU2t5TW9kYWxUZXN0aW5nQ29udHJvbGxlclxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgU2t5TW9kYWxTZXJ2aWNlSW50ZXJmYWNlXG57XG4gIHJlYWRvbmx5ICNtb2RhbHMgPSBuZXcgTWFwPFNreU1vZGFsSW5zdGFuY2UsIFRlc3RTdWJqZWN0PigpO1xuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHRoaXMuI21vZGFscy5rZXlzKCkpIHtcbiAgICAgIGluc3RhbmNlLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlVG9wTW9kYWwoYXJncz86IFNreU1vZGFsQ2xvc2VBcmdzKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLiNnZXRUb3Btb3N0TW9kYWwoKTtcbiAgICBpZiAoIW1vZGFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCB0byBjbG9zZSB0aGUgdG9wbW9zdCBtb2RhbCwgYnV0IG5vIG1vZGFscyBhcmUgb3Blbi4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtb2RhbC5pbnN0YW5jZS5jbG9zZShhcmdzPy5kYXRhLCBhcmdzPy5yZWFzb24pO1xuICB9XG5cbiAgcHVibGljIGV4cGVjdENvdW50KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuI21vZGFscy5zaXplO1xuICAgIGlmIChjb3VudCAhPT0gdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkICR7dmFsdWV9IG9wZW4gJHt2YWx1ZSA9PT0gMSA/ICdtb2RhbCcgOiAnbW9kYWxzJ30sIGJ1dCAke2NvdW50fSAke2NvdW50ID09PSAxID8gJ2lzJyA6ICdhcmUnfSBvcGVuLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBlY3ROb25lKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jbW9kYWxzLnNpemU7XG4gICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgbm8gbW9kYWxzIHRvIGJlIG9wZW4sIGJ1dCB0aGVyZSAke2NvdW50ID09PSAxID8gJ2lzJyA6ICdhcmUnfSAke2NvdW50fSBvcGVuLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBlY3RPcGVuPFRDb21wb25lbnQ+KGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50Pik6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy4jZ2V0VG9wbW9zdE1vZGFsKCk7XG4gICAgaWYgKCFtb2RhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQSBtb2RhbCBpcyBleHBlY3RlZCB0byBiZSBvcGVuLCBidXQgbm8gbW9kYWxzIGFyZSBvcGVuLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtb2RhbC5jb21wb25lbnQgIT09IGNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgdGhlIHRvcG1vc3QgbW9kYWwgdG8gYmUgb2YgdHlwZSAke2NvbXBvbmVudC5uYW1lfSwgYnV0IGl0IGlzIG9mIHR5cGUgJHttb2RhbC5jb21wb25lbnQubmFtZX0uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW48VENvbXBvbmVudD4oXG4gICAgY29tcG9uZW50OiBUeXBlPFRDb21wb25lbnQ+LFxuICAgIGNvbmZpZz86IFNreU1vZGFsQ29uZmlndXJhdGlvbkludGVyZmFjZSB8IFN0YXRpY1Byb3ZpZGVyW10sXG4gICk6IFNreU1vZGFsSW5zdGFuY2Uge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFNreU1vZGFsSW5zdGFuY2UoKTtcblxuICAgIGluc3RhbmNlLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy4jbW9kYWxzLmRlbGV0ZShpbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNtb2RhbHMuc2V0KGluc3RhbmNlLCB7IGNvbXBvbmVudCwgY29uZmlnLCBpbnN0YW5jZSB9KTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gICNnZXRUb3Btb3N0TW9kYWwoKTogVGVzdFN1YmplY3QgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI21vZGFscy52YWx1ZXMoKSkucG9wKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { SkyModalService } from '@skyux/modals';
2
+ import { SkyModalTestingController } from './modal-testing.controller';
3
+ import { SkyModalTestingService } from './modal-testing.service';
4
+ /**
5
+ * @internal
6
+ */
7
+ export function provideModalTesting() {
8
+ return [
9
+ SkyModalTestingService,
10
+ {
11
+ provide: SkyModalService,
12
+ useExisting: SkyModalTestingService,
13
+ },
14
+ {
15
+ provide: SkyModalTestingController,
16
+ useExisting: SkyModalTestingService,
17
+ },
18
+ ];
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1tb2RhbC10ZXN0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy90ZXN0aW5nL3NyYy9tb2R1bGVzL21vZGFsL2NvbnRyb2xsZXIvcHJvdmlkZS1tb2RhbC10ZXN0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU87UUFDTCxzQkFBc0I7UUFDdEI7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixXQUFXLEVBQUUsc0JBQXNCO1NBQ3BDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUseUJBQXlCO1lBQ2xDLFdBQVcsRUFBRSxzQkFBc0I7U0FDcEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lNb2RhbFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcblxuaW1wb3J0IHsgU2t5TW9kYWxUZXN0aW5nQ29udHJvbGxlciB9IGZyb20gJy4vbW9kYWwtdGVzdGluZy5jb250cm9sbGVyJztcbmltcG9ydCB7IFNreU1vZGFsVGVzdGluZ1NlcnZpY2UgfSBmcm9tICcuL21vZGFsLXRlc3Rpbmcuc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTW9kYWxUZXN0aW5nKCk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIFNreU1vZGFsVGVzdGluZ1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogU2t5TW9kYWxTZXJ2aWNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreU1vZGFsVGVzdGluZ1NlcnZpY2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBTa3lNb2RhbFRlc3RpbmdDb250cm9sbGVyLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreU1vZGFsVGVzdGluZ1NlcnZpY2UsXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaGFybmVzcy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy90ZXN0aW5nL3NyYy9tb2R1bGVzL21vZGFsL21vZGFsLWhhcm5lc3MtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5SGFybmVzc0ZpbHRlcnMgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcblxuLyoqXG4gKiBBIHNldCBvZiBjcml0ZXJpYSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBhIGxpc3Qgb2YgU2t5TW9kYWxIYXJuZXNzIGluc3RhbmNlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBTa3lNb2RhbEhhcm5lc3NGaWx0ZXJzIGV4dGVuZHMgU2t5SGFybmVzc0ZpbHRlcnMge31cbiJdfQ==
@@ -0,0 +1,110 @@
1
+ import { SkyComponentHarness } from '@skyux/core/testing';
2
+ import { SkyHelpInlineHarness } from '@skyux/help-inline/testing';
3
+ /**
4
+ * Harness for interacting with a modal component in tests.
5
+ */
6
+ export class SkyModalHarness extends SkyComponentHarness {
7
+ /**
8
+ * @internal
9
+ */
10
+ static { this.hostSelector = 'sky-modal'; }
11
+ #getModal = this.locatorFor('.sky-modal');
12
+ #getModalDialog = this.locatorFor('.sky-modal-dialog');
13
+ #getModalHeading = this.locatorFor('.sky-modal-heading');
14
+ /**
15
+ * Gets a `HarnessPredicate` that can be used to search for a
16
+ * `SkyModalHarness` that meets certain criteria
17
+ */
18
+ static with(filters) {
19
+ return SkyModalHarness.getDataSkyIdPredicate(filters);
20
+ }
21
+ /**
22
+ * Clicks the help inline button.
23
+ */
24
+ async clickHelpInline() {
25
+ await (await this.#getHelpInline()).click();
26
+ }
27
+ /**
28
+ * Gets the aria-describedBy property of the modal.
29
+ * @deprecated
30
+ */
31
+ async getAriaDescribedBy() {
32
+ return await (await this.#getModalDialog()).getAttribute('aria-describedby');
33
+ }
34
+ /**
35
+ * Gets the aria-labelledBy property of the modal.
36
+ * @deprecated
37
+ */
38
+ async getAriaLabelledBy() {
39
+ return await (await this.#getModalDialog()).getAttribute('aria-labelledby');
40
+ }
41
+ /**
42
+ * Gets the role of the modal.
43
+ */
44
+ async getAriaRole() {
45
+ return await (await this.#getModalDialog()).getAttribute('role');
46
+ }
47
+ /**
48
+ * Gets the modal's heading text.
49
+ */
50
+ async getHeadingText() {
51
+ return await (await this.#getModalHeading()).text();
52
+ }
53
+ /**
54
+ * Gets the help popover content.
55
+ */
56
+ async getHelpPopoverContent() {
57
+ return await (await this.#getHelpInline()).getPopoverContent();
58
+ }
59
+ /**
60
+ * Gets the help popover title.
61
+ */
62
+ async getHelpPopoverTitle() {
63
+ return await (await this.#getHelpInline()).getPopoverTitle();
64
+ }
65
+ /**
66
+ * Gets the modal size.
67
+ */
68
+ async getSize() {
69
+ if (await this.isFullPage()) {
70
+ throw new Error('Size cannot be determined because size property is overridden when modal is full page');
71
+ }
72
+ const modal = await this.#getModal();
73
+ if (await modal.hasClass('sky-modal-small')) {
74
+ return 'small';
75
+ }
76
+ if (await modal.hasClass('sky-modal-large')) {
77
+ return 'large';
78
+ }
79
+ return 'medium';
80
+ }
81
+ /**
82
+ * Gets the wrapper class of the modal.
83
+ */
84
+ async getWrapperClass() {
85
+ return await (await this.host()).getProperty('className');
86
+ }
87
+ /**
88
+ * Whether the modal is full page.
89
+ */
90
+ async isFullPage() {
91
+ const modal = this.#getModal();
92
+ return await (await modal).hasClass('sky-modal-full-page');
93
+ }
94
+ /**
95
+ * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.
96
+ */
97
+ async isDirty() {
98
+ const modalHost = await this.host();
99
+ const isDirtyAttribute = await modalHost.getAttribute('data-sky-modal-is-dirty');
100
+ return isDirtyAttribute === 'true';
101
+ }
102
+ async #getHelpInline() {
103
+ const harness = await this.locatorForOptional(SkyHelpInlineHarness)();
104
+ if (harness) {
105
+ return harness;
106
+ }
107
+ throw Error('No help inline found.');
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvbW9kdWxlcy9tb2RhbC9tb2RhbC1oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSWxFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQW1CO0lBQ3REOztPQUVHO2FBQ1csaUJBQVksR0FBRyxXQUFXLENBQUM7SUFFekMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2RCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFekQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsT0FBK0I7UUFFL0IsT0FBTyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGVBQWU7UUFDMUIsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsT0FBTyxNQUFNLENBQ1gsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQzdCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsV0FBVztRQUN0QixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsY0FBYztRQUN6QixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQjtRQUdoQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUNiLHVGQUF1RixDQUN4RixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXJDLElBQUksTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsZUFBZTtRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FDbkQseUJBQXlCLENBQzFCLENBQUM7UUFDRixPQUFPLGdCQUFnQixLQUFLLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBRXRFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFybmVzc1ByZWRpY2F0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lIZWxwSW5saW5lSGFybmVzcyB9IGZyb20gJ0Bza3l1eC9oZWxwLWlubGluZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgU2t5TW9kYWxIYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vbW9kYWwtaGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgbW9kYWwgY29tcG9uZW50IGluIHRlc3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2t5TW9kYWxIYXJuZXNzIGV4dGVuZHMgU2t5Q29tcG9uZW50SGFybmVzcyB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ3NreS1tb2RhbCc7XG5cbiAgI2dldE1vZGFsID0gdGhpcy5sb2NhdG9yRm9yKCcuc2t5LW1vZGFsJyk7XG4gICNnZXRNb2RhbERpYWxvZyA9IHRoaXMubG9jYXRvckZvcignLnNreS1tb2RhbC1kaWFsb2cnKTtcbiAgI2dldE1vZGFsSGVhZGluZyA9IHRoaXMubG9jYXRvckZvcignLnNreS1tb2RhbC1oZWFkaW5nJyk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGFcbiAgICogYFNreU1vZGFsSGFybmVzc2AgdGhhdCBtZWV0cyBjZXJ0YWluIGNyaXRlcmlhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgoXG4gICAgZmlsdGVyczogU2t5TW9kYWxIYXJuZXNzRmlsdGVycyxcbiAgKTogSGFybmVzc1ByZWRpY2F0ZTxTa3lNb2RhbEhhcm5lc3M+IHtcbiAgICByZXR1cm4gU2t5TW9kYWxIYXJuZXNzLmdldERhdGFTa3lJZFByZWRpY2F0ZShmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIGhlbHAgaW5saW5lIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGlja0hlbHBJbmxpbmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGF3YWl0IHRoaXMuI2dldEhlbHBJbmxpbmUoKSkuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhcmlhLWRlc2NyaWJlZEJ5IHByb3BlcnR5IG9mIHRoZSBtb2RhbC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBcmlhRGVzY3JpYmVkQnkoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IChcbiAgICAgIGF3YWl0IHRoaXMuI2dldE1vZGFsRGlhbG9nKClcbiAgICApLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFyaWEtbGFiZWxsZWRCeSBwcm9wZXJ0eSBvZiB0aGUgbW9kYWwuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QXJpYUxhYmVsbGVkQnkoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLiNnZXRNb2RhbERpYWxvZygpKS5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvbGUgb2YgdGhlIG1vZGFsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFyaWFSb2xlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0TW9kYWxEaWFsb2coKSkuZ2V0QXR0cmlidXRlKCdyb2xlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbW9kYWwncyBoZWFkaW5nIHRleHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SGVhZGluZ1RleHQoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuI2dldE1vZGFsSGVhZGluZygpKS50ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVscCBwb3BvdmVyIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SGVscFBvcG92ZXJDb250ZW50KCk6IFByb21pc2U8XG4gICAgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmcgfCB1bmRlZmluZWRcbiAgPiB7XG4gICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLiNnZXRIZWxwSW5saW5lKCkpLmdldFBvcG92ZXJDb250ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVscCBwb3BvdmVyIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEhlbHBQb3BvdmVyVGl0bGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuI2dldEhlbHBJbmxpbmUoKSkuZ2V0UG9wb3ZlclRpdGxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbW9kYWwgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTaXplKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNGdWxsUGFnZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJlY2F1c2Ugc2l6ZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIHdoZW4gbW9kYWwgaXMgZnVsbCBwYWdlJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLiNnZXRNb2RhbCgpO1xuXG4gICAgaWYgKGF3YWl0IG1vZGFsLmhhc0NsYXNzKCdza3ktbW9kYWwtc21hbGwnKSkge1xuICAgICAgcmV0dXJuICdzbWFsbCc7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IG1vZGFsLmhhc0NsYXNzKCdza3ktbW9kYWwtbGFyZ2UnKSkge1xuICAgICAgcmV0dXJuICdsYXJnZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdtZWRpdW0nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHdyYXBwZXIgY2xhc3Mgb2YgdGhlIG1vZGFsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFdyYXBwZXJDbGFzcygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5ob3N0KCkpLmdldFByb3BlcnR5KCdjbGFzc05hbWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb2RhbCBpcyBmdWxsIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNGdWxsUGFnZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuI2dldE1vZGFsKCk7XG4gICAgcmV0dXJuIGF3YWl0IChhd2FpdCBtb2RhbCkuaGFzQ2xhc3MoJ3NreS1tb2RhbC1mdWxsLXBhZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb2RhbCBoYXMge0BsaW5rIFNreU1vZGFsSXNEaXJ0eURpcmVjdGl2ZS5pc0RpcnR5fSBzZXQgdG8gZGlydHkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNEaXJ0eSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtb2RhbEhvc3QgPSBhd2FpdCB0aGlzLmhvc3QoKTtcbiAgICBjb25zdCBpc0RpcnR5QXR0cmlidXRlID0gYXdhaXQgbW9kYWxIb3N0LmdldEF0dHJpYnV0ZShcbiAgICAgICdkYXRhLXNreS1tb2RhbC1pcy1kaXJ0eScsXG4gICAgKTtcbiAgICByZXR1cm4gaXNEaXJ0eUF0dHJpYnV0ZSA9PT0gJ3RydWUnO1xuICB9XG5cbiAgYXN5bmMgI2dldEhlbHBJbmxpbmUoKTogUHJvbWlzZTxTa3lIZWxwSW5saW5lSGFybmVzcz4ge1xuICAgIGNvbnN0IGhhcm5lc3MgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChTa3lIZWxwSW5saW5lSGFybmVzcykoKTtcblxuICAgIGlmIChoYXJuZXNzKSB7XG4gICAgICByZXR1cm4gaGFybmVzcztcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcignTm8gaGVscCBpbmxpbmUgZm91bmQuJyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +1,9 @@
1
- export { SkyModalFixture } from './modal-fixture';
2
- export { SkyConfirmButtonHarness } from './confirm/confirm-button-harness';
3
- export { SkyConfirmHarness } from './confirm/confirm-harness';
4
- export { SkyConfirmTestingController } from './confirm/confirm-testing.controller';
5
- export { SkyConfirmTestingModule } from './confirm/confirm-testing.module';
6
- export { SkyModalTestingController } from './modal/controller/modal-testing.controller';
7
- export { SkyModalTestingModule } from './modal/controller/modal-testing.module';
8
- export { SkyModalHarness } from './modal/modal-harness';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFM0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgU2t5TW9kYWxGaXh0dXJlIH0gZnJvbSAnLi9tb2RhbC1maXh0dXJlJztcblxuZXhwb3J0IHsgU2t5Q29uZmlybUJ1dHRvbkhhcm5lc3MgfSBmcm9tICcuL2NvbmZpcm0vY29uZmlybS1idXR0b24taGFybmVzcyc7XG5leHBvcnQgeyBTa3lDb25maXJtQnV0dG9uSGFybmVzc0ZpbHRlcnMgfSBmcm9tICcuL2NvbmZpcm0vY29uZmlybS1idXR0b24taGFybmVzcy1maWx0ZXJzJztcbmV4cG9ydCB7IFNreUNvbmZpcm1IYXJuZXNzIH0gZnJvbSAnLi9jb25maXJtL2NvbmZpcm0taGFybmVzcyc7XG5leHBvcnQgeyBTa3lDb25maXJtVGVzdGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuL2NvbmZpcm0vY29uZmlybS10ZXN0aW5nLmNvbnRyb2xsZXInO1xuZXhwb3J0IHsgU2t5Q29uZmlybVRlc3RpbmdNb2R1bGUgfSBmcm9tICcuL2NvbmZpcm0vY29uZmlybS10ZXN0aW5nLm1vZHVsZSc7XG5cbmV4cG9ydCB7IFNreU1vZGFsVGVzdGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuL21vZGFsL2NvbnRyb2xsZXIvbW9kYWwtdGVzdGluZy5jb250cm9sbGVyJztcbmV4cG9ydCB7IFNreU1vZGFsVGVzdGluZ01vZHVsZSB9IGZyb20gJy4vbW9kYWwvY29udHJvbGxlci9tb2RhbC10ZXN0aW5nLm1vZHVsZSc7XG5cbmV4cG9ydCB7IFNreU1vZGFsSGFybmVzcyB9IGZyb20gJy4vbW9kYWwvbW9kYWwtaGFybmVzcyc7XG5leHBvcnQgeyBTa3lNb2RhbEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC1oYXJuZXNzLWZpbHRlcnMnO1xuIl19
1
+ export { SkyModalFixture } from './legacy/modal-fixture';
2
+ export { SkyConfirmButtonHarness } from './modules/confirm/confirm-button-harness';
3
+ export { SkyConfirmHarness } from './modules/confirm/confirm-harness';
4
+ export { SkyConfirmTestingController } from './modules/confirm/confirm-testing.controller';
5
+ export { SkyConfirmTestingModule } from './modules/confirm/confirm-testing.module';
6
+ export { SkyModalTestingController } from './modules/modal/controller/modal-testing.controller';
7
+ export { SkyModalTestingModule } from './modules/modal/controller/modal-testing.module';
8
+ export { SkyModalHarness } from './modules/modal/modal-harness';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgU2t5TW9kYWxGaXh0dXJlIH0gZnJvbSAnLi9sZWdhY3kvbW9kYWwtZml4dHVyZSc7XG5cbmV4cG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzIH0gZnJvbSAnLi9tb2R1bGVzL2NvbmZpcm0vY29uZmlybS1idXR0b24taGFybmVzcyc7XG5leHBvcnQgeyBTa3lDb25maXJtQnV0dG9uSGFybmVzc0ZpbHRlcnMgfSBmcm9tICcuL21vZHVsZXMvY29uZmlybS9jb25maXJtLWJ1dHRvbi1oYXJuZXNzLWZpbHRlcnMnO1xuZXhwb3J0IHsgU2t5Q29uZmlybUhhcm5lc3MgfSBmcm9tICcuL21vZHVsZXMvY29uZmlybS9jb25maXJtLWhhcm5lc3MnO1xuZXhwb3J0IHsgU2t5Q29uZmlybVRlc3RpbmdDb250cm9sbGVyIH0gZnJvbSAnLi9tb2R1bGVzL2NvbmZpcm0vY29uZmlybS10ZXN0aW5nLmNvbnRyb2xsZXInO1xuZXhwb3J0IHsgU2t5Q29uZmlybVRlc3RpbmdNb2R1bGUgfSBmcm9tICcuL21vZHVsZXMvY29uZmlybS9jb25maXJtLXRlc3RpbmcubW9kdWxlJztcblxuZXhwb3J0IHsgU2t5TW9kYWxUZXN0aW5nQ29udHJvbGxlciB9IGZyb20gJy4vbW9kdWxlcy9tb2RhbC9jb250cm9sbGVyL21vZGFsLXRlc3RpbmcuY29udHJvbGxlcic7XG5leHBvcnQgeyBTa3lNb2RhbFRlc3RpbmdNb2R1bGUgfSBmcm9tICcuL21vZHVsZXMvbW9kYWwvY29udHJvbGxlci9tb2RhbC10ZXN0aW5nLm1vZHVsZSc7XG5cbmV4cG9ydCB7IFNreU1vZGFsSGFybmVzcyB9IGZyb20gJy4vbW9kdWxlcy9tb2RhbC9tb2RhbC1oYXJuZXNzJztcbmV4cG9ydCB7IFNreU1vZGFsSGFybmVzc0ZpbHRlcnMgfSBmcm9tICcuL21vZHVsZXMvbW9kYWwvbW9kYWwtaGFybmVzcy1maWx0ZXJzJztcbiJdfQ==
@@ -160,14 +160,20 @@ class SkyConfirmButtonHarness extends ComponentHarness {
160
160
  */
161
161
  static with(filters) {
162
162
  return new HarnessPredicate(SkyConfirmButtonHarness, filters)
163
- .addOption('text', filters.text, async (harness, text) => HarnessPredicate.stringMatches(await harness.getText(), text))
164
- .addOption('styleType', filters.styleType, async (harness, styleType) => HarnessPredicate.stringMatches(await harness.getStyleType(), styleType));
163
+ .addOption('text', filters.text, async (harness, text) => {
164
+ const buttonText = await harness.getText();
165
+ return await HarnessPredicate.stringMatches(buttonText, text);
166
+ })
167
+ .addOption('styleType', filters.styleType, async (harness, styleType) => {
168
+ const buttonStyleType = await harness.getStyleType();
169
+ return await HarnessPredicate.stringMatches(buttonStyleType, styleType);
170
+ });
165
171
  }
166
172
  /**
167
173
  * Clicks the confirm button.
168
174
  */
169
175
  async click() {
170
- return (await this.host()).click();
176
+ await (await this.host()).click();
171
177
  }
172
178
  /**
173
179
  * Gets the button style of the confirm button.
@@ -189,7 +195,7 @@ class SkyConfirmButtonHarness extends ComponentHarness {
189
195
  * Gets the text content of the confirm button.
190
196
  */
191
197
  async getText() {
192
- return (await this.host()).text();
198
+ return await (await this.host()).text();
193
199
  }
194
200
  }
195
201
 
@@ -230,7 +236,7 @@ class SkyConfirmHarness extends SkyComponentHarness {
230
236
  * Gets the body of the confirm component.
231
237
  */
232
238
  async getBodyText() {
233
- return (await this.#getBodyEl())?.text();
239
+ return await (await this.#getBodyEl())?.text();
234
240
  }
235
241
  /**
236
242
  * Gets the confirm component's custom buttons.
@@ -254,7 +260,7 @@ class SkyConfirmHarness extends SkyComponentHarness {
254
260
  * Gets the message of the confirm component.
255
261
  */
256
262
  async getMessageText() {
257
- return (await this.#getMessageEl()).text();
263
+ return await (await this.#getMessageEl()).text();
258
264
  }
259
265
  /**
260
266
  * Gets the type of the confirm component.
@@ -270,13 +276,13 @@ class SkyConfirmHarness extends SkyComponentHarness {
270
276
  * Whether the whitespace is preserved on the confirm component.
271
277
  */
272
278
  async isWhiteSpacePreserved() {
273
- return (await this.#getMessageEl()).hasClass('sky-confirm-preserve-white-space');
279
+ return await (await this.#getMessageEl()).hasClass('sky-confirm-preserve-white-space');
274
280
  }
275
281
  /**
276
282
  * Returns child harnesses.
277
283
  */
278
284
  async #queryHarnesses(harness) {
279
- return this.locatorForAll(harness)();
285
+ return await this.locatorForAll(harness)();
280
286
  }
281
287
  }
282
288
 
@@ -536,45 +542,45 @@ class SkyModalHarness extends SkyComponentHarness {
536
542
  * Clicks the help inline button.
537
543
  */
538
544
  async clickHelpInline() {
539
- return (await this.#getHelpInline()).click();
545
+ await (await this.#getHelpInline()).click();
540
546
  }
541
547
  /**
542
548
  * Gets the aria-describedBy property of the modal.
543
549
  * @deprecated
544
550
  */
545
551
  async getAriaDescribedBy() {
546
- return (await this.#getModalDialog()).getAttribute('aria-describedby');
552
+ return await (await this.#getModalDialog()).getAttribute('aria-describedby');
547
553
  }
548
554
  /**
549
555
  * Gets the aria-labelledBy property of the modal.
550
556
  * @deprecated
551
557
  */
552
558
  async getAriaLabelledBy() {
553
- return (await this.#getModalDialog()).getAttribute('aria-labelledby');
559
+ return await (await this.#getModalDialog()).getAttribute('aria-labelledby');
554
560
  }
555
561
  /**
556
562
  * Gets the role of the modal.
557
563
  */
558
564
  async getAriaRole() {
559
- return (await this.#getModalDialog()).getAttribute('role');
565
+ return await (await this.#getModalDialog()).getAttribute('role');
560
566
  }
561
567
  /**
562
568
  * Gets the modal's heading text.
563
569
  */
564
570
  async getHeadingText() {
565
- return (await this.#getModalHeading()).text();
571
+ return await (await this.#getModalHeading()).text();
566
572
  }
567
573
  /**
568
574
  * Gets the help popover content.
569
575
  */
570
576
  async getHelpPopoverContent() {
571
- return (await this.#getHelpInline()).getPopoverContent();
577
+ return await (await this.#getHelpInline()).getPopoverContent();
572
578
  }
573
579
  /**
574
580
  * Gets the help popover title.
575
581
  */
576
582
  async getHelpPopoverTitle() {
577
- return (await this.#getHelpInline()).getPopoverTitle();
583
+ return await (await this.#getHelpInline()).getPopoverTitle();
578
584
  }
579
585
  /**
580
586
  * Gets the modal size.
@@ -603,7 +609,7 @@ class SkyModalHarness extends SkyComponentHarness {
603
609
  */
604
610
  async isFullPage() {
605
611
  const modal = this.#getModal();
606
- return (await modal).hasClass('sky-modal-full-page');
612
+ return await (await modal).hasClass('sky-modal-full-page');
607
613
  }
608
614
  /**
609
615
  * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-modals-testing.mjs","sources":["../../../../../libs/components/modals/testing/src/modal-fixture.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-button-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.controller.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.service.ts","../../../../../libs/components/modals/testing/src/confirm/provide-confirm-testing.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.module.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.controller.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.service.ts","../../../../../libs/components/modals/testing/src/modal/controller/provide-modal-testing.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.module.ts","../../../../../libs/components/modals/testing/src/modal/modal-harness.ts","../../../../../libs/components/modals/testing/src/skyux-modals-testing.ts"],"sourcesContent":["import { ComponentFixture } from '@angular/core/testing';\n\n/**\n * Allows interaction with a SKY UX modal component.\n * @internal\n */\nexport class SkyModalFixture {\n #modalElement: HTMLElement;\n\n #fixture: ComponentFixture<unknown>;\n\n constructor(fixture: ComponentFixture<unknown>, skyTestId: string) {\n this.#fixture = fixture;\n const modalElement = document.querySelector(\n 'sky-modal[data-sky-id=\"' + skyTestId + '\"]',\n ) as HTMLElement;\n\n if (!modalElement) {\n throw new Error(\n `No element was found with a \\`data-sky-id\\` value of \"${skyTestId}\".`,\n );\n }\n\n this.#modalElement = modalElement;\n }\n\n /**\n * The modal component's ARIA describedby attribute.\n */\n public get ariaDescribedBy(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n const describedByAttribute =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n modalDialogElement.getAttribute('aria-describedby')!;\n return describedByAttribute;\n }\n\n /**\n * The modal component's ARIA labelledby attribute.\n */\n public get ariaLabelledBy(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n const labelledByAttribute =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n modalDialogElement.getAttribute('aria-labelledby')!;\n\n return labelledByAttribute;\n }\n\n /**\n * The modal component's role attribute.\n */\n public get ariaRole(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const roleAttribute = modalDialogElement.getAttribute('role')!;\n return roleAttribute;\n }\n\n /**\n * Whether or not the modal is a full page modal.\n */\n public get fullPage(): boolean {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-full-page');\n }\n\n /**\n * The size of the modal.\n */\n public get size(): string | undefined {\n const modalDivElement = this.getModalDiv();\n const possibleSizes = ['small', 'medium', 'large'];\n\n for (const size of possibleSizes) {\n if (modalDivElement.classList.contains('sky-modal-' + size)) {\n return size;\n }\n }\n\n return;\n }\n\n /**\n * Whether or not the modal is set up for tiled content.\n */\n public get tiledBody(): boolean {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-tiled');\n }\n\n /**\n * Clicks the modal header's \"close\" button.\n */\n public clickHeaderCloseButton(): void {\n this.#checkModalElement();\n const closeButton: HTMLElement | null = this.#modalElement.querySelector(\n '.sky-modal .sky-modal-btn-close',\n );\n\n if (\n closeButton &&\n window.getComputedStyle(closeButton).display !== 'none'\n ) {\n closeButton.click();\n this.#fixture.detectChanges();\n } else {\n throw new Error(`No header close button exists.`);\n }\n }\n\n /**\n * Clicks the modal header's \"help\" button.\n */\n public clickHelpButton(): void {\n this.#checkModalElement();\n const helpButton: HTMLElement | null = this.#modalElement.querySelector(\n '.sky-modal .sky-modal-header-buttons button[name=\"help-button\"]',\n );\n\n if (helpButton && window.getComputedStyle(helpButton).display !== 'none') {\n helpButton.click();\n this.#fixture.detectChanges();\n } else {\n throw new Error(`No help button exists.`);\n }\n }\n\n /**\n * Returns the main modal element.\n */\n public getModalDiv(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal');\n }\n\n /**\n * Returns the modal's content element.\n */\n public getModalContentEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-content');\n }\n\n /**\n * Returns the modal's footer element.\n */\n public getModalFooterEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-footer');\n }\n\n /**\n * Returns the modal's header element.\n */\n public getModalHeaderEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-header');\n }\n\n #checkModalElement(): void {\n if (!document.contains(this.#modalElement)) {\n throw new Error('Modal element no longer exists. Was the modal closed?');\n }\n }\n\n #getModalDialogElement(): HTMLElement {\n this.#checkModalElement();\n // We can always know that the dialog element will exist if the modal is open and exists.\n return this.#modalElement.querySelector('.sky-modal-dialog')!;\n }\n}\n","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyConfirmButtonStyleType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n * @internal\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\n public static hostSelector = '.sky-confirm-buttons .sky-btn';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyConfirmButtonHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyConfirmButtonHarnessFilters,\n ): HarnessPredicate<SkyConfirmButtonHarness> {\n return new HarnessPredicate(SkyConfirmButtonHarness, filters)\n .addOption('text', filters.text, async (harness, text) =>\n HarnessPredicate.stringMatches(await harness.getText(), text),\n )\n .addOption('styleType', filters.styleType, async (harness, styleType) =>\n HarnessPredicate.stringMatches(await harness.getStyleType(), styleType),\n );\n }\n\n /**\n * Clicks the confirm button.\n */\n public async click(): Promise<void> {\n return (await this.host()).click();\n }\n\n /**\n * Gets the button style of the confirm button.\n */\n public async getStyleType(): Promise<SkyConfirmButtonStyleType> {\n const hostEl = await this.host();\n\n if (await hostEl.hasClass('sky-btn-primary')) {\n return 'primary';\n } else if (await hostEl.hasClass('sky-btn-link')) {\n return 'link';\n } else if (await hostEl.hasClass('sky-btn-danger')) {\n return 'danger';\n }\n return 'default';\n }\n\n /**\n * Gets the text content of the confirm button.\n */\n public async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n","import { ComponentHarness, HarnessQuery } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyConfirmType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarness } from './confirm-button-harness';\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmHarness extends SkyComponentHarness {\n public static hostSelector = 'sky-confirm';\n\n #getBodyEl = this.locatorForOptional('.sky-confirm-body');\n #getButtons = this.locatorForAll(SkyConfirmButtonHarness);\n #getConfirmEl = this.locatorFor('.sky-confirm');\n #getMessageEl = this.locatorFor('.sky-confirm-message');\n\n /**\n * Clicks a confirm button.\n */\n public async clickCustomButton(\n filters: SkyConfirmButtonHarnessFilters,\n ): Promise<void> {\n const buttons = await this.getCustomButtons(filters);\n\n if (buttons.length > 1) {\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n throw new Error(\n `More than one button matches the filter(s): ${JSON.stringify(\n filters,\n )}.`,\n );\n }\n await buttons[0].click();\n }\n\n /**\n * Clicks a confirm button.\n */\n public async clickOkButton(): Promise<void> {\n const type = await this.getType();\n\n if (type === SkyConfirmType.Custom) {\n throw new Error('Cannot click OK button on a confirm of type custom.');\n }\n const buttons = await this.#getButtons();\n await buttons[0].click();\n }\n\n /**\n * Gets the body of the confirm component.\n */\n public async getBodyText(): Promise<string | undefined> {\n return (await this.#getBodyEl())?.text();\n }\n\n /**\n * Gets the confirm component's custom buttons.\n */\n public async getCustomButtons(\n filters?: SkyConfirmButtonHarnessFilters,\n ): Promise<SkyConfirmButtonHarness[]> {\n const confirmType = await this.getType();\n\n if (confirmType === SkyConfirmType.OK) {\n throw new Error('Cannot get custom buttons for confirm of type OK.');\n }\n\n const harnesses = await this.#queryHarnesses(\n SkyConfirmButtonHarness.with(filters || {}),\n );\n\n if (filters && harnesses.length === 0) {\n // Stringify the regular expression so that it's readable in the console log.\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n\n throw new Error(\n `Could not find buttons matching filter(s): ${JSON.stringify(\n filters,\n )}.`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Gets the message of the confirm component.\n */\n public async getMessageText(): Promise<string> {\n return (await this.#getMessageEl()).text();\n }\n\n /**\n * Gets the type of the confirm component.\n */\n public async getType(): Promise<SkyConfirmType> {\n const confirmEl = await this.#getConfirmEl();\n if (await confirmEl.hasClass('sky-confirm-type-ok')) {\n return SkyConfirmType.OK;\n }\n\n return SkyConfirmType.Custom;\n }\n\n /**\n * Whether the whitespace is preserved on the confirm component.\n */\n public async isWhiteSpacePreserved(): Promise<boolean> {\n return (await this.#getMessageEl()).hasClass(\n 'sky-confirm-preserve-white-space',\n );\n }\n\n /**\n * Returns child harnesses.\n */\n async #queryHarnesses<T extends ComponentHarness>(\n harness: HarnessQuery<T>,\n ): Promise<T[]> {\n return this.locatorForAll(harness)();\n }\n}\n","import { SkyConfirmCloseEventArgs, SkyConfirmConfig } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the confirm service\n * and handles interactions with confirm dialogs.\n */\nexport abstract class SkyConfirmTestingController {\n /**\n * Closes the confirm dialog with the \"cancel\" action.\n */\n public abstract cancel(): void;\n /**\n * Throws if a confirm dialog is open.\n */\n public abstract expectNone(): void;\n /**\n * Throws if the open confirm dialog does not match the provided configuration.\n * @param config\n */\n public abstract expectOpen(config: SkyConfirmConfig): void;\n /**\n * Closes the confirm dialog with the provided action.\n */\n public abstract close(args: SkyConfirmCloseEventArgs): void;\n /**\n * Closes the confirm dialog with the \"ok\" action.\n */\n public abstract ok(): void;\n}\n","import {\n SkyConfirmButtonConfig,\n SkyConfirmCloseEventArgs,\n SkyConfirmConfig,\n SkyConfirmInstance,\n SkyConfirmServiceInterface,\n SkyConfirmType,\n} from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\n\ninterface TestSubject {\n buttons: SkyConfirmButtonConfig[];\n config: SkyConfirmConfig;\n instance: SkyConfirmInstance;\n}\n\nfunction assertConfirmOpen(\n value: TestSubject | undefined,\n): asserts value is TestSubject {\n if (value === undefined) {\n throw new Error('A confirm dialog is expected to be open but is closed.');\n }\n\n return;\n}\n\nfunction assertConfirmClosed(\n value: TestSubject | undefined,\n): asserts value is undefined {\n if (value !== undefined) {\n throw new Error('A confirm dialog is expected to be closed but is open.');\n }\n\n return;\n}\n\nfunction isButtonConfigArray(val: unknown): val is SkyConfirmButtonConfig[] {\n return (\n Array.isArray(val) && (val.length === 0 || val[0].action !== undefined)\n );\n}\n\nfunction buttonConfigMatches(\n actual: SkyConfirmButtonConfig,\n expected: SkyConfirmButtonConfig,\n): boolean {\n return (\n expected.action === actual.action &&\n expected.text === actual.text &&\n expected.styleType === actual.styleType\n );\n}\n\n/**\n * @internal\n */\nexport class SkyConfirmTestingService\n extends SkyConfirmTestingController\n implements SkyConfirmServiceInterface\n{\n #testSubject: TestSubject | undefined;\n\n public cancel(): void {\n this.close({ action: 'cancel' });\n }\n\n public ok(): void {\n this.close({ action: 'ok' });\n }\n\n public close(args: SkyConfirmCloseEventArgs): void {\n assertConfirmOpen(this.#testSubject);\n\n const isActionPermitted = this.#testSubject?.buttons.some(\n (b) => b.action === args.action,\n );\n\n if (isActionPermitted) {\n this.#testSubject.instance.close(args);\n this.#testSubject = undefined;\n } else {\n throw new Error(\n `The confirm dialog does not have a button configured for the \"${args.action}\" action.`,\n );\n }\n }\n\n public expectNone(): void {\n assertConfirmClosed(this.#testSubject);\n }\n\n public expectOpen(expectedConfig: SkyConfirmConfig): void {\n assertConfirmOpen(this.#testSubject);\n\n const actualConfig = this.#testSubject.config;\n\n for (const [key, expectedValue] of Object.entries(expectedConfig)) {\n const k = key as keyof typeof expectedConfig;\n const actualValue = actualConfig[k];\n\n if (\n isButtonConfigArray(expectedValue) &&\n isButtonConfigArray(actualValue)\n ) {\n if (expectedValue.length !== actualValue.length) throwDetailedError();\n\n expectedValue.forEach((expectedButton, index) => {\n if (!buttonConfigMatches(expectedButton, actualValue[index])) {\n throwDetailedError();\n }\n });\n } else if (actualValue !== expectedValue) {\n throwDetailedError();\n }\n }\n\n function throwDetailedError(): never {\n throw new Error(`Expected a confirm dialog to be open with a specific configuration.\nExpected:\n${JSON.stringify(expectedConfig, undefined, 2)}\nActual:\n${JSON.stringify(actualConfig, undefined, 2)}\n`);\n }\n }\n\n public open(config: SkyConfirmConfig): SkyConfirmInstance {\n assertConfirmClosed(this.#testSubject);\n\n const instance = new SkyConfirmInstance();\n const testSubject: TestSubject = {\n buttons: [],\n config,\n instance,\n };\n\n switch (config.type) {\n case SkyConfirmType.Custom:\n config.buttons?.forEach((b) => {\n testSubject.buttons.push({ action: b.action, text: b.text });\n });\n break;\n\n case SkyConfirmType.OK:\n default:\n testSubject.buttons.push({ action: 'ok', text: 'Ok' });\n testSubject.buttons.push({ action: 'cancel', text: 'Cancel' });\n break;\n }\n\n this.#testSubject = testSubject;\n\n return instance;\n }\n}\n","import { Provider } from '@angular/core';\nimport { SkyConfirmService } from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\nimport { SkyConfirmTestingService } from './confirm-testing.service';\n\n/**\n * @internal\n */\nexport function provideConfirmTesting(): Provider[] {\n return [\n SkyConfirmTestingService,\n {\n provide: SkyConfirmService,\n useExisting: SkyConfirmTestingService,\n },\n {\n provide: SkyConfirmTestingController,\n useExisting: SkyConfirmTestingService,\n },\n ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideConfirmTesting } from './provide-confirm-testing';\n\n/**\n * Configures the `SkyConfirmTestingController` as the backend for the `SkyConfirmService`.\n */\n@NgModule({\n providers: [provideConfirmTesting()],\n})\nexport class SkyConfirmTestingModule {}\n","import { Type } from '@angular/core';\nimport { SkyModalCloseArgs } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the modal service\n * and handles interactions with modal instances. For testing interactions\n * with the modal component itself, use the `SkyModalHarness`.\n */\nexport abstract class SkyModalTestingController {\n /**\n * Closes the topmost modal with the provided arguments.\n * @param args Arguments to pass to the modal's close event.\n */\n public abstract closeTopModal(args?: SkyModalCloseArgs): void;\n\n /**\n * Throws if the provided value does not match the number of open modals.\n */\n public abstract expectCount(value: number): void;\n\n /**\n * Throws if modals are open.\n */\n public abstract expectNone(): void;\n\n /**\n * Throws if the given criteria does not match the topmost open modal.\n */\n public abstract expectOpen<TComponent>(component: Type<TComponent>): void;\n}\n","import { Injectable, OnDestroy, StaticProvider, Type } from '@angular/core';\nimport {\n SkyModalCloseArgs,\n SkyModalConfigurationInterface,\n SkyModalInstance,\n SkyModalServiceInterface,\n} from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\n\ninterface TestSubject<T = unknown> {\n component: Type<T>;\n config: SkyModalConfigurationInterface | StaticProvider[] | undefined;\n instance: SkyModalInstance;\n}\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyModalTestingService\n extends SkyModalTestingController\n implements OnDestroy, SkyModalServiceInterface\n{\n readonly #modals = new Map<SkyModalInstance, TestSubject>();\n\n public ngOnDestroy(): void {\n for (const instance of this.#modals.keys()) {\n instance.close();\n }\n }\n\n public closeTopModal(args?: SkyModalCloseArgs): void {\n const modal = this.#getTopmostModal();\n if (!modal) {\n throw new Error(\n 'Expected to close the topmost modal, but no modals are open.',\n );\n }\n\n modal.instance.close(args?.data, args?.reason);\n }\n\n public expectCount(value: number): void {\n const count = this.#modals.size;\n if (count !== value) {\n throw new Error(\n `Expected ${value} open ${value === 1 ? 'modal' : 'modals'}, but ${count} ${count === 1 ? 'is' : 'are'} open.`,\n );\n }\n }\n\n public expectNone(): void {\n const count = this.#modals.size;\n if (count > 0) {\n throw new Error(\n `Expected no modals to be open, but there ${count === 1 ? 'is' : 'are'} ${count} open.`,\n );\n }\n }\n\n public expectOpen<TComponent>(component: Type<TComponent>): void {\n const modal = this.#getTopmostModal();\n if (!modal) {\n throw new Error(\n 'A modal is expected to be open, but no modals are open.',\n );\n }\n\n if (modal.component !== component) {\n throw new Error(\n `Expected the topmost modal to be of type ${component.name}, but it is of type ${modal.component.name}.`,\n );\n }\n }\n\n public open<TComponent>(\n component: Type<TComponent>,\n config?: SkyModalConfigurationInterface | StaticProvider[],\n ): SkyModalInstance {\n const instance = new SkyModalInstance();\n\n instance.closed.subscribe(() => {\n this.#modals.delete(instance);\n });\n\n this.#modals.set(instance, { component, config, instance });\n\n return instance;\n }\n\n #getTopmostModal(): TestSubject | undefined {\n return Array.from(this.#modals.values()).pop();\n }\n}\n","import { Provider } from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\nimport { SkyModalTestingService } from './modal-testing.service';\n\n/**\n * @internal\n */\nexport function provideModalTesting(): Provider[] {\n return [\n SkyModalTestingService,\n {\n provide: SkyModalService,\n useExisting: SkyModalTestingService,\n },\n {\n provide: SkyModalTestingController,\n useExisting: SkyModalTestingService,\n },\n ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideModalTesting } from './provide-modal-testing';\n\n/**\n * Configures the `SkyModalTestingController` as the implementation for the `SkyModalService`.\n */\n@NgModule({\n providers: [provideModalTesting()],\n})\nexport class SkyModalTestingModule {}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { TemplateRef } from '@angular/core';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyModalHarnessFilters } from './modal-harness-filters';\n\n/**\n * Harness for interacting with a modal component in tests.\n */\nexport class SkyModalHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-modal';\n\n #getModal = this.locatorFor('.sky-modal');\n #getModalDialog = this.locatorFor('.sky-modal-dialog');\n #getModalHeading = this.locatorFor('.sky-modal-heading');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyModalHarness` that meets certain criteria\n */\n public static with(\n filters: SkyModalHarnessFilters,\n ): HarnessPredicate<SkyModalHarness> {\n return SkyModalHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Clicks the help inline button.\n */\n public async clickHelpInline(): Promise<void> {\n return (await this.#getHelpInline()).click();\n }\n\n /**\n * Gets the aria-describedBy property of the modal.\n * @deprecated\n */\n public async getAriaDescribedBy(): Promise<string | null> {\n return (await this.#getModalDialog()).getAttribute('aria-describedby');\n }\n\n /**\n * Gets the aria-labelledBy property of the modal.\n * @deprecated\n */\n public async getAriaLabelledBy(): Promise<string | null> {\n return (await this.#getModalDialog()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the role of the modal.\n */\n public async getAriaRole(): Promise<string | null> {\n return (await this.#getModalDialog()).getAttribute('role');\n }\n\n /**\n * Gets the modal's heading text.\n */\n public async getHeadingText(): Promise<string | undefined> {\n return (await this.#getModalHeading()).text();\n }\n\n /**\n * Gets the help popover content.\n */\n public async getHelpPopoverContent(): Promise<\n TemplateRef<unknown> | string | undefined\n > {\n return (await this.#getHelpInline()).getPopoverContent();\n }\n\n /**\n * Gets the help popover title.\n */\n public async getHelpPopoverTitle(): Promise<string | undefined> {\n return (await this.#getHelpInline()).getPopoverTitle();\n }\n\n /**\n * Gets the modal size.\n */\n public async getSize(): Promise<string> {\n if (await this.isFullPage()) {\n throw new Error(\n 'Size cannot be determined because size property is overridden when modal is full page',\n );\n }\n\n const modal = await this.#getModal();\n\n if (await modal.hasClass('sky-modal-small')) {\n return 'small';\n }\n\n if (await modal.hasClass('sky-modal-large')) {\n return 'large';\n }\n\n return 'medium';\n }\n\n /**\n * Gets the wrapper class of the modal.\n */\n public async getWrapperClass(): Promise<string | undefined> {\n return await (await this.host()).getProperty('className');\n }\n\n /**\n * Whether the modal is full page.\n */\n public async isFullPage(): Promise<boolean> {\n const modal = this.#getModal();\n return (await modal).hasClass('sky-modal-full-page');\n }\n\n /**\n * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.\n */\n public async isDirty(): Promise<boolean> {\n const modalHost = await this.host();\n const isDirtyAttribute = await modalHost.getAttribute(\n 'data-sky-modal-is-dirty',\n );\n return isDirtyAttribute === 'true';\n }\n\n async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n if (harness) {\n return harness;\n }\n\n throw Error('No help inline found.');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skyux-modals-testing.mjs","sources":["../../../../../libs/components/modals/testing/src/legacy/modal-fixture.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-button-harness.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-harness.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.controller.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.service.ts","../../../../../libs/components/modals/testing/src/modules/confirm/provide-confirm-testing.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.module.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.controller.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.service.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/provide-modal-testing.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.module.ts","../../../../../libs/components/modals/testing/src/modules/modal/modal-harness.ts","../../../../../libs/components/modals/testing/src/skyux-modals-testing.ts"],"sourcesContent":["import { ComponentFixture } from '@angular/core/testing';\n\n/**\n * Allows interaction with a SKY UX modal component.\n * @internal\n */\nexport class SkyModalFixture {\n #modalElement: HTMLElement;\n\n #fixture: ComponentFixture<unknown>;\n\n constructor(fixture: ComponentFixture<unknown>, skyTestId: string) {\n this.#fixture = fixture;\n const modalElement = document.querySelector(\n 'sky-modal[data-sky-id=\"' + skyTestId + '\"]',\n ) as HTMLElement;\n\n if (!modalElement) {\n throw new Error(\n `No element was found with a \\`data-sky-id\\` value of \"${skyTestId}\".`,\n );\n }\n\n this.#modalElement = modalElement;\n }\n\n /**\n * The modal component's ARIA describedby attribute.\n */\n public get ariaDescribedBy(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n const describedByAttribute =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n modalDialogElement.getAttribute('aria-describedby')!;\n return describedByAttribute;\n }\n\n /**\n * The modal component's ARIA labelledby attribute.\n */\n public get ariaLabelledBy(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n const labelledByAttribute =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n modalDialogElement.getAttribute('aria-labelledby')!;\n\n return labelledByAttribute;\n }\n\n /**\n * The modal component's role attribute.\n */\n public get ariaRole(): string | undefined {\n const modalDialogElement = this.#getModalDialogElement();\n /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const roleAttribute = modalDialogElement.getAttribute('role')!;\n return roleAttribute;\n }\n\n /**\n * Whether or not the modal is a full page modal.\n */\n public get fullPage(): boolean {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-full-page');\n }\n\n /**\n * The size of the modal.\n */\n public get size(): string | undefined {\n const modalDivElement = this.getModalDiv();\n const possibleSizes = ['small', 'medium', 'large'];\n\n for (const size of possibleSizes) {\n if (modalDivElement.classList.contains('sky-modal-' + size)) {\n return size;\n }\n }\n\n return;\n }\n\n /**\n * Whether or not the modal is set up for tiled content.\n */\n public get tiledBody(): boolean {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-tiled');\n }\n\n /**\n * Clicks the modal header's \"close\" button.\n */\n public clickHeaderCloseButton(): void {\n this.#checkModalElement();\n const closeButton: HTMLElement | null = this.#modalElement.querySelector(\n '.sky-modal .sky-modal-btn-close',\n );\n\n if (\n closeButton &&\n window.getComputedStyle(closeButton).display !== 'none'\n ) {\n closeButton.click();\n this.#fixture.detectChanges();\n } else {\n throw new Error(`No header close button exists.`);\n }\n }\n\n /**\n * Clicks the modal header's \"help\" button.\n */\n public clickHelpButton(): void {\n this.#checkModalElement();\n const helpButton: HTMLElement | null = this.#modalElement.querySelector(\n '.sky-modal .sky-modal-header-buttons button[name=\"help-button\"]',\n );\n\n if (helpButton && window.getComputedStyle(helpButton).display !== 'none') {\n helpButton.click();\n this.#fixture.detectChanges();\n } else {\n throw new Error(`No help button exists.`);\n }\n }\n\n /**\n * Returns the main modal element.\n */\n public getModalDiv(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal');\n }\n\n /**\n * Returns the modal's content element.\n */\n public getModalContentEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-content');\n }\n\n /**\n * Returns the modal's footer element.\n */\n public getModalFooterEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-footer');\n }\n\n /**\n * Returns the modal's header element.\n */\n public getModalHeaderEl(): any {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-header');\n }\n\n #checkModalElement(): void {\n if (!document.contains(this.#modalElement)) {\n throw new Error('Modal element no longer exists. Was the modal closed?');\n }\n }\n\n #getModalDialogElement(): HTMLElement {\n this.#checkModalElement();\n // We can always know that the dialog element will exist if the modal is open and exists.\n return this.#modalElement.querySelector('.sky-modal-dialog')!;\n }\n}\n","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyConfirmButtonStyleType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n * @internal\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\n public static hostSelector = '.sky-confirm-buttons .sky-btn';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyConfirmButtonHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyConfirmButtonHarnessFilters,\n ): HarnessPredicate<SkyConfirmButtonHarness> {\n return new HarnessPredicate(SkyConfirmButtonHarness, filters)\n .addOption('text', filters.text, async (harness, text) => {\n const buttonText = await harness.getText();\n return await HarnessPredicate.stringMatches(buttonText, text);\n })\n .addOption('styleType', filters.styleType, async (harness, styleType) => {\n const buttonStyleType = await harness.getStyleType();\n return await HarnessPredicate.stringMatches(buttonStyleType, styleType);\n });\n }\n\n /**\n * Clicks the confirm button.\n */\n public async click(): Promise<void> {\n await (await this.host()).click();\n }\n\n /**\n * Gets the button style of the confirm button.\n */\n public async getStyleType(): Promise<SkyConfirmButtonStyleType> {\n const hostEl = await this.host();\n\n if (await hostEl.hasClass('sky-btn-primary')) {\n return 'primary';\n } else if (await hostEl.hasClass('sky-btn-link')) {\n return 'link';\n } else if (await hostEl.hasClass('sky-btn-danger')) {\n return 'danger';\n }\n return 'default';\n }\n\n /**\n * Gets the text content of the confirm button.\n */\n public async getText(): Promise<string> {\n return await (await this.host()).text();\n }\n}\n","import { ComponentHarness, HarnessQuery } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyConfirmType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarness } from './confirm-button-harness';\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmHarness extends SkyComponentHarness {\n public static hostSelector = 'sky-confirm';\n\n #getBodyEl = this.locatorForOptional('.sky-confirm-body');\n #getButtons = this.locatorForAll(SkyConfirmButtonHarness);\n #getConfirmEl = this.locatorFor('.sky-confirm');\n #getMessageEl = this.locatorFor('.sky-confirm-message');\n\n /**\n * Clicks a confirm button.\n */\n public async clickCustomButton(\n filters: SkyConfirmButtonHarnessFilters,\n ): Promise<void> {\n const buttons = await this.getCustomButtons(filters);\n\n if (buttons.length > 1) {\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n throw new Error(\n `More than one button matches the filter(s): ${JSON.stringify(\n filters,\n )}.`,\n );\n }\n await buttons[0].click();\n }\n\n /**\n * Clicks a confirm button.\n */\n public async clickOkButton(): Promise<void> {\n const type = await this.getType();\n\n if (type === SkyConfirmType.Custom) {\n throw new Error('Cannot click OK button on a confirm of type custom.');\n }\n const buttons = await this.#getButtons();\n await buttons[0].click();\n }\n\n /**\n * Gets the body of the confirm component.\n */\n public async getBodyText(): Promise<string | undefined> {\n return await (await this.#getBodyEl())?.text();\n }\n\n /**\n * Gets the confirm component's custom buttons.\n */\n public async getCustomButtons(\n filters?: SkyConfirmButtonHarnessFilters,\n ): Promise<SkyConfirmButtonHarness[]> {\n const confirmType = await this.getType();\n\n if (confirmType === SkyConfirmType.OK) {\n throw new Error('Cannot get custom buttons for confirm of type OK.');\n }\n\n const harnesses = await this.#queryHarnesses(\n SkyConfirmButtonHarness.with(filters || {}),\n );\n\n if (filters && harnesses.length === 0) {\n // Stringify the regular expression so that it's readable in the console log.\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n\n throw new Error(\n `Could not find buttons matching filter(s): ${JSON.stringify(\n filters,\n )}.`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Gets the message of the confirm component.\n */\n public async getMessageText(): Promise<string> {\n return await (await this.#getMessageEl()).text();\n }\n\n /**\n * Gets the type of the confirm component.\n */\n public async getType(): Promise<SkyConfirmType> {\n const confirmEl = await this.#getConfirmEl();\n if (await confirmEl.hasClass('sky-confirm-type-ok')) {\n return SkyConfirmType.OK;\n }\n\n return SkyConfirmType.Custom;\n }\n\n /**\n * Whether the whitespace is preserved on the confirm component.\n */\n public async isWhiteSpacePreserved(): Promise<boolean> {\n return await (\n await this.#getMessageEl()\n ).hasClass('sky-confirm-preserve-white-space');\n }\n\n /**\n * Returns child harnesses.\n */\n async #queryHarnesses<T extends ComponentHarness>(\n harness: HarnessQuery<T>,\n ): Promise<T[]> {\n return await this.locatorForAll(harness)();\n }\n}\n","import { SkyConfirmCloseEventArgs, SkyConfirmConfig } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the confirm service\n * and handles interactions with confirm dialogs.\n */\nexport abstract class SkyConfirmTestingController {\n /**\n * Closes the confirm dialog with the \"cancel\" action.\n */\n public abstract cancel(): void;\n /**\n * Throws if a confirm dialog is open.\n */\n public abstract expectNone(): void;\n /**\n * Throws if the open confirm dialog does not match the provided configuration.\n * @param config\n */\n public abstract expectOpen(config: SkyConfirmConfig): void;\n /**\n * Closes the confirm dialog with the provided action.\n */\n public abstract close(args: SkyConfirmCloseEventArgs): void;\n /**\n * Closes the confirm dialog with the \"ok\" action.\n */\n public abstract ok(): void;\n}\n","import {\n SkyConfirmButtonConfig,\n SkyConfirmCloseEventArgs,\n SkyConfirmConfig,\n SkyConfirmInstance,\n SkyConfirmServiceInterface,\n SkyConfirmType,\n} from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\n\ninterface TestSubject {\n buttons: SkyConfirmButtonConfig[];\n config: SkyConfirmConfig;\n instance: SkyConfirmInstance;\n}\n\nfunction assertConfirmOpen(\n value: TestSubject | undefined,\n): asserts value is TestSubject {\n if (value === undefined) {\n throw new Error('A confirm dialog is expected to be open but is closed.');\n }\n\n return;\n}\n\nfunction assertConfirmClosed(\n value: TestSubject | undefined,\n): asserts value is undefined {\n if (value !== undefined) {\n throw new Error('A confirm dialog is expected to be closed but is open.');\n }\n\n return;\n}\n\nfunction isButtonConfigArray(val: unknown): val is SkyConfirmButtonConfig[] {\n return (\n Array.isArray(val) && (val.length === 0 || val[0].action !== undefined)\n );\n}\n\nfunction buttonConfigMatches(\n actual: SkyConfirmButtonConfig,\n expected: SkyConfirmButtonConfig,\n): boolean {\n return (\n expected.action === actual.action &&\n expected.text === actual.text &&\n expected.styleType === actual.styleType\n );\n}\n\n/**\n * @internal\n */\nexport class SkyConfirmTestingService\n extends SkyConfirmTestingController\n implements SkyConfirmServiceInterface\n{\n #testSubject: TestSubject | undefined;\n\n public cancel(): void {\n this.close({ action: 'cancel' });\n }\n\n public ok(): void {\n this.close({ action: 'ok' });\n }\n\n public close(args: SkyConfirmCloseEventArgs): void {\n assertConfirmOpen(this.#testSubject);\n\n const isActionPermitted = this.#testSubject?.buttons.some(\n (b) => b.action === args.action,\n );\n\n if (isActionPermitted) {\n this.#testSubject.instance.close(args);\n this.#testSubject = undefined;\n } else {\n throw new Error(\n `The confirm dialog does not have a button configured for the \"${args.action}\" action.`,\n );\n }\n }\n\n public expectNone(): void {\n assertConfirmClosed(this.#testSubject);\n }\n\n public expectOpen(expectedConfig: SkyConfirmConfig): void {\n assertConfirmOpen(this.#testSubject);\n\n const actualConfig = this.#testSubject.config;\n\n for (const [key, expectedValue] of Object.entries(expectedConfig)) {\n const k = key as keyof typeof expectedConfig;\n const actualValue = actualConfig[k];\n\n if (\n isButtonConfigArray(expectedValue) &&\n isButtonConfigArray(actualValue)\n ) {\n if (expectedValue.length !== actualValue.length) throwDetailedError();\n\n expectedValue.forEach((expectedButton, index) => {\n if (!buttonConfigMatches(expectedButton, actualValue[index])) {\n throwDetailedError();\n }\n });\n } else if (actualValue !== expectedValue) {\n throwDetailedError();\n }\n }\n\n function throwDetailedError(): never {\n throw new Error(`Expected a confirm dialog to be open with a specific configuration.\nExpected:\n${JSON.stringify(expectedConfig, undefined, 2)}\nActual:\n${JSON.stringify(actualConfig, undefined, 2)}\n`);\n }\n }\n\n public open(config: SkyConfirmConfig): SkyConfirmInstance {\n assertConfirmClosed(this.#testSubject);\n\n const instance = new SkyConfirmInstance();\n const testSubject: TestSubject = {\n buttons: [],\n config,\n instance,\n };\n\n switch (config.type) {\n case SkyConfirmType.Custom:\n config.buttons?.forEach((b) => {\n testSubject.buttons.push({ action: b.action, text: b.text });\n });\n break;\n\n case SkyConfirmType.OK:\n default:\n testSubject.buttons.push({ action: 'ok', text: 'Ok' });\n testSubject.buttons.push({ action: 'cancel', text: 'Cancel' });\n break;\n }\n\n this.#testSubject = testSubject;\n\n return instance;\n }\n}\n","import { Provider } from '@angular/core';\nimport { SkyConfirmService } from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\nimport { SkyConfirmTestingService } from './confirm-testing.service';\n\n/**\n * @internal\n */\nexport function provideConfirmTesting(): Provider[] {\n return [\n SkyConfirmTestingService,\n {\n provide: SkyConfirmService,\n useExisting: SkyConfirmTestingService,\n },\n {\n provide: SkyConfirmTestingController,\n useExisting: SkyConfirmTestingService,\n },\n ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideConfirmTesting } from './provide-confirm-testing';\n\n/**\n * Configures the `SkyConfirmTestingController` as the backend for the `SkyConfirmService`.\n */\n@NgModule({\n providers: [provideConfirmTesting()],\n})\nexport class SkyConfirmTestingModule {}\n","import { Type } from '@angular/core';\nimport { SkyModalCloseArgs } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the modal service\n * and handles interactions with modal instances. For testing interactions\n * with the modal component itself, use the `SkyModalHarness`.\n */\nexport abstract class SkyModalTestingController {\n /**\n * Closes the topmost modal with the provided arguments.\n * @param args Arguments to pass to the modal's close event.\n */\n public abstract closeTopModal(args?: SkyModalCloseArgs): void;\n\n /**\n * Throws if the provided value does not match the number of open modals.\n */\n public abstract expectCount(value: number): void;\n\n /**\n * Throws if modals are open.\n */\n public abstract expectNone(): void;\n\n /**\n * Throws if the given criteria does not match the topmost open modal.\n */\n public abstract expectOpen<TComponent>(component: Type<TComponent>): void;\n}\n","import { Injectable, OnDestroy, StaticProvider, Type } from '@angular/core';\nimport {\n SkyModalCloseArgs,\n SkyModalConfigurationInterface,\n SkyModalInstance,\n SkyModalServiceInterface,\n} from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\n\ninterface TestSubject<T = unknown> {\n component: Type<T>;\n config: SkyModalConfigurationInterface | StaticProvider[] | undefined;\n instance: SkyModalInstance;\n}\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyModalTestingService\n extends SkyModalTestingController\n implements OnDestroy, SkyModalServiceInterface\n{\n readonly #modals = new Map<SkyModalInstance, TestSubject>();\n\n public ngOnDestroy(): void {\n for (const instance of this.#modals.keys()) {\n instance.close();\n }\n }\n\n public closeTopModal(args?: SkyModalCloseArgs): void {\n const modal = this.#getTopmostModal();\n if (!modal) {\n throw new Error(\n 'Expected to close the topmost modal, but no modals are open.',\n );\n }\n\n modal.instance.close(args?.data, args?.reason);\n }\n\n public expectCount(value: number): void {\n const count = this.#modals.size;\n if (count !== value) {\n throw new Error(\n `Expected ${value} open ${value === 1 ? 'modal' : 'modals'}, but ${count} ${count === 1 ? 'is' : 'are'} open.`,\n );\n }\n }\n\n public expectNone(): void {\n const count = this.#modals.size;\n if (count > 0) {\n throw new Error(\n `Expected no modals to be open, but there ${count === 1 ? 'is' : 'are'} ${count} open.`,\n );\n }\n }\n\n public expectOpen<TComponent>(component: Type<TComponent>): void {\n const modal = this.#getTopmostModal();\n if (!modal) {\n throw new Error(\n 'A modal is expected to be open, but no modals are open.',\n );\n }\n\n if (modal.component !== component) {\n throw new Error(\n `Expected the topmost modal to be of type ${component.name}, but it is of type ${modal.component.name}.`,\n );\n }\n }\n\n public open<TComponent>(\n component: Type<TComponent>,\n config?: SkyModalConfigurationInterface | StaticProvider[],\n ): SkyModalInstance {\n const instance = new SkyModalInstance();\n\n instance.closed.subscribe(() => {\n this.#modals.delete(instance);\n });\n\n this.#modals.set(instance, { component, config, instance });\n\n return instance;\n }\n\n #getTopmostModal(): TestSubject | undefined {\n return Array.from(this.#modals.values()).pop();\n }\n}\n","import { Provider } from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\nimport { SkyModalTestingService } from './modal-testing.service';\n\n/**\n * @internal\n */\nexport function provideModalTesting(): Provider[] {\n return [\n SkyModalTestingService,\n {\n provide: SkyModalService,\n useExisting: SkyModalTestingService,\n },\n {\n provide: SkyModalTestingController,\n useExisting: SkyModalTestingService,\n },\n ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideModalTesting } from './provide-modal-testing';\n\n/**\n * Configures the `SkyModalTestingController` as the implementation for the `SkyModalService`.\n */\n@NgModule({\n providers: [provideModalTesting()],\n})\nexport class SkyModalTestingModule {}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { TemplateRef } from '@angular/core';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyModalHarnessFilters } from './modal-harness-filters';\n\n/**\n * Harness for interacting with a modal component in tests.\n */\nexport class SkyModalHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-modal';\n\n #getModal = this.locatorFor('.sky-modal');\n #getModalDialog = this.locatorFor('.sky-modal-dialog');\n #getModalHeading = this.locatorFor('.sky-modal-heading');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyModalHarness` that meets certain criteria\n */\n public static with(\n filters: SkyModalHarnessFilters,\n ): HarnessPredicate<SkyModalHarness> {\n return SkyModalHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Clicks the help inline button.\n */\n public async clickHelpInline(): Promise<void> {\n await (await this.#getHelpInline()).click();\n }\n\n /**\n * Gets the aria-describedBy property of the modal.\n * @deprecated\n */\n public async getAriaDescribedBy(): Promise<string | null> {\n return await (\n await this.#getModalDialog()\n ).getAttribute('aria-describedby');\n }\n\n /**\n * Gets the aria-labelledBy property of the modal.\n * @deprecated\n */\n public async getAriaLabelledBy(): Promise<string | null> {\n return await (await this.#getModalDialog()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the role of the modal.\n */\n public async getAriaRole(): Promise<string | null> {\n return await (await this.#getModalDialog()).getAttribute('role');\n }\n\n /**\n * Gets the modal's heading text.\n */\n public async getHeadingText(): Promise<string | undefined> {\n return await (await this.#getModalHeading()).text();\n }\n\n /**\n * Gets the help popover content.\n */\n public async getHelpPopoverContent(): Promise<\n TemplateRef<unknown> | string | undefined\n > {\n return await (await this.#getHelpInline()).getPopoverContent();\n }\n\n /**\n * Gets the help popover title.\n */\n public async getHelpPopoverTitle(): Promise<string | undefined> {\n return await (await this.#getHelpInline()).getPopoverTitle();\n }\n\n /**\n * Gets the modal size.\n */\n public async getSize(): Promise<string> {\n if (await this.isFullPage()) {\n throw new Error(\n 'Size cannot be determined because size property is overridden when modal is full page',\n );\n }\n\n const modal = await this.#getModal();\n\n if (await modal.hasClass('sky-modal-small')) {\n return 'small';\n }\n\n if (await modal.hasClass('sky-modal-large')) {\n return 'large';\n }\n\n return 'medium';\n }\n\n /**\n * Gets the wrapper class of the modal.\n */\n public async getWrapperClass(): Promise<string | undefined> {\n return await (await this.host()).getProperty('className');\n }\n\n /**\n * Whether the modal is full page.\n */\n public async isFullPage(): Promise<boolean> {\n const modal = this.#getModal();\n return await (await modal).hasClass('sky-modal-full-page');\n }\n\n /**\n * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.\n */\n public async isDirty(): Promise<boolean> {\n const modalHost = await this.host();\n const isDirtyAttribute = await modalHost.getAttribute(\n 'data-sky-modal-is-dirty',\n );\n return isDirtyAttribute === 'true';\n }\n\n async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n if (harness) {\n return harness;\n }\n\n throw Error('No help inline found.');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}