@skyux/modals 8.7.2 → 9.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/documentation.json +56 -56
  2. package/esm2022/lib/modules/confirm/confirm.component.mjs +112 -0
  3. package/{esm2020 → esm2022}/lib/modules/confirm/confirm.module.mjs +13 -13
  4. package/esm2022/lib/modules/confirm/confirm.service.mjs +54 -0
  5. package/esm2022/lib/modules/modal/modal-adapter.service.mjs +99 -0
  6. package/esm2022/lib/modules/modal/modal-component-adapter.service.mjs +101 -0
  7. package/{esm2020 → esm2022}/lib/modules/modal/modal-configuration.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/modules/modal/modal-content.component.mjs +4 -4
  9. package/esm2022/lib/modules/modal/modal-errors.service.mjs +21 -0
  10. package/{esm2020 → esm2022}/lib/modules/modal/modal-footer.component.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/modules/modal/modal-header.component.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/modules/modal/modal-host-context.mjs +4 -4
  13. package/esm2022/lib/modules/modal/modal-host.component.mjs +163 -0
  14. package/esm2022/lib/modules/modal/modal-host.service.mjs +62 -0
  15. package/esm2022/lib/modules/modal/modal-instance.mjs +123 -0
  16. package/esm2022/lib/modules/modal/modal-is-dirty.directive.mjs +94 -0
  17. package/esm2022/lib/modules/modal/modal-scroll-shadow.directive.mjs +129 -0
  18. package/esm2022/lib/modules/modal/modal.component.mjs +229 -0
  19. package/{esm2020 → esm2022}/lib/modules/modal/modal.module.mjs +29 -29
  20. package/esm2022/lib/modules/modal/modal.service.mjs +97 -0
  21. package/esm2022/lib/modules/shared/sky-modals-resources.module.mjs +61 -0
  22. package/esm2022/testing/confirm/confirm-button-harness.mjs +46 -0
  23. package/esm2022/testing/confirm/confirm-harness.mjs +90 -0
  24. package/esm2022/testing/modal/modal-harness.mjs +75 -0
  25. package/esm2022/testing/modal-fixture.mjs +143 -0
  26. package/{fesm2020 → fesm2022}/skyux-modals-testing.mjs +60 -73
  27. package/{fesm2020 → fesm2022}/skyux-modals-testing.mjs.map +1 -1
  28. package/fesm2022/skyux-modals.mjs +1502 -0
  29. package/{fesm2015 → fesm2022}/skyux-modals.mjs.map +1 -1
  30. package/lib/modules/modal/modal-is-dirty.directive.d.ts +1 -1
  31. package/lib/modules/modal/modal.component.d.ts +1 -1
  32. package/package.json +16 -24
  33. package/esm2020/lib/modules/confirm/confirm.component.mjs +0 -114
  34. package/esm2020/lib/modules/confirm/confirm.service.mjs +0 -57
  35. package/esm2020/lib/modules/modal/modal-adapter.service.mjs +0 -101
  36. package/esm2020/lib/modules/modal/modal-component-adapter.service.mjs +0 -104
  37. package/esm2020/lib/modules/modal/modal-errors.service.mjs +0 -24
  38. package/esm2020/lib/modules/modal/modal-host.component.mjs +0 -164
  39. package/esm2020/lib/modules/modal/modal-host.service.mjs +0 -65
  40. package/esm2020/lib/modules/modal/modal-instance.mjs +0 -127
  41. package/esm2020/lib/modules/modal/modal-is-dirty.directive.mjs +0 -93
  42. package/esm2020/lib/modules/modal/modal-scroll-shadow.directive.mjs +0 -127
  43. package/esm2020/lib/modules/modal/modal.component.mjs +0 -228
  44. package/esm2020/lib/modules/modal/modal.service.mjs +0 -99
  45. package/esm2020/lib/modules/shared/sky-modals-resources.module.mjs +0 -61
  46. package/esm2020/testing/confirm/confirm-button-harness.mjs +0 -46
  47. package/esm2020/testing/confirm/confirm-harness.mjs +0 -97
  48. package/esm2020/testing/modal/modal-harness.mjs +0 -81
  49. package/esm2020/testing/modal-fixture.mjs +0 -145
  50. package/fesm2015/skyux-modals-testing.mjs +0 -409
  51. package/fesm2015/skyux-modals-testing.mjs.map +0 -1
  52. package/fesm2015/skyux-modals.mjs +0 -1522
  53. package/fesm2020/skyux-modals.mjs +0 -1510
  54. package/fesm2020/skyux-modals.mjs.map +0 -1
  55. /package/{esm2020 → esm2022}/index.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-action.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-config.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-style-type.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-closed-event-args.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-config-token.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-config.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-instance.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-type.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/modules/modal/modal-before-close-handler.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/modules/modal/modal-close-args.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/modules/modal/modal-error.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/modules/modal/modal-host-context-args.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/modules/modal/modal-scroll-shadow-event-args.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/modules/modal/modal.interface.mjs +0 -0
  71. /package/{esm2020 → esm2022}/skyux-modals.mjs +0 -0
  72. /package/{esm2020 → esm2022}/testing/confirm/confirm-button-harness-filters.mjs +0 -0
  73. /package/{esm2020 → esm2022}/testing/modal/modal-harness-filters.mjs +0 -0
  74. /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
  75. /package/{esm2020 → esm2022}/testing/skyux-modals-testing.mjs +0 -0
@@ -0,0 +1,90 @@
1
+ import { SkyComponentHarness } from '@skyux/core/testing';
2
+ import { SkyConfirmType } from '@skyux/modals';
3
+ import { SkyConfirmButtonHarness } from './confirm-button-harness';
4
+ /**
5
+ * Harness for interacting with a confirm component in tests.
6
+ */
7
+ export class SkyConfirmHarness extends SkyComponentHarness {
8
+ static { this.hostSelector = 'sky-confirm'; }
9
+ #getBodyEl = this.locatorForOptional('.sky-confirm-body');
10
+ #getButtons = this.locatorForAll(SkyConfirmButtonHarness);
11
+ #getConfirmEl = this.locatorFor('.sky-confirm');
12
+ #getMessageEl = this.locatorFor('.sky-confirm-message');
13
+ /**
14
+ * Clicks a confirm button.
15
+ */
16
+ async clickCustomButton(filters) {
17
+ const buttons = await this.getCustomButtons(filters);
18
+ if (buttons.length > 1) {
19
+ if (filters.text instanceof RegExp) {
20
+ filters.text = filters.text.toString();
21
+ }
22
+ throw new Error(`More than one button matches the filter(s): ${JSON.stringify(filters)}.`);
23
+ }
24
+ await buttons[0].click();
25
+ }
26
+ /**
27
+ * Clicks a confirm button.
28
+ */
29
+ async clickOkButton() {
30
+ const type = await this.getType();
31
+ if (type === SkyConfirmType.Custom) {
32
+ throw new Error('Cannot click OK button on a confirm of type custom.');
33
+ }
34
+ const buttons = await this.#getButtons();
35
+ await buttons[0].click();
36
+ }
37
+ /**
38
+ * Gets the body of the confirm component.
39
+ */
40
+ async getBodyText() {
41
+ return (await this.#getBodyEl())?.text();
42
+ }
43
+ /**
44
+ * Gets the confirm component's custom buttons.
45
+ */
46
+ async getCustomButtons(filters) {
47
+ const confirmType = await this.getType();
48
+ if (confirmType === SkyConfirmType.OK) {
49
+ throw new Error('Cannot get custom buttons for confirm of type OK.');
50
+ }
51
+ const harnesses = await this.#queryHarnesses(SkyConfirmButtonHarness.with(filters || {}));
52
+ if (filters && harnesses.length === 0) {
53
+ // Stringify the regular expression so that it's readable in the console log.
54
+ if (filters.text instanceof RegExp) {
55
+ filters.text = filters.text.toString();
56
+ }
57
+ throw new Error(`Could not find buttons matching filter(s): ${JSON.stringify(filters)}.`);
58
+ }
59
+ return harnesses;
60
+ }
61
+ /**
62
+ * Gets the message of the confirm component.
63
+ */
64
+ async getMessageText() {
65
+ return (await this.#getMessageEl()).text();
66
+ }
67
+ /**
68
+ * Gets the type of the confirm component.
69
+ */
70
+ async getType() {
71
+ const confirmEl = await this.#getConfirmEl();
72
+ if (await confirmEl.hasClass('sky-confirm-type-ok')) {
73
+ return SkyConfirmType.OK;
74
+ }
75
+ return SkyConfirmType.Custom;
76
+ }
77
+ /**
78
+ * Whether the whitespace is preserved on the confirm component.
79
+ */
80
+ async isWhiteSpacePreserved() {
81
+ return (await this.#getMessageEl()).hasClass('sky-confirm-preserve-white-space');
82
+ }
83
+ /**
84
+ * Returns child harnesses.
85
+ */
86
+ async #queryHarnesses(harness) {
87
+ return this.locatorForAll(harness)();
88
+ }
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy90ZXN0aW5nL3NyYy9jb25maXJtL2NvbmZpcm0taGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR25FOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG1CQUFtQjthQUMxQyxpQkFBWSxHQUFHLGFBQWEsQ0FBQztJQUUzQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUQsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRXhEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUM1QixPQUF1QztRQUV2QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLElBQUksT0FBTyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4QztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsK0NBQStDLElBQUksQ0FBQyxTQUFTLENBQzNELE9BQU8sQ0FDUixHQUFHLENBQ0wsQ0FBQztTQUNIO1FBQ0QsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEMsSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsV0FBVztRQUN0QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQzNCLE9BQXdDO1FBRXhDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpDLElBQUksV0FBVyxLQUFLLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUMxQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO1FBRUYsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsNkVBQTZFO1lBQzdFLElBQUksT0FBTyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4QztZQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQThDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDekUsQ0FBQztTQUNIO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGNBQWM7UUFDekIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0MsSUFBSSxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUNuRCxPQUFPLGNBQWMsQ0FBQyxFQUFFLENBQUM7U0FDMUI7UUFFRCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQjtRQUNoQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQzFDLGtDQUFrQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsT0FBd0I7UUFFeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NRdWVyeSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7IFNreUNvbXBvbmVudEhhcm5lc3MgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IFNreUNvbmZpcm1UeXBlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5cbmltcG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzIH0gZnJvbSAnLi9jb25maXJtLWJ1dHRvbi1oYXJuZXNzJztcbmltcG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vY29uZmlybS1idXR0b24taGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgY29uZmlybSBjb21wb25lbnQgaW4gdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lDb25maXJtSGFybmVzcyBleHRlbmRzIFNreUNvbXBvbmVudEhhcm5lc3Mge1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdza3ktY29uZmlybSc7XG5cbiAgI2dldEJvZHlFbCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcuc2t5LWNvbmZpcm0tYm9keScpO1xuICAjZ2V0QnV0dG9ucyA9IHRoaXMubG9jYXRvckZvckFsbChTa3lDb25maXJtQnV0dG9uSGFybmVzcyk7XG4gICNnZXRDb25maXJtRWwgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktY29uZmlybScpO1xuICAjZ2V0TWVzc2FnZUVsID0gdGhpcy5sb2NhdG9yRm9yKCcuc2t5LWNvbmZpcm0tbWVzc2FnZScpO1xuXG4gIC8qKlxuICAgKiBDbGlja3MgYSBjb25maXJtIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGlja0N1c3RvbUJ1dHRvbihcbiAgICBmaWx0ZXJzOiBTa3lDb25maXJtQnV0dG9uSGFybmVzc0ZpbHRlcnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnV0dG9ucyA9IGF3YWl0IHRoaXMuZ2V0Q3VzdG9tQnV0dG9ucyhmaWx0ZXJzKTtcblxuICAgIGlmIChidXR0b25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChmaWx0ZXJzLnRleHQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgZmlsdGVycy50ZXh0ID0gZmlsdGVycy50ZXh0LnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNb3JlIHRoYW4gb25lIGJ1dHRvbiBtYXRjaGVzIHRoZSBmaWx0ZXIocyk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApfS5gXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBidXR0b25zWzBdLmNsaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIGEgY29uZmlybSBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tPa0J1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0eXBlID0gYXdhaXQgdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBpZiAodHlwZSA9PT0gU2t5Q29uZmlybVR5cGUuQ3VzdG9tKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjbGljayBPSyBidXR0b24gb24gYSBjb25maXJtIG9mIHR5cGUgY3VzdG9tLicpO1xuICAgIH1cbiAgICBjb25zdCBidXR0b25zID0gYXdhaXQgdGhpcy4jZ2V0QnV0dG9ucygpO1xuICAgIGF3YWl0IGJ1dHRvbnNbMF0uY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBib2R5IG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCb2R5VGV4dCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0Qm9keUVsKCkpPy50ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZmlybSBjb21wb25lbnQncyBjdXN0b20gYnV0dG9ucy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDdXN0b21CdXR0b25zKFxuICAgIGZpbHRlcnM/OiBTa3lDb25maXJtQnV0dG9uSGFybmVzc0ZpbHRlcnNcbiAgKTogUHJvbWlzZTxTa3lDb25maXJtQnV0dG9uSGFybmVzc1tdPiB7XG4gICAgY29uc3QgY29uZmlybVR5cGUgPSBhd2FpdCB0aGlzLmdldFR5cGUoKTtcblxuICAgIGlmIChjb25maXJtVHlwZSA9PT0gU2t5Q29uZmlybVR5cGUuT0spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBjdXN0b20gYnV0dG9ucyBmb3IgY29uZmlybSBvZiB0eXBlIE9LLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhcm5lc3NlcyA9IGF3YWl0IHRoaXMuI3F1ZXJ5SGFybmVzc2VzKFxuICAgICAgU2t5Q29uZmlybUJ1dHRvbkhhcm5lc3Mud2l0aChmaWx0ZXJzIHx8IHt9KVxuICAgICk7XG5cbiAgICBpZiAoZmlsdGVycyAmJiBoYXJuZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTdHJpbmdpZnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzbyB0aGF0IGl0J3MgcmVhZGFibGUgaW4gdGhlIGNvbnNvbGUgbG9nLlxuICAgICAgaWYgKGZpbHRlcnMudGV4dCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBmaWx0ZXJzLnRleHQgPSBmaWx0ZXJzLnRleHQudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgYnV0dG9ucyBtYXRjaGluZyBmaWx0ZXIocyk6ICR7SlNPTi5zdHJpbmdpZnkoZmlsdGVycyl9LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhcm5lc3NlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRNZXNzYWdlVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0TWVzc2FnZUVsKCkpLnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRUeXBlKCk6IFByb21pc2U8U2t5Q29uZmlybVR5cGU+IHtcbiAgICBjb25zdCBjb25maXJtRWwgPSBhd2FpdCB0aGlzLiNnZXRDb25maXJtRWwoKTtcbiAgICBpZiAoYXdhaXQgY29uZmlybUVsLmhhc0NsYXNzKCdza3ktY29uZmlybS10eXBlLW9rJykpIHtcbiAgICAgIHJldHVybiBTa3lDb25maXJtVHlwZS5PSztcbiAgICB9XG5cbiAgICByZXR1cm4gU2t5Q29uZmlybVR5cGUuQ3VzdG9tO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkIG9uIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1doaXRlU3BhY2VQcmVzZXJ2ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRNZXNzYWdlRWwoKSkuaGFzQ2xhc3MoXG4gICAgICAnc2t5LWNvbmZpcm0tcHJlc2VydmUtd2hpdGUtc3BhY2UnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNoaWxkIGhhcm5lc3Nlcy5cbiAgICovXG4gIGFzeW5jICNxdWVyeUhhcm5lc3NlczxUIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcz4oXG4gICAgaGFybmVzczogSGFybmVzc1F1ZXJ5PFQ+XG4gICk6IFByb21pc2U8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYXRvckZvckFsbChoYXJuZXNzKSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,75 @@
1
+ import { SkyComponentHarness } from '@skyux/core/testing';
2
+ /**
3
+ * Harness for interacting with a modal component in tests.
4
+ */
5
+ export class SkyModalHarness extends SkyComponentHarness {
6
+ /**
7
+ * @internal
8
+ */
9
+ static { this.hostSelector = 'sky-modal'; }
10
+ #getModal = this.locatorFor('.sky-modal');
11
+ #getModalDialog = this.locatorFor('.sky-modal-dialog');
12
+ /**
13
+ * Gets a `HarnessPredicate` that can be used to search for a
14
+ * `SkyModalHarness` that meets certain criteria
15
+ */
16
+ static with(filters) {
17
+ return SkyModalHarness.getDataSkyIdPredicate(filters);
18
+ }
19
+ /**
20
+ * Gets the aria-describedBy property of the modal
21
+ */
22
+ async getAriaDescribedBy() {
23
+ return (await this.#getModalDialog()).getAttribute('aria-describedby');
24
+ }
25
+ /**
26
+ * Gets the aria-labelledBy property of the modal
27
+ */
28
+ async getAriaLabelledBy() {
29
+ return (await this.#getModalDialog()).getAttribute('aria-labelledby');
30
+ }
31
+ /**
32
+ * Gets the role of the modal.
33
+ */
34
+ async getAriaRole() {
35
+ return (await this.#getModalDialog()).getAttribute('role');
36
+ }
37
+ /**
38
+ * Gets the modal size.
39
+ */
40
+ async getSize() {
41
+ if (await this.isFullPage()) {
42
+ throw new Error('Size cannot be determined because size property is overridden when modal is full page');
43
+ }
44
+ const modal = await this.#getModal();
45
+ if (await modal.hasClass('sky-modal-small')) {
46
+ return 'small';
47
+ }
48
+ if (await modal.hasClass('sky-modal-large')) {
49
+ return 'large';
50
+ }
51
+ return 'medium';
52
+ }
53
+ /**
54
+ * Gets the wrapper class of the modal.
55
+ */
56
+ async getWrapperClass() {
57
+ return await (await this.host()).getProperty('className');
58
+ }
59
+ /**
60
+ * Whether the modal is full page.
61
+ */
62
+ async isFullPage() {
63
+ const modal = this.#getModal();
64
+ return (await modal).hasClass('sky-modal-full-page');
65
+ }
66
+ /**
67
+ * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.
68
+ */
69
+ async isDirty() {
70
+ const modalHost = await this.host();
71
+ const isDirtyAttribute = await modalHost.getAttribute('data-sky-modal-is-dirty');
72
+ return isDirtyAttribute === 'true';
73
+ }
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvbW9kYWwvbW9kYWwtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLG1CQUFtQjtJQUN0RDs7T0FFRzthQUNXLGlCQUFZLEdBQUcsV0FBVyxDQUFDO0lBRXpDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFdkQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsT0FBK0I7UUFFL0IsT0FBTyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUZBQXVGLENBQ3hGLENBQUM7U0FDSDtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXJDLElBQUksTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDM0MsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGVBQWU7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUNuRCx5QkFBeUIsQ0FDMUIsQ0FBQztRQUNGLE9BQU8sZ0JBQWdCLEtBQUssTUFBTSxDQUFDO0lBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgU2t5Q29tcG9uZW50SGFybmVzcyB9IGZyb20gJ0Bza3l1eC9jb3JlL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBTa3lNb2RhbEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9tb2RhbC1oYXJuZXNzLWZpbHRlcnMnO1xuXG4vKipcbiAqIEhhcm5lc3MgZm9yIGludGVyYWN0aW5nIHdpdGggYSBtb2RhbCBjb21wb25lbnQgaW4gdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lNb2RhbEhhcm5lc3MgZXh0ZW5kcyBTa3lDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnc2t5LW1vZGFsJztcblxuICAjZ2V0TW9kYWwgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktbW9kYWwnKTtcbiAgI2dldE1vZGFsRGlhbG9nID0gdGhpcy5sb2NhdG9yRm9yKCcuc2t5LW1vZGFsLWRpYWxvZycpO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lNb2RhbEhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoKFxuICAgIGZpbHRlcnM6IFNreU1vZGFsSGFybmVzc0ZpbHRlcnNcbiAgKTogSGFybmVzc1ByZWRpY2F0ZTxTa3lNb2RhbEhhcm5lc3M+IHtcbiAgICByZXR1cm4gU2t5TW9kYWxIYXJuZXNzLmdldERhdGFTa3lJZFByZWRpY2F0ZShmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhcmlhLWRlc2NyaWJlZEJ5IHByb3BlcnR5IG9mIHRoZSBtb2RhbFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFyaWFEZXNjcmliZWRCeSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldE1vZGFsRGlhbG9nKCkpLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFyaWEtbGFiZWxsZWRCeSBwcm9wZXJ0eSBvZiB0aGUgbW9kYWxcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBcmlhTGFiZWxsZWRCeSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldE1vZGFsRGlhbG9nKCkpLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcm9sZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QXJpYVJvbGUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRNb2RhbERpYWxvZygpKS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtb2RhbCBzaXplLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNpemUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5pc0Z1bGxQYWdlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1NpemUgY2Fubm90IGJlIGRldGVybWluZWQgYmVjYXVzZSBzaXplIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gd2hlbiBtb2RhbCBpcyBmdWxsIHBhZ2UnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy4jZ2V0TW9kYWwoKTtcblxuICAgIGlmIChhd2FpdCBtb2RhbC5oYXNDbGFzcygnc2t5LW1vZGFsLXNtYWxsJykpIHtcbiAgICAgIHJldHVybiAnc21hbGwnO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCBtb2RhbC5oYXNDbGFzcygnc2t5LW1vZGFsLWxhcmdlJykpIHtcbiAgICAgIHJldHVybiAnbGFyZ2UnO1xuICAgIH1cblxuICAgIHJldHVybiAnbWVkaXVtJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB3cmFwcGVyIGNsYXNzIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRXcmFwcGVyQ2xhc3MoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuaG9zdCgpKS5nZXRQcm9wZXJ0eSgnY2xhc3NOYW1lJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbW9kYWwgaXMgZnVsbCBwYWdlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzRnVsbFBhZ2UoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLiNnZXRNb2RhbCgpO1xuICAgIHJldHVybiAoYXdhaXQgbW9kYWwpLmhhc0NsYXNzKCdza3ktbW9kYWwtZnVsbC1wYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbW9kYWwgaGFzIHtAbGluayBTa3lNb2RhbElzRGlydHlEaXJlY3RpdmUuaXNEaXJ0eX0gc2V0IHRvIGRpcnR5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzRGlydHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbW9kYWxIb3N0ID0gYXdhaXQgdGhpcy5ob3N0KCk7XG4gICAgY29uc3QgaXNEaXJ0eUF0dHJpYnV0ZSA9IGF3YWl0IG1vZGFsSG9zdC5nZXRBdHRyaWJ1dGUoXG4gICAgICAnZGF0YS1za3ktbW9kYWwtaXMtZGlydHknXG4gICAgKTtcbiAgICByZXR1cm4gaXNEaXJ0eUF0dHJpYnV0ZSA9PT0gJ3RydWUnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Allows interaction with a SKY UX modal component.
3
+ * @internal
4
+ */
5
+ export class SkyModalFixture {
6
+ #modalElement;
7
+ #fixture;
8
+ constructor(fixture, skyTestId) {
9
+ this.#fixture = fixture;
10
+ const modalElement = document.querySelector('sky-modal[data-sky-id="' + skyTestId + '"]');
11
+ if (!modalElement) {
12
+ throw new Error(`No element was found with a \`data-sky-id\` value of "${skyTestId}".`);
13
+ }
14
+ this.#modalElement = modalElement;
15
+ }
16
+ /**
17
+ * The modal component's ARIA describedby attribute.
18
+ */
19
+ get ariaDescribedBy() {
20
+ const modalDialogElement = this.#getModalDialogElement();
21
+ /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide "undefined" */
22
+ const describedByAttribute =
23
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
24
+ modalDialogElement.getAttribute('aria-describedby');
25
+ return describedByAttribute;
26
+ }
27
+ /**
28
+ * The modal component's ARIA labelledby attribute.
29
+ */
30
+ get ariaLabelledBy() {
31
+ const modalDialogElement = this.#getModalDialogElement();
32
+ /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide "undefined" */
33
+ const labelledByAttribute =
34
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
35
+ modalDialogElement.getAttribute('aria-labelledby');
36
+ return labelledByAttribute;
37
+ }
38
+ /**
39
+ * The modal component's role attribute.
40
+ */
41
+ get ariaRole() {
42
+ const modalDialogElement = this.#getModalDialogElement();
43
+ /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide "undefined" */
44
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
45
+ const roleAttribute = modalDialogElement.getAttribute('role');
46
+ return roleAttribute;
47
+ }
48
+ /**
49
+ * Whether or not the modal is a full page modal.
50
+ */
51
+ get fullPage() {
52
+ const modalDivElement = this.getModalDiv();
53
+ return modalDivElement.classList.contains('sky-modal-full-page');
54
+ }
55
+ /**
56
+ * The size of the modal.
57
+ */
58
+ get size() {
59
+ const modalDivElement = this.getModalDiv();
60
+ const possibleSizes = ['small', 'medium', 'large'];
61
+ for (const size of possibleSizes) {
62
+ if (modalDivElement.classList.contains('sky-modal-' + size)) {
63
+ return size;
64
+ }
65
+ }
66
+ return;
67
+ }
68
+ /**
69
+ * Whether or not the modal is set up for tiled content.
70
+ */
71
+ get tiledBody() {
72
+ const modalDivElement = this.getModalDiv();
73
+ return modalDivElement.classList.contains('sky-modal-tiled');
74
+ }
75
+ /**
76
+ * Clicks the modal header's "close" button.
77
+ */
78
+ clickHeaderCloseButton() {
79
+ this.#checkModalElement();
80
+ const closeButton = this.#modalElement.querySelector('.sky-modal .sky-modal-btn-close');
81
+ if (closeButton &&
82
+ window.getComputedStyle(closeButton).display !== 'none') {
83
+ closeButton.click();
84
+ this.#fixture.detectChanges();
85
+ }
86
+ else {
87
+ throw new Error(`No header close button exists.`);
88
+ }
89
+ }
90
+ /**
91
+ * Clicks the modal header's "help" button.
92
+ */
93
+ clickHelpButton() {
94
+ this.#checkModalElement();
95
+ const helpButton = this.#modalElement.querySelector('.sky-modal .sky-modal-header-buttons button[name="help-button"]');
96
+ if (helpButton && window.getComputedStyle(helpButton).display !== 'none') {
97
+ helpButton.click();
98
+ this.#fixture.detectChanges();
99
+ }
100
+ else {
101
+ throw new Error(`No help button exists.`);
102
+ }
103
+ }
104
+ /**
105
+ * Returns the main modal element.
106
+ */
107
+ getModalDiv() {
108
+ this.#checkModalElement();
109
+ return this.#modalElement.querySelector('.sky-modal');
110
+ }
111
+ /**
112
+ * Returns the modal's content element.
113
+ */
114
+ getModalContentEl() {
115
+ this.#checkModalElement();
116
+ return this.#modalElement.querySelector('.sky-modal-content');
117
+ }
118
+ /**
119
+ * Returns the modal's footer element.
120
+ */
121
+ getModalFooterEl() {
122
+ this.#checkModalElement();
123
+ return this.#modalElement.querySelector('.sky-modal-footer');
124
+ }
125
+ /**
126
+ * Returns the modal's header element.
127
+ */
128
+ getModalHeaderEl() {
129
+ this.#checkModalElement();
130
+ return this.#modalElement.querySelector('.sky-modal-header');
131
+ }
132
+ #checkModalElement() {
133
+ if (!document.contains(this.#modalElement)) {
134
+ throw new Error('Modal element no longer exists. Was the modal closed?');
135
+ }
136
+ }
137
+ #getModalDialogElement() {
138
+ this.#checkModalElement();
139
+ // We can always know that the dialog element will exist if the modal is open and exists.
140
+ return this.#modalElement.querySelector('.sky-modal-dialog');
141
+ }
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZml4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvbW9kYWwtZml4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixhQUFhLENBQWM7SUFFM0IsUUFBUSxDQUE0QjtJQUVwQyxZQUFZLE9BQWtDLEVBQUUsU0FBaUI7UUFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDekMseUJBQXlCLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FDOUIsQ0FBQztRQUVqQixJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELFNBQVMsSUFBSSxDQUN2RSxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN6RCxzSUFBc0k7UUFDdEksTUFBTSxvQkFBb0I7UUFDeEIsb0VBQW9FO1FBQ3BFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBRSxDQUFDO1FBQ3ZELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekQsc0lBQXNJO1FBQ3RJLE1BQU0sbUJBQW1CO1FBQ3ZCLG9FQUFvRTtRQUNwRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUUsQ0FBQztRQUV0RCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7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QUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztTQUMxRTtJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIseUZBQXlGO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUUsQ0FBQztJQUNoRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcblxuLyoqXG4gKiBBbGxvd3MgaW50ZXJhY3Rpb24gd2l0aCBhIFNLWSBVWCBtb2RhbCBjb21wb25lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreU1vZGFsRml4dHVyZSB7XG4gICNtb2RhbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICNmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8dW5rbm93bj4sIHNreVRlc3RJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jZml4dHVyZSA9IGZpeHR1cmU7XG4gICAgY29uc3QgbW9kYWxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdza3ktbW9kYWxbZGF0YS1za3ktaWQ9XCInICsgc2t5VGVzdElkICsgJ1wiXSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKCFtb2RhbEVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIGVsZW1lbnQgd2FzIGZvdW5kIHdpdGggYSBcXGBkYXRhLXNreS1pZFxcYCB2YWx1ZSBvZiBcIiR7c2t5VGVzdElkfVwiLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy4jbW9kYWxFbGVtZW50ID0gbW9kYWxFbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RhbCBjb21wb25lbnQncyBBUklBIGRlc2NyaWJlZGJ5IGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXJpYURlc2NyaWJlZEJ5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbW9kYWxEaWFsb2dFbGVtZW50ID0gdGhpcy4jZ2V0TW9kYWxEaWFsb2dFbGVtZW50KCk7XG4gICAgLyogTm9uLW51bGwgYXNzZXJ0aW9uIGFzIG91ciBjb21wb25lbnQgaGFzIGEgZGVmYXVsdCBmb3IgaWYgdGhlIHVzZXIgZG9lcyBub3QgcHJvdmlkZSB0aGlzIGF0dHJpYnV0ZSBvciBpZiB0aGV5IHByb3ZpZGUgXCJ1bmRlZmluZWRcIiAqL1xuICAgIGNvbnN0IGRlc2NyaWJlZEJ5QXR0cmlidXRlID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBtb2RhbERpYWxvZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JykhO1xuICAgIHJldHVybiBkZXNjcmliZWRCeUF0dHJpYnV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbW9kYWwgY29tcG9uZW50J3MgQVJJQSBsYWJlbGxlZGJ5IGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RhbERpYWxvZ0VsZW1lbnQgPSB0aGlzLiNnZXRNb2RhbERpYWxvZ0VsZW1lbnQoKTtcbiAgICAvKiBOb24tbnVsbCBhc3NlcnRpb24gYXMgb3VyIGNvbXBvbmVudCBoYXMgYSBkZWZhdWx0IGZvciBpZiB0aGUgdXNlciBkb2VzIG5vdCBwcm92aWRlIHRoaXMgYXR0cmlidXRlIG9yIGlmIHRoZXkgcHJvdmlkZSBcInVuZGVmaW5lZFwiICovXG4gICAgY29uc3QgbGFiZWxsZWRCeUF0dHJpYnV0ZSA9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgbW9kYWxEaWFsb2dFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JykhO1xuXG4gICAgcmV0dXJuIGxhYmVsbGVkQnlBdHRyaWJ1dGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1vZGFsIGNvbXBvbmVudCdzIHJvbGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGFsRGlhbG9nRWxlbWVudCA9IHRoaXMuI2dldE1vZGFsRGlhbG9nRWxlbWVudCgpO1xuICAgIC8qIE5vbi1udWxsIGFzc2VydGlvbiBhcyBvdXIgY29tcG9uZW50IGhhcyBhIGRlZmF1bHQgZm9yIGlmIHRoZSB1c2VyIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBhdHRyaWJ1dGUgb3IgaWYgdGhleSBwcm92aWRlIFwidW5kZWZpbmVkXCIgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGNvbnN0IHJvbGVBdHRyaWJ1dGUgPSBtb2RhbERpYWxvZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykhO1xuICAgIHJldHVybiByb2xlQXR0cmlidXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb2RhbCBpcyBhIGZ1bGwgcGFnZSBtb2RhbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbW9kYWxEaXZFbGVtZW50ID0gdGhpcy5nZXRNb2RhbERpdigpO1xuICAgIHJldHVybiBtb2RhbERpdkVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktbW9kYWwtZnVsbC1wYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG1vZGFsLlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbW9kYWxEaXZFbGVtZW50ID0gdGhpcy5nZXRNb2RhbERpdigpO1xuICAgIGNvbnN0IHBvc3NpYmxlU2l6ZXMgPSBbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddO1xuXG4gICAgZm9yIChjb25zdCBzaXplIG9mIHBvc3NpYmxlU2l6ZXMpIHtcbiAgICAgIGlmIChtb2RhbERpdkVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktbW9kYWwtJyArIHNpemUpKSB7XG4gICAgICAgIHJldHVybiBzaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW9kYWwgaXMgc2V0IHVwIGZvciB0aWxlZCBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIGdldCB0aWxlZEJvZHkoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbW9kYWxEaXZFbGVtZW50ID0gdGhpcy5nZXRNb2RhbERpdigpO1xuICAgIHJldHVybiBtb2RhbERpdkVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktbW9kYWwtdGlsZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIG1vZGFsIGhlYWRlcidzIFwiY2xvc2VcIiBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgY2xpY2tIZWFkZXJDbG9zZUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLiNjaGVja01vZGFsRWxlbWVudCgpO1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uOiBIVE1MRWxlbWVudCB8IG51bGwgPSB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LW1vZGFsIC5za3ktbW9kYWwtYnRuLWNsb3NlJ1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjbG9zZUJ1dHRvbiAmJlxuICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2xvc2VCdXR0b24pLmRpc3BsYXkgIT09ICdub25lJ1xuICAgICkge1xuICAgICAgY2xvc2VCdXR0b24uY2xpY2soKTtcbiAgICAgIHRoaXMuI2ZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhlYWRlciBjbG9zZSBidXR0b24gZXhpc3RzLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIG1vZGFsIGhlYWRlcidzIFwiaGVscFwiIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBjbGlja0hlbHBCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICBjb25zdCBoZWxwQnV0dG9uOiBIVE1MRWxlbWVudCB8IG51bGwgPSB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LW1vZGFsIC5za3ktbW9kYWwtaGVhZGVyLWJ1dHRvbnMgYnV0dG9uW25hbWU9XCJoZWxwLWJ1dHRvblwiXSdcbiAgICApO1xuXG4gICAgaWYgKGhlbHBCdXR0b24gJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVscEJ1dHRvbikuZGlzcGxheSAhPT0gJ25vbmUnKSB7XG4gICAgICBoZWxwQnV0dG9uLmNsaWNrKCk7XG4gICAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBoZWxwIGJ1dHRvbiBleGlzdHMuYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1haW4gbW9kYWwgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb2RhbERpdigpOiBhbnkge1xuICAgIHRoaXMuI2NoZWNrTW9kYWxFbGVtZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuI21vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LW1vZGFsJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbW9kYWwncyBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kYWxDb250ZW50RWwoKTogYW55IHtcbiAgICB0aGlzLiNjaGVja01vZGFsRWxlbWVudCgpO1xuICAgIHJldHVybiB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNreS1tb2RhbC1jb250ZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbW9kYWwncyBmb290ZXIgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb2RhbEZvb3RlckVsKCk6IGFueSB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICByZXR1cm4gdGhpcy4jbW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktbW9kYWwtZm9vdGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbW9kYWwncyBoZWFkZXIgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb2RhbEhlYWRlckVsKCk6IGFueSB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICByZXR1cm4gdGhpcy4jbW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktbW9kYWwtaGVhZGVyJyk7XG4gIH1cblxuICAjY2hlY2tNb2RhbEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKCFkb2N1bWVudC5jb250YWlucyh0aGlzLiNtb2RhbEVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGFsIGVsZW1lbnQgbm8gbG9uZ2VyIGV4aXN0cy4gV2FzIHRoZSBtb2RhbCBjbG9zZWQ/Jyk7XG4gICAgfVxuICB9XG5cbiAgI2dldE1vZGFsRGlhbG9nRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICAvLyBXZSBjYW4gYWx3YXlzIGtub3cgdGhhdCB0aGUgZGlhbG9nIGVsZW1lbnQgd2lsbCBleGlzdCBpZiB0aGUgbW9kYWwgaXMgb3BlbiBhbmQgZXhpc3RzLlxuICAgIHJldHVybiB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNreS1tb2RhbC1kaWFsb2cnKSE7XG4gIH1cbn1cbiJdfQ==