UNPKG

@skyux/modals

Version:

This library was generated with [Nx](https://nx.dev).

1 lines 100 kB
{"version":3,"file":"skyux-modals-testing.mjs","sources":["../tmp-esm2022/testing/legacy/modal-fixture.js","../tmp-esm2022/testing/modules/confirm/confirm-button-harness.js","../tmp-esm2022/testing/modules/confirm/confirm-harness.js","../tmp-esm2022/testing/modules/confirm/confirm-testing.controller.js","../tmp-esm2022/testing/modules/confirm/confirm-testing.service.js","../tmp-esm2022/testing/modules/confirm/provide-confirm-testing.js","../tmp-esm2022/testing/modules/confirm/confirm-testing.module.js","../tmp-esm2022/testing/modules/modal/controller/modal-testing.controller.js","../tmp-esm2022/testing/modules/modal/controller/modal-testing.service.js","../tmp-esm2022/testing/modules/modal/controller/provide-modal-testing.js","../tmp-esm2022/testing/modules/modal/controller/modal-testing.module.js","../tmp-esm2022/testing/modules/modal/modal-harness.js","../tmp-esm2022/testing/skyux-modals-testing.js"],"sourcesContent":["/**\n * Allows interaction with a SKY UX modal component.\n * @deprecated Use `SkyModalHarness` instead.\n * @internal\n */\nexport class SkyModalFixture {\n #modalElement;\n #fixture;\n constructor(fixture, skyTestId) {\n this.#fixture = fixture;\n const modalElement = document.querySelector('sky-modal[data-sky-id=\"' + skyTestId + '\"]');\n if (!modalElement) {\n throw new Error(`No element was found with a \\`data-sky-id\\` value of \"${skyTestId}\".`);\n }\n this.#modalElement = modalElement;\n }\n /**\n * The modal component's ARIA describedby attribute.\n */\n get ariaDescribedBy() {\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 * The modal component's ARIA labelledby attribute.\n */\n get ariaLabelledBy() {\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 return labelledByAttribute;\n }\n /**\n * The modal component's role attribute.\n */\n get ariaRole() {\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 * Whether or not the modal is a full page modal.\n */\n get fullPage() {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-full-page');\n }\n /**\n * The size of the modal.\n */\n get size() {\n const modalDivElement = this.getModalDiv();\n const possibleSizes = ['small', 'medium', 'large'];\n for (const size of possibleSizes) {\n if (modalDivElement.classList.contains('sky-modal-' + size)) {\n return size;\n }\n }\n return;\n }\n /**\n * Whether or not the modal is set up for tiled content.\n */\n get tiledBody() {\n const modalDivElement = this.getModalDiv();\n return modalDivElement.classList.contains('sky-modal-tiled');\n }\n /**\n * Clicks the modal header's \"close\" button.\n */\n clickHeaderCloseButton() {\n this.#checkModalElement();\n const closeButton = this.#modalElement.querySelector('.sky-modal .sky-modal-btn-close');\n if (closeButton &&\n window.getComputedStyle(closeButton).display !== 'none') {\n closeButton.click();\n this.#fixture.detectChanges();\n }\n else {\n throw new Error(`No header close button exists.`);\n }\n }\n /**\n * Clicks the modal header's \"help\" button.\n */\n clickHelpButton() {\n this.#checkModalElement();\n const helpButton = this.#modalElement.querySelector('.sky-modal .sky-modal-header-buttons button[name=\"help-button\"]');\n if (helpButton && window.getComputedStyle(helpButton).display !== 'none') {\n helpButton.click();\n this.#fixture.detectChanges();\n }\n else {\n throw new Error(`No help button exists.`);\n }\n }\n /**\n * Returns the main modal element.\n */\n getModalDiv() {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal');\n }\n /**\n * Returns the modal's content element.\n */\n getModalContentEl() {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-content');\n }\n /**\n * Returns the modal's footer element.\n */\n getModalFooterEl() {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-footer');\n }\n /**\n * Returns the modal's header element.\n */\n getModalHeaderEl() {\n this.#checkModalElement();\n return this.#modalElement.querySelector('.sky-modal-header');\n }\n #checkModalElement() {\n if (!document.contains(this.#modalElement)) {\n throw new Error('Modal element no longer exists. Was the modal closed?');\n }\n }\n #getModalDialogElement() {\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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZml4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvbGVnYWN5L21vZGFsLWZpeHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLGFBQWEsQ0FBYztJQUUzQixRQUFRLENBQTRCO0lBRXBDLFlBQVksT0FBa0MsRUFBRSxTQUFpQjtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUN6Qyx5QkFBeUIsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUM5QixDQUFDO1FBRWpCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUNiLHlEQUF5RCxTQUFTLElBQUksQ0FDdkUsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN6RCxzSUFBc0k7UUFDdEksTUFBTSxvQkFBb0I7UUFDeEIsb0VBQW9FO1FBQ3BFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBRSxDQUFDO1FBQ3ZELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekQsc0lBQXNJO1FBQ3RJLE1BQU0sbUJBQW1CO1FBQ3ZCLG9FQUFvRTtRQUNwRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUUsQ0FBQztRQUV0RCxPQUFPLG1C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Q3JCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLHlGQUF5RjtRQUN6RixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFFLENBQUM7SUFDaEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5cbi8qKlxuICogQWxsb3dzIGludGVyYWN0aW9uIHdpdGggYSBTS1kgVVggbW9kYWwgY29tcG9uZW50LlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTa3lNb2RhbEhhcm5lc3NgIGluc3RlYWQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreU1vZGFsRml4dHVyZSB7XG4gICNtb2RhbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICNmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8dW5rbm93bj4sIHNreVRlc3RJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jZml4dHVyZSA9IGZpeHR1cmU7XG4gICAgY29uc3QgbW9kYWxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdza3ktbW9kYWxbZGF0YS1za3ktaWQ9XCInICsgc2t5VGVzdElkICsgJ1wiXScsXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICghbW9kYWxFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBlbGVtZW50IHdhcyBmb3VuZCB3aXRoIGEgXFxgZGF0YS1za3ktaWRcXGAgdmFsdWUgb2YgXCIke3NreVRlc3RJZH1cIi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNtb2RhbEVsZW1lbnQgPSBtb2RhbEVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1vZGFsIGNvbXBvbmVudCdzIEFSSUEgZGVzY3JpYmVkYnkgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhcmlhRGVzY3JpYmVkQnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RhbERpYWxvZ0VsZW1lbnQgPSB0aGlzLiNnZXRNb2RhbERpYWxvZ0VsZW1lbnQoKTtcbiAgICAvKiBOb24tbnVsbCBhc3NlcnRpb24gYXMgb3VyIGNvbXBvbmVudCBoYXMgYSBkZWZhdWx0IGZvciBpZiB0aGUgdXNlciBkb2VzIG5vdCBwcm92aWRlIHRoaXMgYXR0cmlidXRlIG9yIGlmIHRoZXkgcHJvdmlkZSBcInVuZGVmaW5lZFwiICovXG4gICAgY29uc3QgZGVzY3JpYmVkQnlBdHRyaWJ1dGUgPVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIG1vZGFsRGlhbG9nRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKSE7XG4gICAgcmV0dXJuIGRlc2NyaWJlZEJ5QXR0cmlidXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RhbCBjb21wb25lbnQncyBBUklBIGxhYmVsbGVkYnkgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhcmlhTGFiZWxsZWRCeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGFsRGlhbG9nRWxlbWVudCA9IHRoaXMuI2dldE1vZGFsRGlhbG9nRWxlbWVudCgpO1xuICAgIC8qIE5vbi1udWxsIGFzc2VydGlvbiBhcyBvdXIgY29tcG9uZW50IGhhcyBhIGRlZmF1bHQgZm9yIGlmIHRoZSB1c2VyIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBhdHRyaWJ1dGUgb3IgaWYgdGhleSBwcm92aWRlIFwidW5kZWZpbmVkXCIgKi9cbiAgICBjb25zdCBsYWJlbGxlZEJ5QXR0cmlidXRlID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBtb2RhbERpYWxvZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKSE7XG5cbiAgICByZXR1cm4gbGFiZWxsZWRCeUF0dHJpYnV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbW9kYWwgY29tcG9uZW50J3Mgcm9sZSBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbW9kYWxEaWFsb2dFbGVtZW50ID0gdGhpcy4jZ2V0TW9kYWxEaWFsb2dFbGVtZW50KCk7XG4gICAgLyogTm9uLW51bGwgYXNzZXJ0aW9uIGFzIG91ciBjb21wb25lbnQgaGFzIGEgZGVmYXVsdCBmb3IgaWYgdGhlIHVzZXIgZG9lcyBub3QgcHJvdmlkZSB0aGlzIGF0dHJpYnV0ZSBvciBpZiB0aGV5IHByb3ZpZGUgXCJ1bmRlZmluZWRcIiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgcm9sZUF0dHJpYnV0ZSA9IG1vZGFsRGlhbG9nRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSE7XG4gICAgcmV0dXJuIHJvbGVBdHRyaWJ1dGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIG1vZGFsIGlzIGEgZnVsbCBwYWdlIG1vZGFsLlxuICAgKi9cbiAgcHVibGljIGdldCBmdWxsUGFnZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtb2RhbERpdkVsZW1lbnQgPSB0aGlzLmdldE1vZGFsRGl2KCk7XG4gICAgcmV0dXJuIG1vZGFsRGl2RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NreS1tb2RhbC1mdWxsLXBhZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpemUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RhbERpdkVsZW1lbnQgPSB0aGlzLmdldE1vZGFsRGl2KCk7XG4gICAgY29uc3QgcG9zc2libGVTaXplcyA9IFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ107XG5cbiAgICBmb3IgKGNvbnN0IHNpemUgb2YgcG9zc2libGVTaXplcykge1xuICAgICAgaWYgKG1vZGFsRGl2RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NreS1tb2RhbC0nICsgc2l6ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb2RhbCBpcyBzZXQgdXAgZm9yIHRpbGVkIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpbGVkQm9keSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtb2RhbERpdkVsZW1lbnQgPSB0aGlzLmdldE1vZGFsRGl2KCk7XG4gICAgcmV0dXJuIG1vZGFsRGl2RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NreS1tb2RhbC10aWxlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyB0aGUgbW9kYWwgaGVhZGVyJ3MgXCJjbG9zZVwiIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBjbGlja0hlYWRlckNsb3NlQnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuI2NoZWNrTW9kYWxFbGVtZW50KCk7XG4gICAgY29uc3QgY2xvc2VCdXR0b246IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuI21vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktbW9kYWwgLnNreS1tb2RhbC1idG4tY2xvc2UnLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjbG9zZUJ1dHRvbiAmJlxuICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2xvc2VCdXR0b24pLmRpc3BsYXkgIT09ICdub25lJ1xuICAgICkge1xuICAgICAgY2xvc2VCdXR0b24uY2xpY2soKTtcbiAgICAgIHRoaXMuI2ZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhlYWRlciBjbG9zZSBidXR0b24gZXhpc3RzLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIG1vZGFsIGhlYWRlcidzIFwiaGVscFwiIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBjbGlja0hlbHBCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICBjb25zdCBoZWxwQnV0dG9uOiBIVE1MRWxlbWVudCB8IG51bGwgPSB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LW1vZGFsIC5za3ktbW9kYWwtaGVhZGVyLWJ1dHRvbnMgYnV0dG9uW25hbWU9XCJoZWxwLWJ1dHRvblwiXScsXG4gICAgKTtcblxuICAgIGlmIChoZWxwQnV0dG9uICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGhlbHBCdXR0b24pLmRpc3BsYXkgIT09ICdub25lJykge1xuICAgICAgaGVscEJ1dHRvbi5jbGljaygpO1xuICAgICAgdGhpcy4jZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gaGVscCBidXR0b24gZXhpc3RzLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYWluIG1vZGFsIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kYWxEaXYoKTogYW55IHtcbiAgICB0aGlzLiNjaGVja01vZGFsRWxlbWVudCgpO1xuICAgIHJldHVybiB0aGlzLiNtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNreS1tb2RhbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1vZGFsJ3MgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGdldE1vZGFsQ29udGVudEVsKCk6IGFueSB7XG4gICAgdGhpcy4jY2hlY2tNb2RhbEVsZW1lbnQoKTtcbiAgICByZXR1cm4gdGhpcy4jbW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktbW9kYWwtY29udGVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1vZGFsJ3MgZm9vdGVyIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kYWxGb290ZXJFbCgpOiBhbnkge1xuICAgIHRoaXMuI2NoZWNrTW9kYWxFbGVtZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuI21vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LW1vZGFsLWZvb3RlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1vZGFsJ3MgaGVhZGVyIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kYWxIZWFkZXJFbCgpOiBhbnkge1xuICAgIHRoaXMuI2NoZWNrTW9kYWxFbGVtZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuI21vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LW1vZGFsLWhlYWRlcicpO1xuICB9XG5cbiAgI2NoZWNrTW9kYWxFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICghZG9jdW1lbnQuY29udGFpbnModGhpcy4jbW9kYWxFbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2RhbCBlbGVtZW50IG5vIGxvbmdlciBleGlzdHMuIFdhcyB0aGUgbW9kYWwgY2xvc2VkPycpO1xuICAgIH1cbiAgfVxuXG4gICNnZXRNb2RhbERpYWxvZ0VsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMuI2NoZWNrTW9kYWxFbGVtZW50KCk7XG4gICAgLy8gV2UgY2FuIGFsd2F5cyBrbm93IHRoYXQgdGhlIGRpYWxvZyBlbGVtZW50IHdpbGwgZXhpc3QgaWYgdGhlIG1vZGFsIGlzIG9wZW4gYW5kIGV4aXN0cy5cbiAgICByZXR1cm4gdGhpcy4jbW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktbW9kYWwtZGlhbG9nJykhO1xuICB9XG59XG4iXX0=","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\n /**\n * @internal\n */\n static { this.hostSelector = '.sky-confirm-buttons .sky-btn'; }\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyConfirmButtonHarness` that meets certain criteria.\n */\n static with(filters) {\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 * Clicks the confirm button.\n */\n async click() {\n await (await this.host()).click();\n }\n /**\n * Gets the button style of the confirm button.\n */\n async getStyleType() {\n const hostEl = await this.host();\n if (await hostEl.hasClass('sky-btn-primary')) {\n return 'primary';\n }\n else if (await hostEl.hasClass('sky-btn-link')) {\n return 'link';\n }\n else if (await hostEl.hasClass('sky-btn-danger')) {\n return 'danger';\n }\n return 'default';\n }\n /**\n * Gets the text content of the confirm button.\n */\n async getText() {\n return await (await this.host()).text();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1idXR0b24taGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tb2RhbHMvdGVzdGluZy9zcmMvbW9kdWxlcy9jb25maXJtL2NvbmZpcm0tYnV0dG9uLWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLMUU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBQzNEOztPQUVHO2FBQ1csaUJBQVksR0FBRywrQkFBK0IsQ0FBQztJQUU3RDs7O09BR0c7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixPQUF1QztRQUV2QyxPQUFPLElBQUksZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO2FBQzFELFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQzthQUNELFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3RFLE1BQU0sZUFBZSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JELE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFlBQVk7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakMsSUFBSSxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDb25maXJtQnV0dG9uU3R5bGVUeXBlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5cbmltcG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vY29uZmlybS1idXR0b24taGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgY29uZmlybSBjb21wb25lbnQgaW4gdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lDb25maXJtQnV0dG9uSGFybmVzcyBleHRlbmRzIENvbXBvbmVudEhhcm5lc3Mge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICcuc2t5LWNvbmZpcm0tYnV0dG9ucyAuc2t5LWJ0bic7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGFcbiAgICogYFNreUNvbmZpcm1CdXR0b25IYXJuZXNzYCB0aGF0IG1lZXRzIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgoXG4gICAgZmlsdGVyczogU2t5Q29uZmlybUJ1dHRvbkhhcm5lc3NGaWx0ZXJzLFxuICApOiBIYXJuZXNzUHJlZGljYXRlPFNreUNvbmZpcm1CdXR0b25IYXJuZXNzPiB7XG4gICAgcmV0dXJuIG5ldyBIYXJuZXNzUHJlZGljYXRlKFNreUNvbmZpcm1CdXR0b25IYXJuZXNzLCBmaWx0ZXJzKVxuICAgICAgLmFkZE9wdGlvbigndGV4dCcsIGZpbHRlcnMudGV4dCwgYXN5bmMgKGhhcm5lc3MsIHRleHQpID0+IHtcbiAgICAgICAgY29uc3QgYnV0dG9uVGV4dCA9IGF3YWl0IGhhcm5lc3MuZ2V0VGV4dCgpO1xuICAgICAgICByZXR1cm4gYXdhaXQgSGFybmVzc1ByZWRpY2F0ZS5zdHJpbmdNYXRjaGVzKGJ1dHRvblRleHQsIHRleHQpO1xuICAgICAgfSlcbiAgICAgIC5hZGRPcHRpb24oJ3N0eWxlVHlwZScsIGZpbHRlcnMuc3R5bGVUeXBlLCBhc3luYyAoaGFybmVzcywgc3R5bGVUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1dHRvblN0eWxlVHlwZSA9IGF3YWl0IGhhcm5lc3MuZ2V0U3R5bGVUeXBlKCk7XG4gICAgICAgIHJldHVybiBhd2FpdCBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoYnV0dG9uU3R5bGVUeXBlLCBzdHlsZVR5cGUpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBjb25maXJtIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGljaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5ob3N0KCkpLmNsaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYnV0dG9uIHN0eWxlIG9mIHRoZSBjb25maXJtIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdHlsZVR5cGUoKTogUHJvbWlzZTxTa3lDb25maXJtQnV0dG9uU3R5bGVUeXBlPiB7XG4gICAgY29uc3QgaG9zdEVsID0gYXdhaXQgdGhpcy5ob3N0KCk7XG5cbiAgICBpZiAoYXdhaXQgaG9zdEVsLmhhc0NsYXNzKCdza3ktYnRuLXByaW1hcnknKSkge1xuICAgICAgcmV0dXJuICdwcmltYXJ5JztcbiAgICB9IGVsc2UgaWYgKGF3YWl0IGhvc3RFbC5oYXNDbGFzcygnc2t5LWJ0bi1saW5rJykpIHtcbiAgICAgIHJldHVybiAnbGluayc7XG4gICAgfSBlbHNlIGlmIChhd2FpdCBob3N0RWwuaGFzQ2xhc3MoJ3NreS1idG4tZGFuZ2VyJykpIHtcbiAgICAgIHJldHVybiAnZGFuZ2VyJztcbiAgICB9XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGNvbmZpcm0gYnV0dG9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuaG9zdCgpKS50ZXh0KCk7XG4gIH1cbn1cbiJdfQ==","import { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyConfirmType } from '@skyux/modals';\nimport { SkyConfirmButtonHarness } from './confirm-button-harness';\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n static { this.hostSelector = 'sky-confirm'; }\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 * Clicks a confirm button.\n */\n async clickCustomButton(filters) {\n const buttons = await this.getCustomButtons(filters);\n if (buttons.length > 1) {\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n throw new Error(`More than one button matches the filter(s): ${JSON.stringify(filters)}.`);\n }\n await buttons[0].click();\n }\n /**\n * Clicks a confirm button.\n */\n async clickOkButton() {\n const type = await this.getType();\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 * Gets the body of the confirm component.\n */\n async getBodyText() {\n return await (await this.#getBodyEl())?.text();\n }\n /**\n * Gets a specific confirm custom button based on the filter criteria.\n * @param filter The filter criteria.\n */\n async getCustomButton(filter) {\n const confirmType = await this.getType();\n if (confirmType !== SkyConfirmType.Custom) {\n throw new Error('Cannot get a custom button for non-custom confirm modals.');\n }\n return await this.locatorFor(SkyConfirmButtonHarness.with(filter))();\n }\n /**\n * Gets an array of confirm custom buttons based on the filter criteria.\n * If no filter is provided, returns all confirm custom buttons.\n * @param filters The optional filter criteria.\n */\n async getCustomButtons(filters) {\n const confirmType = await this.getType();\n if (confirmType !== SkyConfirmType.Custom) {\n throw new Error('Cannot get custom buttons for non-custom confirm modals.');\n }\n return await this.locatorForAll(SkyConfirmButtonHarness.with(filters || {}))();\n }\n /**\n * Gets the message of the confirm component.\n */\n async getMessageText() {\n return await (await this.#getMessageEl()).text();\n }\n /**\n * Gets the type of the confirm component.\n */\n async getType() {\n const confirmEl = await this.#getConfirmEl();\n if (await confirmEl.hasClass('sky-confirm-type-ok')) {\n return SkyConfirmType.OK;\n }\n return SkyConfirmType.Custom;\n }\n /**\n * Whether the whitespace is preserved on the confirm component.\n */\n async isWhiteSpacePreserved() {\n return await (await this.#getMessageEl()).hasClass('sky-confirm-preserve-white-space');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy90ZXN0aW5nL3NyYy9tb2R1bGVzL2NvbmZpcm0vY29uZmlybS1oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkU7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQW1CO0lBQ3hEOztPQUVHO2FBQ1csaUJBQVksR0FBRyxhQUFhLENBQUM7SUFFM0MsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFELFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDMUQsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUV4RDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsT0FBdUM7UUFFdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLCtDQUErQyxJQUFJLENBQUMsU0FBUyxDQUMzRCxPQUFPLENBQ1IsR0FBRyxDQUNMLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEMsSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVc7UUFDdEIsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGVBQWUsQ0FDMUIsTUFBc0M7UUFFdEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekMsSUFBSSxXQUFXLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDM0IsT0FBd0M7UUFFeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekMsSUFBSSxXQUFXLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMERBQTBELENBQzNELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQzdCLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQzVDLEVBQUUsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0MsSUFBSSxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxxQkFBcUI7UUFDaEMsT0FBTyxNQUFNLENBQ1gsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQzNCLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNreUNvbXBvbmVudEhhcm5lc3MgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IFNreUNvbmZpcm1UeXBlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5cbmltcG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzIH0gZnJvbSAnLi9jb25maXJtLWJ1dHRvbi1oYXJuZXNzJztcbmltcG9ydCB7IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vY29uZmlybS1idXR0b24taGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgY29uZmlybSBjb21wb25lbnQgaW4gdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lDb25maXJtSGFybmVzcyBleHRlbmRzIFNreUNvbXBvbmVudEhhcm5lc3Mge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdza3ktY29uZmlybSc7XG5cbiAgI2dldEJvZHlFbCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcuc2t5LWNvbmZpcm0tYm9keScpO1xuICAjZ2V0QnV0dG9ucyA9IHRoaXMubG9jYXRvckZvckFsbChTa3lDb25maXJtQnV0dG9uSGFybmVzcyk7XG4gICNnZXRDb25maXJtRWwgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktY29uZmlybScpO1xuICAjZ2V0TWVzc2FnZUVsID0gdGhpcy5sb2NhdG9yRm9yKCcuc2t5LWNvbmZpcm0tbWVzc2FnZScpO1xuXG4gIC8qKlxuICAgKiBDbGlja3MgYSBjb25maXJtIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGlja0N1c3RvbUJ1dHRvbihcbiAgICBmaWx0ZXJzOiBTa3lDb25maXJtQnV0dG9uSGFybmVzc0ZpbHRlcnMsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBhd2FpdCB0aGlzLmdldEN1c3RvbUJ1dHRvbnMoZmlsdGVycyk7XG5cbiAgICBpZiAoYnV0dG9ucy5sZW5ndGggPiAxKSB7XG4gICAgICBpZiAoZmlsdGVycy50ZXh0IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGZpbHRlcnMudGV4dCA9IGZpbHRlcnMudGV4dC50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTW9yZSB0aGFuIG9uZSBidXR0b24gbWF0Y2hlcyB0aGUgZmlsdGVyKHMpOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBidXR0b25zWzBdLmNsaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIGEgY29uZmlybSBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tPa0J1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0eXBlID0gYXdhaXQgdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBpZiAodHlwZSA9PT0gU2t5Q29uZmlybVR5cGUuQ3VzdG9tKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjbGljayBPSyBidXR0b24gb24gYSBjb25maXJtIG9mIHR5cGUgY3VzdG9tLicpO1xuICAgIH1cbiAgICBjb25zdCBidXR0b25zID0gYXdhaXQgdGhpcy4jZ2V0QnV0dG9ucygpO1xuICAgIGF3YWl0IGJ1dHRvbnNbMF0uY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBib2R5IG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCb2R5VGV4dCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0Qm9keUVsKCkpPy50ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNwZWNpZmljIGNvbmZpcm0gY3VzdG9tIGJ1dHRvbiBiYXNlZCBvbiB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3VzdG9tQnV0dG9uKFxuICAgIGZpbHRlcjogU2t5Q29uZmlybUJ1dHRvbkhhcm5lc3NGaWx0ZXJzLFxuICApOiBQcm9taXNlPFNreUNvbmZpcm1CdXR0b25IYXJuZXNzPiB7XG4gICAgY29uc3QgY29uZmlybVR5cGUgPSBhd2FpdCB0aGlzLmdldFR5cGUoKTtcblxuICAgIGlmIChjb25maXJtVHlwZSAhPT0gU2t5Q29uZmlybVR5cGUuQ3VzdG9tKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZ2V0IGEgY3VzdG9tIGJ1dHRvbiBmb3Igbm9uLWN1c3RvbSBjb25maXJtIG1vZGFscy4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2NhdG9yRm9yKFNreUNvbmZpcm1CdXR0b25IYXJuZXNzLndpdGgoZmlsdGVyKSkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGFycmF5IG9mIGNvbmZpcm0gY3VzdG9tIGJ1dHRvbnMgYmFzZWQgb24gdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICogSWYgbm8gZmlsdGVyIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBjb25maXJtIGN1c3RvbSBidXR0b25zLlxuICAgKiBAcGFyYW0gZmlsdGVycyBUaGUgb3B0aW9uYWwgZmlsdGVyIGNyaXRlcmlhLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEN1c3RvbUJ1dHRvbnMoXG4gICAgZmlsdGVycz86IFNreUNvbmZpcm1CdXR0b25IYXJuZXNzRmlsdGVycyxcbiAgKTogUHJvbWlzZTxTa3lDb25maXJtQnV0dG9uSGFybmVzc1tdPiB7XG4gICAgY29uc3QgY29uZmlybVR5cGUgPSBhd2FpdCB0aGlzLmdldFR5cGUoKTtcblxuICAgIGlmIChjb25maXJtVHlwZSAhPT0gU2t5Q29uZmlybVR5cGUuQ3VzdG9tKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZ2V0IGN1c3RvbSBidXR0b25zIGZvciBub24tY3VzdG9tIGNvbmZpcm0gbW9kYWxzLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoXG4gICAgICBTa3lDb25maXJtQnV0dG9uSGFybmVzcy53aXRoKGZpbHRlcnMgfHwge30pLFxuICAgICkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRNZXNzYWdlVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0TWVzc2FnZUVsKCkpLnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRUeXBlKCk6IFByb21pc2U8U2t5Q29uZmlybVR5cGU+IHtcbiAgICBjb25zdCBjb25maXJtRWwgPSBhd2FpdCB0aGlzLiNnZXRDb25maXJtRWwoKTtcbiAgICBpZiAoYXdhaXQgY29uZmlybUVsLmhhc0NsYXNzKCdza3ktY29uZmlybS10eXBlLW9rJykpIHtcbiAgICAgIHJldHVybiBTa3lDb25maXJtVHlwZS5PSztcbiAgICB9XG5cbiAgICByZXR1cm4gU2t5Q29uZmlybVR5cGUuQ3VzdG9tO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkIG9uIHRoZSBjb25maXJtIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1doaXRlU3BhY2VQcmVzZXJ2ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IChcbiAgICAgIGF3YWl0IHRoaXMuI2dldE1lc3NhZ2VFbCgpXG4gICAgKS5oYXNDbGFzcygnc2t5LWNvbmZpcm0tcHJlc2VydmUtd2hpdGUtc3BhY2UnKTtcbiAgfVxufVxuIl19","/**\n * A controller to be injected into tests, which mocks the confirm service\n * and handles interactions with confirm dialogs.\n */\nexport class SkyConfirmTestingController {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS10ZXN0aW5nLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbW9kYWxzL3Rlc3Rpbmcvc3JjL21vZHVsZXMvY29uZmlybS9jb25maXJtLXRlc3RpbmcuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLDJCQUEyQjtDQXNCaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lDb25maXJtQ2xvc2VFdmVudEFyZ3MsIFNreUNvbmZpcm1Db25maWcgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgdG8gYmUgaW5qZWN0ZWQgaW50byB0ZXN0cywgd2hpY2ggbW9ja3MgdGhlIGNvbmZpcm0gc2VydmljZVxuICogYW5kIGhhbmRsZXMgaW50ZXJhY3Rpb25zIHdpdGggY29uZmlybSBkaWFsb2dzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2t5Q29uZmlybVRlc3RpbmdDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY29uZmlybSBkaWFsb2cgd2l0aCB0aGUgXCJjYW5jZWxcIiBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY2FuY2VsKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgYSBjb25maXJtIGRpYWxvZyBpcyBvcGVuLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4cGVjdE5vbmUoKTogdm9pZDtcbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgb3BlbiBjb25maXJtIGRpYWxvZyBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4cGVjdE9wZW4oY29uZmlnOiBTa3lDb25maXJtQ29uZmlnKTogdm9pZDtcbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY29uZmlybSBkaWFsb2cgd2l0aCB0aGUgcHJvdmlkZWQgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGNsb3NlKGFyZ3M6IFNreUNvbmZpcm1DbG9zZUV2ZW50QXJncyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbmZpcm0gZGlhbG9nIHdpdGggdGhlIFwib2tcIiBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgb2soKTogdm9pZDtcbn1cbiJdfQ==","import { SkyConfirmInstance, SkyConfirmType, } from '@skyux/modals';\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\nfunction assertConfirmOpen(value) {\n if (value === undefined) {\n throw new Error('A confirm dialog is expected to be open but is closed.');\n }\n return;\n}\nfunction assertConfirmClosed(value) {\n if (value !== undefined) {\n throw new Error('A confirm dialog is expected to be closed but is open.');\n }\n return;\n}\nfunction isButtonConfigArray(val) {\n return (Array.isArray(val) && (val.length === 0 || val[0].action !== undefined));\n}\nfunction buttonConfigMatches(actual, expected) {\n return (expected.action === actual.action &&\n expected.text === actual.text &&\n expected.styleType === actual.styleType);\n}\n/**\n * @internal\n */\nexport class SkyConfirmTestingService extends SkyConfirmTestingController {\n #testSubject;\n cancel() {\n this.close({ action: 'cancel' });\n }\n ok() {\n this.close({ action: 'ok' });\n }\n close(args) {\n assertConfirmOpen(this.#testSubject);\n const isActionPermitted = this.#testSubject?.buttons.some((b) => b.action === args.action);\n if (isActionPermitted) {\n this.#testSubject.instance.close(args);\n this.#testSubject = undefined;\n }\n else {\n throw new Error(`The confirm dialog does not have a button configured for the \"${args.action}\" action.`);\n }\n }\n expectNone() {\n assertConfirmClosed(this.#testSubject);\n }\n expectOpen(expectedConfig) {\n assertConfirmOpen(this.#testSubject);\n const actualConfig = this.#testSubject.config;\n for (const [key, expectedValue] of Object.entries(expectedConfig)) {\n const k = key;\n const actualValue = actualConfig[k];\n if (isButtonConfigArray(expectedValue) &&\n isButtonConfigArray(actualValue)) {\n if (expectedValue.length !== actualValue.length)\n throwDetailedError();\n expectedValue.forEach((expectedButton, index) => {\n if (!buttonConfigMatches(expectedButton, actualValue[index])) {\n throwDetailedError();\n }\n });\n }\n else if (actualValue !== expectedValue) {\n throwDetailedError();\n }\n }\n function throwDetailedError() {\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 open(config) {\n assertConfirmClosed(this.#testSubject);\n const instance = new SkyConfirmInstance();\n const testSubject = {\n buttons: [],\n config,\n instance,\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 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 this.#testSubject = testSubject;\n return instance;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS10ZXN0aW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbW9kYWxzL3Rlc3Rpbmcvc3JjL21vZHVsZXMvY29uZmlybS9jb25maXJtLXRlc3Rpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsa0JBQWtCLEVBRWxCLGNBQWMsR0FDZixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVEzRSxTQUFTLGlCQUFpQixDQUN4QixLQUE4QjtJQUU5QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU87QUFDVCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FDMUIsS0FBOEI7SUFFOUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxPQUFPO0FBQ1QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBWTtJQUN2QyxPQUFPLENBQ0wsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQ3hFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBOEIsRUFDOUIsUUFBZ0M7SUFFaEMsT0FBTyxDQUNMLFFBQVEsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07UUFDakMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSTtRQUM3QixRQUFRLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQ3hDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQ1gsU0FBUSwyQkFBMkI7SUFHbkMsWUFBWSxDQUEwQjtJQUUvQixNQUFNO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxFQUFFO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBOEI7UUFDekMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUN2RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUNoQyxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLElBQUksQ0FBQyxNQUFNLFdBQVcsQ0FDeEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sVUFBVSxDQUFDLGNBQWdDO1FBQ2hELGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUU5QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxHQUFHLEdBQWtDLENBQUM7WUFDN0MsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBDLElBQ0UsbUJBQW1CLENBQUMsYUFBYSxDQUFDO2dCQUNsQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFDaEMsQ0FBQztnQkFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLE1BQU07b0JBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQkFFdEUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM3RCxrQkFBa0IsRUFBRSxDQUFDO29CQUN2QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLFdBQVcsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDekMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUVELFNBQVMsa0JBQWtCO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUM7O0VBRXBCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7O0VBRTVDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Q0FDM0MsQ0FBQyxDQUFDO1FBQ0MsQ0FBQztJQUNILENBQUM7SUFFTSxJQUFJLENBQUMsTUFBd0I7UUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZDLE1BQU0sUUFBUSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBZ0I7WUFDL0IsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNO1lBQ04sUUFBUTtTQUNULENBQUM7UUFFRixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUN4QixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUM1QixXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN2QjtnQkFDRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUVoQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTa3lDb25maXJtQnV0dG9uQ29uZmlnLFxuICBTa3lDb25maXJtQ2xvc2VFdmVudEFyZ3MsXG4gIFNreUNvbmZpcm1Db25maWcsXG4gIFNreUNvbmZpcm1JbnN0YW5jZSxcbiAgU2t5Q29uZmlybVNlcnZpY2VJbnRlcmZhY2UsXG4gIFNreUNvbmZpcm1UeXBlLFxufSBmcm9tICdAc2t5dXgvbW9kYWxzJztcblxuaW1wb3J0IHsgU2t5Q29uZmlybVRlc3RpbmdDb250cm9sbGVyIH0gZnJvbSAnLi9jb25maXJtLXRlc3RpbmcuY29udHJvbGxlcic7XG5cbmludGVyZmFjZSBUZXN0U3ViamVjdCB7XG4gIGJ1dHRvbnM6IFNreUNvbmZpcm1CdXR0b25Db25maWdbXTtcbiAgY29uZmlnOiBTa3lDb25maXJtQ29uZmlnO1xuICBpbnN0YW5jZTogU2t5Q29uZmlybUluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRDb25maXJtT3BlbihcbiAgdmFsdWU6IFRlc3RTdWJqZWN0IHwgdW5kZWZpbmVkLFxuKTogYXNzZXJ0cyB2YWx1ZSBpcyBUZXN0U3ViamVjdCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIGNvbmZpcm0gZGlhbG9nIGlzIGV4cGVjdGVkIHRvIGJlIG9wZW4gYnV0IGlzIGNsb3NlZC4nKTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Q29uZmlybUNsb3NlZChcbiAgdmFsdWU6IFRlc3RTdWJqZWN0IHwgdW5kZWZpbmVkLFxuKTogYXNzZXJ0cyB2YWx1ZSBpcyB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBjb25maXJtIGRpYWxvZyBpcyBleHBlY3RlZCB0byBiZSBjbG9zZWQgYnV0IGlzIG9wZW4uJyk7XG4gIH1cblxuICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIGlzQnV0dG9uQ29uZmlnQXJyYXkodmFsOiB1bmtub3duKTogdmFsIGlzIFNreUNvbmZpcm1CdXR0b25Db25maWdbXSB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheSh2YWwpICYmICh2YWwubGVuZ3RoID09PSAwIHx8IHZhbFswXS5hY3Rpb24gIT09IHVuZGVmaW5lZClcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnV0dG9uQ29uZmlnTWF0Y2hlcyhcbiAgYWN0dWFsOiBTa3lDb25maXJtQnV0dG9uQ29uZmlnLFxuICBleHBlY3RlZDogU2t5Q29uZmlybUJ1dHRvbkNvbmZpZyxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGV4cGVjdGVkLmFjdGlvbiA9PT0gYWN0dWFsLmFjdGlvbiAmJlxuICAgIGV4cGVjdGVkLnRleHQgPT09IGFjdHVhbC50ZXh0ICYmXG4gICAgZXhwZWN0ZWQuc3R5bGVUeXBlID09PSBhY3R1YWwuc3R5bGVUeXBlXG4gICk7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lDb25maXJtVGVzdGluZ1NlcnZpY2VcbiAgZXh0ZW5kcyBTa3lDb25maXJtVGVzdGluZ0NvbnRyb2xsZXJcbiAgaW1wbGVtZW50cyBTa3lDb25maXJtU2VydmljZUludGVyZmFjZVxue1xuICAjdGVzdFN1YmplY3Q6IFRlc3RTdWJqZWN0IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSh7IGFjdGlvbjogJ2NhbmNlbCcgfSk7XG4gIH1cblxuICBwdWJsaWMgb2soKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSh7IGFjdGlvbjogJ29rJyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZShhcmdzOiBTa3lDb25maXJtQ2xvc2VFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICBhc3NlcnRDb25maXJtT3Blbih0aGlzLiN0ZXN0U3ViamVjdCk7XG5cbiAgICBjb25zdCBpc0FjdGlvblBlcm1pdHRlZCA9IHRoaXMuI3Rlc3RTdWJqZWN0Py5idXR0b25zLnNvbWUoXG4gICAgICAoYikgPT4gYi5hY3Rpb24gPT09IGFyZ3MuYWN0aW9uLFxuICAgICk7XG5cbiAgICBpZiAoaXNBY3Rpb25QZXJtaXR0ZWQpIHtcbiAgICAgIHRoaXMuI3Rlc3RTdWJqZWN0Lmluc3RhbmNlLmNsb3NlKGFyZ3MpO1xuICAgICAgdGhpcy4jdGVzdFN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBjb25maXJtIGRpYWxvZyBkb2VzIG5vdCBoYXZlIGEgYnV0dG9uIGNvbmZpZ3VyZWQgZm9yIHRoZSBcIiR7YXJncy5hY3Rpb259XCIgYWN0aW9uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBlY3ROb25lKCk6IHZvaWQge1xuICAgIGFzc2VydENvbmZpcm1DbG9zZWQodGhpcy4jdGVzdFN1YmplY3QpO1xuICB9XG5cbiAgcHVibGljIGV4cGVjdE9wZW4oZXhwZWN0ZWRDb25maWc6IFNreUNvbmZpcm1Db25maWcpOiB2b2lkIHtcbiAgICBhc3NlcnRDb25maXJtT3Blbih0aGlzLiN0ZXN0U3ViamVjdCk7XG5cbiAgICBjb25zdCBhY3R1YWxDb25maWcgPSB0aGlzLiN0ZXN0U3ViamVjdC5jb25maWc7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkQ29uZmlnKSkge1xuICAgICAgY29uc3QgayA9IGtleSBhcyBrZXlvZiB0eXBlb2YgZXhwZWN0ZWRDb25maWc7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbmZpZ1trXTtcblxuICAgICAgaWYgKFxuICAgICAgICBpc0J1dHRvbkNvbmZpZ0FycmF5KGV4cGVjdGVkVmFsdWUpICYmXG4gICAgICAgIGlzQnV0dG9uQ29uZmlnQXJyYXkoYWN0dWFsVmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGV4cGVjdGVkVmFsdWUubGVuZ3RoICE9PSBhY3R1YWxWYWx1ZS5sZW5ndGgpIHRocm93RGV0YWlsZWRFcnJvcigpO1xuXG4gICAgICAgIGV4cGVjdGVkVmFsdWUuZm9yRWFjaCgoZXhwZWN0ZWRCdXR0b24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKCFidXR0b25Db25maWdNYXRjaGVzKGV4cGVjdGVkQnV0dG9uLCBhY3R1YWxWYWx1ZVtpbmRleF0pKSB7XG4gICAgICAgICAgICB0aHJvd0RldGFpbGVkRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPT0gZXhwZWN0ZWRWYWx1ZSkge1xuICAgICAgICB0aHJvd0RldGFpbGVkRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aHJvd0RldGFpbGVkRXJyb3IoKTogbmV2ZXIge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIGNvbmZpcm0gZGlhbG9nIHRvIGJlIG9wZW4gd2l0aCBhIHNwZWNp