@skyux/forms 11.22.0 → 11.24.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.
- package/documentation.json +2925 -1719
- package/esm2022/lib/modules/checkbox/checkbox-group.component.mjs +2 -2
- package/esm2022/lib/modules/field-group/field-group.component.mjs +2 -2
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.component.mjs +3 -5
- package/esm2022/lib/modules/input-box/input-box.component.mjs +2 -2
- package/esm2022/lib/modules/radio/radio-group.component.mjs +2 -2
- package/esm2022/lib/modules/radio/radio.component.mjs +2 -2
- package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +3 -7
- package/esm2022/testing/legacy/checkbox-fixture.mjs +92 -0
- package/esm2022/testing/legacy/radio-fixture.mjs +85 -0
- package/esm2022/testing/modules/character-counter/character-counter-indicator-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/character-counter/character-counter-indicator-harness.mjs +53 -0
- package/esm2022/testing/modules/checkbox/checkbox-group-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/checkbox/checkbox-group-harness.mjs +158 -0
- package/esm2022/testing/modules/checkbox/checkbox-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/checkbox/checkbox-harness.mjs +196 -0
- package/esm2022/testing/modules/checkbox/checkbox-label-harness.mjs +19 -0
- package/esm2022/testing/modules/checkbox/checkbox-label-text-label.harness.mjs +19 -0
- package/esm2022/testing/modules/field-group/field-group-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/field-group/field-group-harness.mjs +92 -0
- package/esm2022/testing/modules/file-attachment/file-drop/file-drop-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/file-attachment/file-drop/file-drop-harness.mjs +45 -0
- package/esm2022/testing/modules/form-error/form-error-harness.filters.mjs +2 -0
- package/esm2022/testing/modules/form-error/form-error-harness.mjs +21 -0
- package/esm2022/testing/modules/form-error/form-errors-harness.filters.mjs +2 -0
- package/esm2022/testing/modules/form-error/form-errors-harness.mjs +34 -0
- package/esm2022/testing/modules/input-box/input-box-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/input-box/input-box-harness.mjs +188 -0
- package/esm2022/testing/modules/radio/radio-group-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/radio/radio-group-harness.mjs +156 -0
- package/esm2022/testing/modules/radio/radio-harness-filters.mjs +2 -0
- package/esm2022/testing/modules/radio/radio-harness.mjs +147 -0
- package/esm2022/testing/modules/radio/radio-label-harness.mjs +19 -0
- package/esm2022/testing/public-api.mjs +15 -14
- package/fesm2022/skyux-forms-testing.mjs +144 -54
- package/fesm2022/skyux-forms-testing.mjs.map +1 -1
- package/fesm2022/skyux-forms.mjs +14 -20
- package/fesm2022/skyux-forms.mjs.map +1 -1
- package/package.json +9 -9
- package/testing/{radio-fixture.d.ts → legacy/radio-fixture.d.ts} +1 -0
- package/testing/modules/field-group/field-group-harness-filters.d.ts +7 -0
- package/testing/modules/field-group/field-group-harness.d.ts +57 -0
- package/testing/public-api.d.ts +24 -22
- package/esm2022/testing/character-counter/character-counter-indicator-harness-filters.mjs +0 -2
- package/esm2022/testing/character-counter/character-counter-indicator-harness.mjs +0 -53
- package/esm2022/testing/checkbox/checkbox-group-harness-filters.mjs +0 -2
- package/esm2022/testing/checkbox/checkbox-group-harness.mjs +0 -158
- package/esm2022/testing/checkbox/checkbox-harness-filters.mjs +0 -2
- package/esm2022/testing/checkbox/checkbox-harness.mjs +0 -196
- package/esm2022/testing/checkbox/checkbox-label-harness.mjs +0 -19
- package/esm2022/testing/checkbox/checkbox-label-text-label.harness.mjs +0 -19
- package/esm2022/testing/checkbox-fixture.mjs +0 -92
- package/esm2022/testing/file-drop/file-drop-harness-filters.mjs +0 -2
- package/esm2022/testing/file-drop/file-drop-harness.mjs +0 -45
- package/esm2022/testing/form-error/form-error-harness.filters.mjs +0 -2
- package/esm2022/testing/form-error/form-error-harness.mjs +0 -21
- package/esm2022/testing/form-error/form-errors-harness.filters.mjs +0 -2
- package/esm2022/testing/form-error/form-errors-harness.mjs +0 -34
- package/esm2022/testing/input-box/input-box-harness-filters.mjs +0 -2
- package/esm2022/testing/input-box/input-box-harness.mjs +0 -188
- package/esm2022/testing/radio/radio-group-harness-filters.mjs +0 -2
- package/esm2022/testing/radio/radio-group-harness.mjs +0 -157
- package/esm2022/testing/radio/radio-harness-filters.mjs +0 -2
- package/esm2022/testing/radio/radio-harness.mjs +0 -147
- package/esm2022/testing/radio/radio-label-harness.mjs +0 -19
- package/esm2022/testing/radio-fixture.mjs +0 -84
- /package/testing/{checkbox-fixture.d.ts → legacy/checkbox-fixture.d.ts} +0 -0
- /package/testing/{character-counter → modules/character-counter}/character-counter-indicator-harness-filters.d.ts +0 -0
- /package/testing/{character-counter → modules/character-counter}/character-counter-indicator-harness.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-group-harness-filters.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-group-harness.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-harness-filters.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-harness.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-label-harness.d.ts +0 -0
- /package/testing/{checkbox → modules/checkbox}/checkbox-label-text-label.harness.d.ts +0 -0
- /package/testing/{file-drop → modules/file-attachment/file-drop}/file-drop-harness-filters.d.ts +0 -0
- /package/testing/{file-drop → modules/file-attachment/file-drop}/file-drop-harness.d.ts +0 -0
- /package/testing/{form-error → modules/form-error}/form-error-harness.d.ts +0 -0
- /package/testing/{form-error → modules/form-error}/form-error-harness.filters.d.ts +0 -0
- /package/testing/{form-error → modules/form-error}/form-errors-harness.d.ts +0 -0
- /package/testing/{form-error → modules/form-error}/form-errors-harness.filters.d.ts +0 -0
- /package/testing/{input-box → modules/input-box}/input-box-harness-filters.d.ts +0 -0
- /package/testing/{input-box → modules/input-box}/input-box-harness.d.ts +0 -0
- /package/testing/{radio → modules/radio}/radio-group-harness-filters.d.ts +0 -0
- /package/testing/{radio → modules/radio}/radio-group-harness.d.ts +0 -0
- /package/testing/{radio → modules/radio}/radio-harness-filters.d.ts +0 -0
- /package/testing/{radio → modules/radio}/radio-harness.d.ts +0 -0
- /package/testing/{radio → modules/radio}/radio-label-harness.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyux/forms",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.24.0",
|
|
4
4
|
"author": "Blackbaud, Inc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"blackbaud",
|
|
@@ -41,14 +41,14 @@
|
|
|
41
41
|
"@angular/core": "^18.2.8",
|
|
42
42
|
"@angular/forms": "^18.2.8",
|
|
43
43
|
"@angular/platform-browser": "^18.2.8",
|
|
44
|
-
"@skyux-sdk/testing": "11.
|
|
45
|
-
"@skyux/core": "11.
|
|
46
|
-
"@skyux/help-inline": "11.
|
|
47
|
-
"@skyux/i18n": "11.
|
|
48
|
-
"@skyux/icon": "11.
|
|
49
|
-
"@skyux/indicators": "11.
|
|
50
|
-
"@skyux/popovers": "11.
|
|
51
|
-
"@skyux/theme": "11.
|
|
44
|
+
"@skyux-sdk/testing": "11.24.0",
|
|
45
|
+
"@skyux/core": "11.24.0",
|
|
46
|
+
"@skyux/help-inline": "11.24.0",
|
|
47
|
+
"@skyux/i18n": "11.24.0",
|
|
48
|
+
"@skyux/icon": "11.24.0",
|
|
49
|
+
"@skyux/indicators": "11.24.0",
|
|
50
|
+
"@skyux/popovers": "11.24.0",
|
|
51
|
+
"@skyux/theme": "11.24.0"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"tslib": "^2.6.3"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { HarnessPredicate } from '@angular/cdk/testing';
|
|
2
|
+
import { TemplateRef } from '@angular/core';
|
|
3
|
+
import { SkyComponentHarness } from '@skyux/core/testing';
|
|
4
|
+
import { SkyFieldGroupHeadingLevel, SkyFieldGroupHeadingStyle } from '@skyux/forms';
|
|
5
|
+
import { SkyFieldGroupHarnessFilters } from './field-group-harness-filters';
|
|
6
|
+
/**
|
|
7
|
+
* Harness for interacting with a field group component in tests.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SkyFieldGroupHarness extends SkyComponentHarness {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
static hostSelector: string;
|
|
15
|
+
/**
|
|
16
|
+
* Gets a `HarnessPredicate` that can be used to search for a
|
|
17
|
+
* `SkyFieldGroupHarness` that meets certain criteria.
|
|
18
|
+
*/
|
|
19
|
+
static with(filters: SkyFieldGroupHarnessFilters): HarnessPredicate<SkyFieldGroupHarness>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the field group's heading text. If `headingHidden` is true,
|
|
22
|
+
* the text will still be returned.
|
|
23
|
+
*/
|
|
24
|
+
getHeadingText(): Promise<string | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* Gets the field group's hint text.
|
|
27
|
+
*/
|
|
28
|
+
getHintText(): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Whether the heading is hidden.
|
|
31
|
+
*/
|
|
32
|
+
getHeadingHidden(): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the field group is stacked.
|
|
35
|
+
*/
|
|
36
|
+
getStacked(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* The semantic heading level used for the field group.
|
|
39
|
+
*/
|
|
40
|
+
getHeadingLevel(): Promise<SkyFieldGroupHeadingLevel>;
|
|
41
|
+
/**
|
|
42
|
+
* The heading style used for the field group.
|
|
43
|
+
*/
|
|
44
|
+
getHeadingStyle(): Promise<SkyFieldGroupHeadingStyle>;
|
|
45
|
+
/**
|
|
46
|
+
* Clicks the help inline button.
|
|
47
|
+
*/
|
|
48
|
+
clickHelpInline(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Gets the help popover content.
|
|
51
|
+
*/
|
|
52
|
+
getHelpPopoverContent(): Promise<TemplateRef<unknown> | string | undefined>;
|
|
53
|
+
/**
|
|
54
|
+
* Gets the help popover title.
|
|
55
|
+
*/
|
|
56
|
+
getHelpPopoverTitle(): Promise<string | undefined>;
|
|
57
|
+
}
|
package/testing/public-api.d.ts
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
export { SkyInputBoxHarness } from './input-box/input-box-harness';
|
|
2
|
-
export { SkyInputBoxHarnessFilters } from './input-box/input-box-harness-filters';
|
|
3
|
-
export { SkyCharacterCounterIndicatorHarness } from './character-counter/character-counter-indicator-harness';
|
|
4
|
-
export { SkyCharacterCounterIndicatorHarnessFilters } from './character-counter/character-counter-indicator-harness-filters';
|
|
5
|
-
export { SkyCheckboxFixture } from './checkbox-fixture';
|
|
6
|
-
export { SkyCheckboxGroupHarness } from './checkbox/checkbox-group-harness';
|
|
7
|
-
export { SkyCheckboxGroupHarnessFilters } from './checkbox/checkbox-group-harness-filters';
|
|
8
|
-
export { SkyCheckboxHarness } from './checkbox/checkbox-harness';
|
|
9
|
-
export { SkyCheckboxHarnessFilters } from './checkbox/checkbox-harness-filters';
|
|
10
|
-
export { SkyCheckboxLabelHarness } from './checkbox/checkbox-label-harness';
|
|
11
|
-
export { SkyFileDropHarness } from './file-drop/file-drop-harness';
|
|
12
|
-
export { SkyFileDropHarnessFilters } from './file-drop/file-drop-harness-filters';
|
|
13
|
-
export { SkyFormErrorsHarness } from './form-error/form-errors-harness';
|
|
14
|
-
export { SkyFormErrorsHarnessFilters } from './form-error/form-errors-harness.filters';
|
|
15
|
-
export { SkyFormErrorHarness } from './form-error/form-error-harness';
|
|
16
|
-
export { SkyFormErrorHarnessFilters } from './form-error/form-error-harness.filters';
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
1
|
+
export { SkyInputBoxHarness } from './modules/input-box/input-box-harness';
|
|
2
|
+
export { SkyInputBoxHarnessFilters } from './modules/input-box/input-box-harness-filters';
|
|
3
|
+
export { SkyCharacterCounterIndicatorHarness } from './modules/character-counter/character-counter-indicator-harness';
|
|
4
|
+
export { SkyCharacterCounterIndicatorHarnessFilters } from './modules/character-counter/character-counter-indicator-harness-filters';
|
|
5
|
+
export { SkyCheckboxFixture } from './legacy/checkbox-fixture';
|
|
6
|
+
export { SkyCheckboxGroupHarness } from './modules/checkbox/checkbox-group-harness';
|
|
7
|
+
export { SkyCheckboxGroupHarnessFilters } from './modules/checkbox/checkbox-group-harness-filters';
|
|
8
|
+
export { SkyCheckboxHarness } from './modules/checkbox/checkbox-harness';
|
|
9
|
+
export { SkyCheckboxHarnessFilters } from './modules/checkbox/checkbox-harness-filters';
|
|
10
|
+
export { SkyCheckboxLabelHarness } from './modules/checkbox/checkbox-label-harness';
|
|
11
|
+
export { SkyFileDropHarness } from './modules/file-attachment/file-drop/file-drop-harness';
|
|
12
|
+
export { SkyFileDropHarnessFilters } from './modules/file-attachment/file-drop/file-drop-harness-filters';
|
|
13
|
+
export { SkyFormErrorsHarness } from './modules/form-error/form-errors-harness';
|
|
14
|
+
export { SkyFormErrorsHarnessFilters } from './modules/form-error/form-errors-harness.filters';
|
|
15
|
+
export { SkyFormErrorHarness } from './modules/form-error/form-error-harness';
|
|
16
|
+
export { SkyFormErrorHarnessFilters } from './modules/form-error/form-error-harness.filters';
|
|
17
|
+
export { SkyFieldGroupHarness } from './modules/field-group/field-group-harness';
|
|
18
|
+
export { SkyFieldGroupHarnessFilters } from './modules/field-group/field-group-harness-filters';
|
|
19
|
+
export { SkyRadioFixture } from './legacy/radio-fixture';
|
|
20
|
+
export { SkyRadioGroupHarness } from './modules/radio/radio-group-harness';
|
|
21
|
+
export { SkyRadioGroupHarnessFilters } from './modules/radio/radio-group-harness-filters';
|
|
22
|
+
export { SkyRadioHarness } from './modules/radio/radio-harness';
|
|
23
|
+
export { SkyRadioHarnessFilters } from './modules/radio/radio-harness-filters';
|
|
24
|
+
export { SkyRadioLabelHarness } from './modules/radio/radio-label-harness';
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLWNvdW50ZXItaW5kaWNhdG9yLWhhcm5lc3MtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy90ZXN0aW5nL3NyYy9jaGFyYWN0ZXItY291bnRlci9jaGFyYWN0ZXItY291bnRlci1pbmRpY2F0b3ItaGFybmVzcy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lIYXJuZXNzRmlsdGVycyB9IGZyb20gJ0Bza3l1eC9jb3JlL3Rlc3RpbmcnO1xuXG4vKipcbiAqIEEgc2V0IG9mIGNyaXRlcmlhIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIGEgbGlzdCBvZiBTa3lDaGFyYWN0ZXJDb3VudGVySW5kaWNhdG9ySGFybmVzcyBpbnN0YW5jZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBTa3lDaGFyYWN0ZXJDb3VudGVySW5kaWNhdG9ySGFybmVzc0ZpbHRlcnNcbiAgZXh0ZW5kcyBTa3lIYXJuZXNzRmlsdGVycyB7fVxuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { SkyComponentHarness } from '@skyux/core/testing';
|
|
2
|
-
/**
|
|
3
|
-
* Harness for interacting with a character counter indicator component in tests.
|
|
4
|
-
*/
|
|
5
|
-
export class SkyCharacterCounterIndicatorHarness extends SkyComponentHarness {
|
|
6
|
-
/**
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
static { this.hostSelector = 'sky-character-counter-indicator'; }
|
|
10
|
-
#getLabel = this.locatorFor('.sky-character-count-label');
|
|
11
|
-
/**
|
|
12
|
-
* Gets a `HarnessPredicate` that can be used to search for a
|
|
13
|
-
* `SkyCharacterCounterIndicatorHarness` that meets certain criteria.
|
|
14
|
-
*/
|
|
15
|
-
static with(filters) {
|
|
16
|
-
return SkyCharacterCounterIndicatorHarness.getDataSkyIdPredicate(filters);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Gets the current character count.
|
|
20
|
-
*/
|
|
21
|
-
async getCharacterCount() {
|
|
22
|
-
return (await this.#getLabelParts()).count;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Gets the character counter limit.
|
|
26
|
-
*/
|
|
27
|
-
async getCharacterCountLimit() {
|
|
28
|
-
return (await this.#getLabelParts()).limit;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Indicates whether the character counter is in an error state because the current character
|
|
32
|
-
* count is greater than the limit.
|
|
33
|
-
*/
|
|
34
|
-
async isOverLimit() {
|
|
35
|
-
return (await this.#getLabel()).hasClass('sky-error-label');
|
|
36
|
-
}
|
|
37
|
-
async #getLabelParts() {
|
|
38
|
-
const label = await this.#getLabel();
|
|
39
|
-
const textParts = (await label.text()).split('/');
|
|
40
|
-
let labelParts;
|
|
41
|
-
if (textParts.length === 2) {
|
|
42
|
-
labelParts = {
|
|
43
|
-
count: +textParts[0].trim(),
|
|
44
|
-
limit: +textParts[1].trim(),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
if (labelParts && !isNaN(labelParts.count) && !isNaN(labelParts.limit)) {
|
|
48
|
-
return labelParts;
|
|
49
|
-
}
|
|
50
|
-
throw new Error('The character counter indicator does not contain text in the expected format.');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLWNvdW50ZXItaW5kaWNhdG9yLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvdGVzdGluZy9zcmMvY2hhcmFjdGVyLWNvdW50ZXIvY2hhcmFjdGVyLWNvdW50ZXItaW5kaWNhdG9yLWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFTMUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUNBQW9DLFNBQVEsbUJBQW1CO0lBQzFFOztPQUVHO2FBQ1csaUJBQVksR0FBRyxpQ0FBaUMsQ0FBQztJQUUvRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBRTFEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLE9BQW1EO1FBRW5ELE9BQU8sbUNBQW1DLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQjtRQUM1QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQjtRQUNqQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELElBQUksVUFBa0MsQ0FBQztRQUV2QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsVUFBVSxHQUFHO2dCQUNYLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzNCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDNUIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFybmVzc1ByZWRpY2F0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7IFNreUNvbXBvbmVudEhhcm5lc3MgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgU2t5Q2hhcmFjdGVyQ291bnRlckluZGljYXRvckhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9jaGFyYWN0ZXItY291bnRlci1pbmRpY2F0b3ItaGFybmVzcy1maWx0ZXJzJztcblxudHlwZSBMYWJlbFBhcnRzID0ge1xuICBjb3VudDogbnVtYmVyO1xuICBsaW1pdDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgY2hhcmFjdGVyIGNvdW50ZXIgaW5kaWNhdG9yIGNvbXBvbmVudCBpbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNreUNoYXJhY3RlckNvdW50ZXJJbmRpY2F0b3JIYXJuZXNzIGV4dGVuZHMgU2t5Q29tcG9uZW50SGFybmVzcyB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ3NreS1jaGFyYWN0ZXItY291bnRlci1pbmRpY2F0b3InO1xuXG4gICNnZXRMYWJlbCA9IHRoaXMubG9jYXRvckZvcignLnNreS1jaGFyYWN0ZXItY291bnQtbGFiZWwnKTtcblxuICAvKipcbiAgICogR2V0cyBhIGBIYXJuZXNzUHJlZGljYXRlYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgYVxuICAgKiBgU2t5Q2hhcmFjdGVyQ291bnRlckluZGljYXRvckhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChcbiAgICBmaWx0ZXJzOiBTa3lDaGFyYWN0ZXJDb3VudGVySW5kaWNhdG9ySGFybmVzc0ZpbHRlcnMsXG4gICk6IEhhcm5lc3NQcmVkaWNhdGU8U2t5Q2hhcmFjdGVyQ291bnRlckluZGljYXRvckhhcm5lc3M+IHtcbiAgICByZXR1cm4gU2t5Q2hhcmFjdGVyQ291bnRlckluZGljYXRvckhhcm5lc3MuZ2V0RGF0YVNreUlkUHJlZGljYXRlKGZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGNvdW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXJhY3RlckNvdW50KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRMYWJlbFBhcnRzKCkpLmNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoYXJhY3RlciBjb3VudGVyIGxpbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXJhY3RlckNvdW50TGltaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldExhYmVsUGFydHMoKSkubGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb3VudGVyIGlzIGluIGFuIGVycm9yIHN0YXRlIGJlY2F1c2UgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAqIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNPdmVyTGltaXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRMYWJlbCgpKS5oYXNDbGFzcygnc2t5LWVycm9yLWxhYmVsJyk7XG4gIH1cblxuICBhc3luYyAjZ2V0TGFiZWxQYXJ0cygpOiBQcm9taXNlPExhYmVsUGFydHM+IHtcbiAgICBjb25zdCBsYWJlbCA9IGF3YWl0IHRoaXMuI2dldExhYmVsKCk7XG4gICAgY29uc3QgdGV4dFBhcnRzID0gKGF3YWl0IGxhYmVsLnRleHQoKSkuc3BsaXQoJy8nKTtcblxuICAgIGxldCBsYWJlbFBhcnRzOiBMYWJlbFBhcnRzIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRleHRQYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIGxhYmVsUGFydHMgPSB7XG4gICAgICAgIGNvdW50OiArdGV4dFBhcnRzWzBdLnRyaW0oKSxcbiAgICAgICAgbGltaXQ6ICt0ZXh0UGFydHNbMV0udHJpbSgpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxQYXJ0cyAmJiAhaXNOYU4obGFiZWxQYXJ0cy5jb3VudCkgJiYgIWlzTmFOKGxhYmVsUGFydHMubGltaXQpKSB7XG4gICAgICByZXR1cm4gbGFiZWxQYXJ0cztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnVGhlIGNoYXJhY3RlciBjb3VudGVyIGluZGljYXRvciBkb2VzIG5vdCBjb250YWluIHRleHQgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdC4nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAtaGFybmVzcy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3Rlc3Rpbmcvc3JjL2NoZWNrYm94L2NoZWNrYm94LWdyb3VwLWhhcm5lc3MtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5SGFybmVzc0ZpbHRlcnMgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcblxuLyoqXG4gKiBBIHNldCBvZiBjcml0ZXJpYSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBhIGxpc3Qgb2YgYFNreUNoZWNrYm94R3JvdXBIYXJuZXNzYCBpbnN0YW5jZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBTa3lDaGVja2JveEdyb3VwSGFybmVzc0ZpbHRlcnMgZXh0ZW5kcyBTa3lIYXJuZXNzRmlsdGVycyB7fVxuIl19
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { SkyComponentHarness } from '@skyux/core/testing';
|
|
2
|
-
import { SkyHelpInlineHarness } from '@skyux/help-inline/testing';
|
|
3
|
-
import { SkyFormErrorsHarness } from '../form-error/form-errors-harness';
|
|
4
|
-
import { SkyCheckboxHarness } from './checkbox-harness';
|
|
5
|
-
/**
|
|
6
|
-
* Harness for interacting with a checkbox group component in tests.
|
|
7
|
-
*/
|
|
8
|
-
export class SkyCheckboxGroupHarness extends SkyComponentHarness {
|
|
9
|
-
/**
|
|
10
|
-
* @internal
|
|
11
|
-
*/
|
|
12
|
-
static { this.hostSelector = 'sky-checkbox-group'; }
|
|
13
|
-
#getCheckboxes = this.locatorForAll(SkyCheckboxHarness);
|
|
14
|
-
#getHeading = this.locatorFor('.sky-checkbox-group-heading');
|
|
15
|
-
#getHeadingWrapper = this.locatorFor('.sky-checkbox-group-legend');
|
|
16
|
-
#getHintText = this.locatorForOptional('.sky-checkbox-group-hint-text');
|
|
17
|
-
#getLegendDefault = this.locatorForOptional('legend .sky-checkbox-group-heading-text');
|
|
18
|
-
#getLegendH3 = this.locatorForOptional('legend h3');
|
|
19
|
-
#getLegendH4 = this.locatorForOptional('legend h4');
|
|
20
|
-
#getLegendH5 = this.locatorForOptional('legend h5');
|
|
21
|
-
#getLegendHeading = this.locatorFor('legend h3,h4,h5,.sky-checkbox-group-heading-text');
|
|
22
|
-
/**
|
|
23
|
-
* Gets a `HarnessPredicate` that can be used to search for a
|
|
24
|
-
* `SkyCheckboxGroupHarness` that meets certain criteria.
|
|
25
|
-
*/
|
|
26
|
-
static with(filters) {
|
|
27
|
-
return SkyCheckboxGroupHarness.getDataSkyIdPredicate(filters);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Clicks the help inline button.
|
|
31
|
-
*/
|
|
32
|
-
async clickHelpInline() {
|
|
33
|
-
return (await this.#getHelpInline()).click();
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Gets an array of harnesses for the checkboxes in the checkbox group.
|
|
37
|
-
*/
|
|
38
|
-
async getCheckboxes() {
|
|
39
|
-
return await this.#getCheckboxes();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Gets the help popover content.
|
|
43
|
-
*/
|
|
44
|
-
async getHelpPopoverContent() {
|
|
45
|
-
const content = await (await this.#getHelpInline()).getPopoverContent();
|
|
46
|
-
return content;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Gets the help popover title.
|
|
50
|
-
*/
|
|
51
|
-
async getHelpPopoverTitle() {
|
|
52
|
-
return await (await this.#getHelpInline()).getPopoverTitle();
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Gets the checkbox group's heading text. If `headingHidden` is true,
|
|
56
|
-
* the text will still be returned.
|
|
57
|
-
*/
|
|
58
|
-
async getHeadingText() {
|
|
59
|
-
return (await this.#getLegendHeading()).text();
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Gets the checkbox group's hint text.
|
|
63
|
-
*/
|
|
64
|
-
async getHintText() {
|
|
65
|
-
const hintText = await this.#getHintText();
|
|
66
|
-
return (await hintText?.text())?.trim() ?? '';
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Whether the heading is hidden.
|
|
70
|
-
*/
|
|
71
|
-
async getHeadingHidden() {
|
|
72
|
-
return (await this.#getHeadingWrapper()).hasClass('sky-screen-reader-only');
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* The semantic heading level used for the checkbox group. Returns undefined if heading level is not set.
|
|
76
|
-
*/
|
|
77
|
-
async getHeadingLevel() {
|
|
78
|
-
const heading = await this.#getLegendHeading();
|
|
79
|
-
const h3 = await heading.matchesSelector('h3');
|
|
80
|
-
const h4 = await heading.matchesSelector('h4');
|
|
81
|
-
const h5 = await heading.matchesSelector('h5');
|
|
82
|
-
if (h3) {
|
|
83
|
-
return 3;
|
|
84
|
-
}
|
|
85
|
-
else if (h4) {
|
|
86
|
-
return 4;
|
|
87
|
-
}
|
|
88
|
-
else if (h5) {
|
|
89
|
-
return 5;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* The heading style used for the checkbox group.
|
|
97
|
-
*/
|
|
98
|
-
async getHeadingStyle() {
|
|
99
|
-
const heading = await this.#getLegendHeading();
|
|
100
|
-
const isHeadingStyle3 = await heading.hasClass('sky-font-heading-3');
|
|
101
|
-
const isHeadingStyle4 = await heading.hasClass('sky-font-heading-4');
|
|
102
|
-
if (isHeadingStyle3) {
|
|
103
|
-
return 3;
|
|
104
|
-
}
|
|
105
|
-
else if (isHeadingStyle4) {
|
|
106
|
-
return 4;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
return 5;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Whether the checkbox group is required.
|
|
114
|
-
*/
|
|
115
|
-
async getRequired() {
|
|
116
|
-
const heading = await this.#getHeading();
|
|
117
|
-
return await heading.hasClass('sky-control-label-required');
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Whether the checkbox group is stacked.
|
|
121
|
-
*/
|
|
122
|
-
async getStacked() {
|
|
123
|
-
const host = await this.host();
|
|
124
|
-
const heading = (await this.#getLegendH3()) ||
|
|
125
|
-
(await this.#getLegendH4()) ||
|
|
126
|
-
(await this.#getLegendH5());
|
|
127
|
-
const label = await this.#getLegendDefault();
|
|
128
|
-
return (((await host.hasClass('sky-form-field-stacked')) && !!label) ||
|
|
129
|
-
((await host.hasClass('sky-field-group-stacked')) && !!heading));
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Whether all the checkboxes in a required group are unchecked.
|
|
133
|
-
*/
|
|
134
|
-
async hasRequiredError() {
|
|
135
|
-
return (await this.#getFormErrors()).hasError('required');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Whether the checkbox group has errors.
|
|
139
|
-
*/
|
|
140
|
-
async hasError(errorName) {
|
|
141
|
-
return (await this.#getFormErrors()).hasError(errorName);
|
|
142
|
-
}
|
|
143
|
-
async #getFormErrors() {
|
|
144
|
-
return await this.locatorFor(SkyFormErrorsHarness.with({
|
|
145
|
-
dataSkyId: 'checkbox-group-form-errors',
|
|
146
|
-
}))();
|
|
147
|
-
}
|
|
148
|
-
async #getHelpInline() {
|
|
149
|
-
const harness = await this.locatorForOptional(SkyHelpInlineHarness.with({
|
|
150
|
-
ancestor: '.sky-checkbox-group > .sky-checkbox-group-legend',
|
|
151
|
-
}))();
|
|
152
|
-
if (harness) {
|
|
153
|
-
return harness;
|
|
154
|
-
}
|
|
155
|
-
throw Error('No help inline found.');
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAtaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy90ZXN0aW5nL3NyYy9jaGVja2JveC9jaGVja2JveC1ncm91cC1oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLG1CQUFtQjtJQUM5RDs7T0FFRzthQUNXLGlCQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFFbEQsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzdELGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNuRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDeEUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUN6Qyx5Q0FBeUMsQ0FDMUMsQ0FBQztJQUNGLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELGlCQUFp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LFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQzFCLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUN4QixTQUFTLEVBQUUsNEJBQTRCO1NBQ3hDLENBQUMsQ0FDSCxFQUFFLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQzNDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUN4QixRQUFRLEVBQUUsa0RBQWtEO1NBQzdELENBQUMsQ0FDSCxFQUFFLENBQUM7UUFFSixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhcm5lc3NQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5pbXBvcnQge1xuICBTa3lDaGVja2JveEdyb3VwSGVhZGluZ0xldmVsLFxuICBTa3lDaGVja2JveEdyb3VwSGVhZGluZ1N0eWxlLFxufSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SGVscElubGluZUhhcm5lc3MgfSBmcm9tICdAc2t5dXgvaGVscC1pbmxpbmUvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreUZvcm1FcnJvcnNIYXJuZXNzIH0gZnJvbSAnLi4vZm9ybS1lcnJvci9mb3JtLWVycm9ycy1oYXJuZXNzJztcblxuaW1wb3J0IHsgU2t5Q2hlY2tib3hHcm91cEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9jaGVja2JveC1ncm91cC1oYXJuZXNzLWZpbHRlcnMnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hIYXJuZXNzIH0gZnJvbSAnLi9jaGVja2JveC1oYXJuZXNzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgY2hlY2tib3ggZ3JvdXAgY29tcG9uZW50IGluIHRlc3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2t5Q2hlY2tib3hHcm91cEhhcm5lc3MgZXh0ZW5kcyBTa3lDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnc2t5LWNoZWNrYm94LWdyb3VwJztcblxuICAjZ2V0Q2hlY2tib3hlcyA9IHRoaXMubG9jYXRvckZvckFsbChTa3lDaGVja2JveEhhcm5lc3MpO1xuICAjZ2V0SGVhZGluZyA9IHRoaXMubG9jYXRvckZvcignLnNreS1jaGVja2JveC1ncm91cC1oZWFkaW5nJyk7XG4gICNnZXRIZWFkaW5nV3JhcHBlciA9IHRoaXMubG9jYXRvckZvcignLnNreS1jaGVja2JveC1ncm91cC1sZWdlbmQnKTtcbiAgI2dldEhpbnRUZXh0ID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJy5za3ktY2hlY2tib3gtZ3JvdXAtaGludC10ZXh0Jyk7XG4gICNnZXRMZWdlbmREZWZhdWx0ID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoXG4gICAgJ2xlZ2VuZCAuc2t5LWNoZWNrYm94LWdyb3VwLWhlYWRpbmctdGV4dCcsXG4gICk7XG4gICNnZXRMZWdlbmRIMyA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdsZWdlbmQgaDMnKTtcbiAgI2dldExlZ2VuZEg0ID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJ2xlZ2VuZCBoNCcpO1xuICAjZ2V0TGVnZW5kSDUgPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbCgnbGVnZW5kIGg1Jyk7XG4gICNnZXRMZWdlbmRIZWFkaW5nID0gdGhpcy5sb2NhdG9yRm9yKFxuICAgICdsZWdlbmQgaDMsaDQsaDUsLnNreS1jaGVja2JveC1ncm91cC1oZWFkaW5nLXRleHQnLFxuICApO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lDaGVja2JveEdyb3VwSGFybmVzc2AgdGhhdCBtZWV0cyBjZXJ0YWluIGNyaXRlcmlhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoKFxuICAgIGZpbHRlcnM6IFNreUNoZWNrYm94R3JvdXBIYXJuZXNzRmlsdGVycyxcbiAgKTogSGFybmVzc1ByZWRpY2F0ZTxTa3lDaGVja2JveEdyb3VwSGFybmVzcz4ge1xuICAgIHJldHVybiBTa3lDaGVja2JveEdyb3VwSGFybmVzcy5nZXREYXRhU2t5SWRQcmVkaWNhdGUoZmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBoZWxwIGlubGluZSBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tIZWxwSW5saW5lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SGVscElubGluZSgpKS5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgaGFybmVzc2VzIGZvciB0aGUgY2hlY2tib3hlcyBpbiB0aGUgY2hlY2tib3ggZ3JvdXAuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hlY2tib3hlcygpOiBQcm9taXNlPFNreUNoZWNrYm94SGFybmVzc1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuI2dldENoZWNrYm94ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBoZWxwIHBvcG92ZXIgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWxwUG9wb3ZlckNvbnRlbnQoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgKGF3YWl0IHRoaXMuI2dldEhlbHBJbmxpbmUoKSkuZ2V0UG9wb3ZlckNvbnRlbnQoKTtcblxuICAgIHJldHVybiBjb250ZW50IGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBoZWxwIHBvcG92ZXIgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SGVscFBvcG92ZXJUaXRsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0SGVscElubGluZSgpKS5nZXRQb3BvdmVyVGl0bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaGVja2JveCBncm91cCdzIGhlYWRpbmcgdGV4dC4gSWYgYGhlYWRpbmdIaWRkZW5gIGlzIHRydWUsXG4gICAqIHRoZSB0ZXh0IHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SGVhZGluZ1RleHQoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldExlZ2VuZEhlYWRpbmcoKSkudGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoZWNrYm94IGdyb3VwJ3MgaGludCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEhpbnRUZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaGludFRleHQgPSBhd2FpdCB0aGlzLiNnZXRIaW50VGV4dCgpO1xuXG4gICAgcmV0dXJuIChhd2FpdCBoaW50VGV4dD8udGV4dCgpKT8udHJpbSgpID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGhlYWRpbmcgaXMgaGlkZGVuLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEhlYWRpbmdIaWRkZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRIZWFkaW5nV3JhcHBlcigpKS5oYXNDbGFzcygnc2t5LXNjcmVlbi1yZWFkZXItb25seScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZW1hbnRpYyBoZWFkaW5nIGxldmVsIHVzZWQgZm9yIHRoZSBjaGVja2JveCBncm91cC4gUmV0dXJucyB1bmRlZmluZWQgaWYgaGVhZGluZyBsZXZlbCBpcyBub3Qgc2V0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEhlYWRpbmdMZXZlbCgpOiBQcm9taXNlPFxuICAgIFNreUNoZWNrYm94R3JvdXBIZWFkaW5nTGV2ZWwgfCB1bmRlZmluZWRcbiAgPiB7XG4gICAgY29uc3QgaGVhZGluZyA9IGF3YWl0IHRoaXMuI2dldExlZ2VuZEhlYWRpbmcoKTtcbiAgICBjb25zdCBoMyA9IGF3YWl0IGhlYWRpbmcubWF0Y2hlc1NlbGVjdG9yKCdoMycpO1xuICAgIGNvbnN0IGg0ID0gYXdhaXQgaGVhZGluZy5tYXRjaGVzU2VsZWN0b3IoJ2g0Jyk7XG4gICAgY29uc3QgaDUgPSBhd2FpdCBoZWFkaW5nLm1hdGNoZXNTZWxlY3RvcignaDUnKTtcblxuICAgIGlmIChoMykge1xuICAgICAgcmV0dXJuIDM7XG4gICAgfSBlbHNlIGlmIChoNCkge1xuICAgICAgcmV0dXJuIDQ7XG4gICAgfSBlbHNlIGlmIChoNSkge1xuICAgICAgcmV0dXJuIDU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkaW5nIHN0eWxlIHVzZWQgZm9yIHRoZSBjaGVja2JveCBncm91cC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWFkaW5nU3R5bGUoKTogUHJvbWlzZTxTa3lDaGVja2JveEdyb3VwSGVhZGluZ1N0eWxlPiB7XG4gICAgY29uc3QgaGVhZGluZyA9IGF3YWl0IHRoaXMuI2dldExlZ2VuZEhlYWRpbmcoKTtcblxuICAgIGNvbnN0IGlzSGVhZGluZ1N0eWxlMyA9IGF3YWl0IGhlYWRpbmcuaGFzQ2xhc3MoJ3NreS1mb250LWhlYWRpbmctMycpO1xuICAgIGNvbnN0IGlzSGVhZGluZ1N0eWxlNCA9IGF3YWl0IGhlYWRpbmcuaGFzQ2xhc3MoJ3NreS1mb250LWhlYWRpbmctNCcpO1xuXG4gICAgaWYgKGlzSGVhZGluZ1N0eWxlMykge1xuICAgICAgcmV0dXJuIDM7XG4gICAgfSBlbHNlIGlmIChpc0hlYWRpbmdTdHlsZTQpIHtcbiAgICAgIHJldHVybiA0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gNTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggZ3JvdXAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlyZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaGVhZGluZyA9IGF3YWl0IHRoaXMuI2dldEhlYWRpbmcoKTtcblxuICAgIHJldHVybiBhd2FpdCBoZWFkaW5nLmhhc0NsYXNzKCdza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGdyb3VwIGlzIHN0YWNrZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3RhY2tlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBob3N0ID0gYXdhaXQgdGhpcy5ob3N0KCk7XG4gICAgY29uc3QgaGVhZGluZyA9XG4gICAgICAoYXdhaXQgdGhpcy4jZ2V0TGVnZW5kSDMoKSkgfHxcbiAgICAgIChhd2FpdCB0aGlzLiNnZXRMZWdlbmRINCgpKSB8fFxuICAgICAgKGF3YWl0IHRoaXMuI2dldExlZ2VuZEg1KCkpO1xuICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgdGhpcy4jZ2V0TGVnZW5kRGVmYXVsdCgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICgoYXdhaXQgaG9zdC5oYXNDbGFzcygnc2t5LWZvcm0tZmllbGQtc3RhY2tlZCcpKSAmJiAhIWxhYmVsKSB8fFxuICAgICAgKChhd2FpdCBob3N0Lmhhc0NsYXNzKCdza3ktZmllbGQtZ3JvdXAtc3RhY2tlZCcpKSAmJiAhIWhlYWRpbmcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFsbCB0aGUgY2hlY2tib3hlcyBpbiBhIHJlcXVpcmVkIGdyb3VwIGFyZSB1bmNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGFzUmVxdWlyZWRFcnJvcigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldEZvcm1FcnJvcnMoKSkuaGFzRXJyb3IoJ3JlcXVpcmVkJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggZ3JvdXAgaGFzIGVycm9ycy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYXNFcnJvcihlcnJvck5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0Rm9ybUVycm9ycygpKS5oYXNFcnJvcihlcnJvck5hbWUpO1xuICB9XG5cbiAgYXN5bmMgI2dldEZvcm1FcnJvcnMoKTogUHJvbWlzZTxTa3lGb3JtRXJyb3JzSGFybmVzcz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2F0b3JGb3IoXG4gICAgICBTa3lGb3JtRXJyb3JzSGFybmVzcy53aXRoKHtcbiAgICAgICAgZGF0YVNreUlkOiAnY2hlY2tib3gtZ3JvdXAtZm9ybS1lcnJvcnMnLFxuICAgICAgfSksXG4gICAgKSgpO1xuICB9XG5cbiAgYXN5bmMgI2dldEhlbHBJbmxpbmUoKTogUHJvbWlzZTxTa3lIZWxwSW5saW5lSGFybmVzcz4ge1xuICAgIGNvbnN0IGhhcm5lc3MgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChcbiAgICAgIFNreUhlbHBJbmxpbmVIYXJuZXNzLndpdGgoe1xuICAgICAgICBhbmNlc3RvcjogJy5za3ktY2hlY2tib3gtZ3JvdXAgPiAuc2t5LWNoZWNrYm94LWdyb3VwLWxlZ2VuZCcsXG4gICAgICB9KSxcbiAgICApKCk7XG5cbiAgICBpZiAoaGFybmVzcykge1xuICAgICAgcmV0dXJuIGhhcm5lc3M7XG4gICAgfVxuXG4gICAgdGhyb3cgRXJyb3IoJ05vIGhlbHAgaW5saW5lIGZvdW5kLicpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtaGFybmVzcy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3Rlc3Rpbmcvc3JjL2NoZWNrYm94L2NoZWNrYm94LWhhcm5lc3MtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5SGFybmVzc0ZpbHRlcnMgfSBmcm9tICdAc2t5dXgvY29yZS90ZXN0aW5nJztcblxuLyoqXG4gKiBBIHNldCBvZiBjcml0ZXJpYSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBhIGxpc3Qgb2YgYFNreUNoZWNrYm94SGFybmVzc2AgaW5zdGFuY2VzLlxuICogQGludGVybmFsXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgU2t5Q2hlY2tib3hIYXJuZXNzRmlsdGVycyBleHRlbmRzIFNreUhhcm5lc3NGaWx0ZXJzIHt9XG4iXX0=
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { SkyComponentHarness } from '@skyux/core/testing';
|
|
2
|
-
import { SkyHelpInlineHarness } from '@skyux/help-inline/testing';
|
|
3
|
-
import { SkyFormErrorsHarness } from '../form-error/form-errors-harness';
|
|
4
|
-
import { SkyCheckboxLabelHarness } from './checkbox-label-harness';
|
|
5
|
-
import { SkyCheckboxLabelTextLabelHarness } from './checkbox-label-text-label.harness';
|
|
6
|
-
/**
|
|
7
|
-
* Harness for interacting with a checkbox component in tests.
|
|
8
|
-
*/
|
|
9
|
-
export class SkyCheckboxHarness extends SkyComponentHarness {
|
|
10
|
-
/**
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
static { this.hostSelector = 'sky-checkbox'; }
|
|
14
|
-
#getHintText = this.locatorForOptional('.sky-checkbox-hint-text');
|
|
15
|
-
#getInput = this.locatorFor('input.sky-checkbox-input');
|
|
16
|
-
#getLabel = this.locatorForOptional(SkyCheckboxLabelHarness);
|
|
17
|
-
#getLabelTextLabel = this.locatorForOptional(SkyCheckboxLabelTextLabelHarness);
|
|
18
|
-
/**
|
|
19
|
-
* Gets a `HarnessPredicate` that can be used to search for a
|
|
20
|
-
* `SkyCheckboxHarness` that meets certain criteria.
|
|
21
|
-
*/
|
|
22
|
-
static with(filters) {
|
|
23
|
-
return SkyCheckboxHarness.getDataSkyIdPredicate(filters);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Blurs the checkbox.
|
|
27
|
-
*/
|
|
28
|
-
async blur() {
|
|
29
|
-
return (await this.#getInput()).blur();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Clicks the help inline button.
|
|
33
|
-
*/
|
|
34
|
-
async clickHelpInline() {
|
|
35
|
-
return (await this.#getHelpInline()).click();
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Puts the checkbox in a checked state by toggling it if it is currently unchecked, or doing nothing if it is already checked.
|
|
39
|
-
*/
|
|
40
|
-
async check() {
|
|
41
|
-
if (!(await this.isChecked())) {
|
|
42
|
-
await this.#toggle();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Focuses the checkbox.
|
|
47
|
-
*/
|
|
48
|
-
async focus() {
|
|
49
|
-
return (await this.#getInput()).focus();
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Gets the checkbox's aria-label.
|
|
53
|
-
*/
|
|
54
|
-
async getAriaLabel() {
|
|
55
|
-
return (await this.#getInput()).getAttribute('aria-label');
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Gets the checkbox's aria-labelledby.
|
|
59
|
-
*/
|
|
60
|
-
async getAriaLabelledby() {
|
|
61
|
-
return (await this.#getInput()).getAttribute('aria-labelledby');
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Gets the help popover content.
|
|
65
|
-
*/
|
|
66
|
-
async getHelpPopoverContent() {
|
|
67
|
-
const content = await (await this.#getHelpInline()).getPopoverContent();
|
|
68
|
-
return content;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Gets the help popover title.
|
|
72
|
-
*/
|
|
73
|
-
async getHelpPopoverTitle() {
|
|
74
|
-
return await (await this.#getHelpInline()).getPopoverTitle();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Gets the checkbox's label text. If the label is set via `labelText` and `labelHidden` is true,
|
|
78
|
-
* the text will still be returned.
|
|
79
|
-
*/
|
|
80
|
-
async getLabelText() {
|
|
81
|
-
const labelTextLabel = await this.#getLabelTextLabel();
|
|
82
|
-
const label = await this.#getLabel();
|
|
83
|
-
if (labelTextLabel) {
|
|
84
|
-
const text = await labelTextLabel.getText();
|
|
85
|
-
const ariaLabel = await this.getAriaLabel();
|
|
86
|
-
// if labelText is set, ariaLabel will never return null
|
|
87
|
-
return text || ariaLabel;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
return label?.getText();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Whether the label is hidden. Only supported when using the `labelText` input to set the label.
|
|
95
|
-
*/
|
|
96
|
-
async getLabelHidden() {
|
|
97
|
-
const labelTextLabel = await this.#getLabelTextLabel();
|
|
98
|
-
const label = await this.#getLabel();
|
|
99
|
-
if (label) {
|
|
100
|
-
throw new Error('`labelIsHidden` is only supported when setting the checkbox label via the `labelText` input.');
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
return !(await labelTextLabel?.getText());
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Gets the checkbox's hint text.
|
|
108
|
-
*/
|
|
109
|
-
async getHintText() {
|
|
110
|
-
const hintText = await this.#getHintText();
|
|
111
|
-
return (await hintText?.text())?.trim() ?? '';
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Gets the checkbox's name.
|
|
115
|
-
*/
|
|
116
|
-
async getName() {
|
|
117
|
-
return (await this.#getInput()).getAttribute('name');
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Gets the checkbox's value.
|
|
121
|
-
*/
|
|
122
|
-
async getValue() {
|
|
123
|
-
return (await this.#getInput()).getProperty('value');
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Whether the checkbox displays custom error.
|
|
127
|
-
*/
|
|
128
|
-
async hasCustomError(errorName) {
|
|
129
|
-
return (await this.#getFormErrors()).hasError(errorName);
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Whether the checkbox displays an error that it is required.
|
|
133
|
-
*/
|
|
134
|
-
async hasRequiredError() {
|
|
135
|
-
return (await this.#getFormErrors()).hasError('required');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Whether the checkbox is checked.
|
|
139
|
-
*/
|
|
140
|
-
async isChecked() {
|
|
141
|
-
return (await this.#getInput()).getProperty('checked');
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Whether the checkbox is disabled.
|
|
145
|
-
*/
|
|
146
|
-
async isDisabled() {
|
|
147
|
-
const disabled = await (await this.#getInput()).getAttribute('disabled');
|
|
148
|
-
return disabled !== null;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Whether the checkbox is focused.
|
|
152
|
-
*/
|
|
153
|
-
async isFocused() {
|
|
154
|
-
return (await this.#getInput()).isFocused();
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Whether the checkbox is required.
|
|
158
|
-
*/
|
|
159
|
-
async isRequired() {
|
|
160
|
-
const value = await (await this.#getInput()).getAttribute('required');
|
|
161
|
-
return value !== null;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Whether the checkbox is stacked.
|
|
165
|
-
*/
|
|
166
|
-
async isStacked() {
|
|
167
|
-
return await (await this.host()).hasClass('sky-form-field-stacked');
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Puts the checkbox in an unchecked state by toggling it if it is currently checked, or doing nothing if it is already unchecked.
|
|
171
|
-
*/
|
|
172
|
-
async uncheck() {
|
|
173
|
-
if (await this.isChecked()) {
|
|
174
|
-
await this.#toggle();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async #getFormErrors() {
|
|
178
|
-
return await this.locatorFor(SkyFormErrorsHarness)();
|
|
179
|
-
}
|
|
180
|
-
async #getHelpInline() {
|
|
181
|
-
const harness = await this.locatorForOptional(SkyHelpInlineHarness)();
|
|
182
|
-
if (harness) {
|
|
183
|
-
return harness;
|
|
184
|
-
}
|
|
185
|
-
throw Error('No help inline found.');
|
|
186
|
-
}
|
|
187
|
-
async #toggle() {
|
|
188
|
-
if (await this.isDisabled()) {
|
|
189
|
-
throw new Error('Could not toggle the checkbox because it is disabled.');
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
await (await this.#getInput()).click();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy90ZXN0aW5nL3NyYy9jaGVja2JveC9jaGVja2JveC1oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG1CQUFtQjtJQUN6RDs7T0FFRzthQUNXLGlCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTVDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUVsRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRXhELFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUU3RCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzFDLGdDQUFnQyxDQUNqQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsT0FBa0M7UUFFbEMsT0FBTyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUks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dWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lIZWxwSW5saW5lSGFybmVzcyB9IGZyb20gJ0Bza3l1eC9oZWxwLWlubGluZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgU2t5Rm9ybUVycm9yc0hhcm5lc3MgfSBmcm9tICcuLi9mb3JtLWVycm9yL2Zvcm0tZXJyb3JzLWhhcm5lc3MnO1xuXG5pbXBvcnQgeyBTa3lDaGVja2JveEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9jaGVja2JveC1oYXJuZXNzLWZpbHRlcnMnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hMYWJlbEhhcm5lc3MgfSBmcm9tICcuL2NoZWNrYm94LWxhYmVsLWhhcm5lc3MnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hMYWJlbFRleHRMYWJlbEhhcm5lc3MgfSBmcm9tICcuL2NoZWNrYm94LWxhYmVsLXRleHQtbGFiZWwuaGFybmVzcyc7XG5cbi8qKlxuICogSGFybmVzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIGNoZWNrYm94IGNvbXBvbmVudCBpbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNreUNoZWNrYm94SGFybmVzcyBleHRlbmRzIFNreUNvbXBvbmVudEhhcm5lc3Mge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdza3ktY2hlY2tib3gnO1xuXG4gICNnZXRIaW50VGV4dCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcuc2t5LWNoZWNrYm94LWhpbnQtdGV4dCcpO1xuXG4gICNnZXRJbnB1dCA9IHRoaXMubG9jYXRvckZvcignaW5wdXQuc2t5LWNoZWNrYm94LWlucHV0Jyk7XG5cbiAgI2dldExhYmVsID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoU2t5Q2hlY2tib3hMYWJlbEhhcm5lc3MpO1xuXG4gICNnZXRMYWJlbFRleHRMYWJlbCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKFxuICAgIFNreUNoZWNrYm94TGFiZWxUZXh0TGFiZWxIYXJuZXNzLFxuICApO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lDaGVja2JveEhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChcbiAgICBmaWx0ZXJzOiBTa3lDaGVja2JveEhhcm5lc3NGaWx0ZXJzLFxuICApOiBIYXJuZXNzUHJlZGljYXRlPFNreUNoZWNrYm94SGFybmVzcz4ge1xuICAgIHJldHVybiBTa3lDaGVja2JveEhhcm5lc3MuZ2V0RGF0YVNreUlkUHJlZGljYXRlKGZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJsdXJzIHRoZSBjaGVja2JveC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBibHVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyB0aGUgaGVscCBpbmxpbmUgYnV0dG9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsaWNrSGVscElubGluZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldEhlbHBJbmxpbmUoKSkuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXRzIHRoZSBjaGVja2JveCBpbiBhIGNoZWNrZWQgc3RhdGUgYnkgdG9nZ2xpbmcgaXQgaWYgaXQgaXMgY3VycmVudGx5IHVuY2hlY2tlZCwgb3IgZG9pbmcgbm90aGluZyBpZiBpdCBpcyBhbHJlYWR5IGNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc0NoZWNrZWQoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuI3RvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBjaGVja2JveC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmb2N1cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY2hlY2tib3gncyBhcmlhLWxhYmVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFyaWFMYWJlbCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoZWNrYm94J3MgYXJpYS1sYWJlbGxlZGJ5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFyaWFMYWJlbGxlZGJ5KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBoZWxwIHBvcG92ZXIgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWxwUG9wb3ZlckNvbnRlbnQoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgKGF3YWl0IHRoaXMuI2dldEhlbHBJbmxpbmUoKSkuZ2V0UG9wb3ZlckNvbnRlbnQoKTtcblxuICAgIHJldHVybiBjb250ZW50IGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBoZWxwIHBvcG92ZXIgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SGVscFBvcG92ZXJUaXRsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0SGVscElubGluZSgpKS5nZXRQb3BvdmVyVGl0bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaGVja2JveCdzIGxhYmVsIHRleHQuIElmIHRoZSBsYWJlbCBpcyBzZXQgdmlhIGBsYWJlbFRleHRgIGFuZCBgbGFiZWxIaWRkZW5gIGlzIHRydWUsXG4gICAqIHRoZSB0ZXh0IHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGFiZWxUZXh0KCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbGFiZWxUZXh0TGFiZWwgPSBhd2FpdCB0aGlzLiNnZXRMYWJlbFRleHRMYWJlbCgpO1xuICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgdGhpcy4jZ2V0TGFiZWwoKTtcblxuICAgIGlmIChsYWJlbFRleHRMYWJlbCkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGxhYmVsVGV4dExhYmVsLmdldFRleHQoKTtcbiAgICAgIGNvbnN0IGFyaWFMYWJlbCA9IGF3YWl0IHRoaXMuZ2V0QXJpYUxhYmVsKCk7XG5cbiAgICAgIC8vIGlmIGxhYmVsVGV4dCBpcyBzZXQsIGFyaWFMYWJlbCB3aWxsIG5ldmVyIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gdGV4dCB8fCBhcmlhTGFiZWwhO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGFiZWw/LmdldFRleHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGFiZWwgaXMgaGlkZGVuLiBPbmx5IHN1cHBvcnRlZCB3aGVuIHVzaW5nIHRoZSBgbGFiZWxUZXh0YCBpbnB1dCB0byBzZXQgdGhlIGxhYmVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExhYmVsSGlkZGVuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxhYmVsVGV4dExhYmVsID0gYXdhaXQgdGhpcy4jZ2V0TGFiZWxUZXh0TGFiZWwoKTtcbiAgICBjb25zdCBsYWJlbCA9IGF3YWl0IHRoaXMuI2dldExhYmVsKCk7XG5cbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2BsYWJlbElzSGlkZGVuYCBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIHNldHRpbmcgdGhlIGNoZWNrYm94IGxhYmVsIHZpYSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQuJyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhKGF3YWl0IGxhYmVsVGV4dExhYmVsPy5nZXRUZXh0KCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaGVja2JveCdzIGhpbnQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIaW50VGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGhpbnRUZXh0ID0gYXdhaXQgdGhpcy4jZ2V0SGludFRleHQoKTtcblxuICAgIHJldHVybiAoYXdhaXQgaGludFRleHQ/LnRleHQoKSk/LnRyaW0oKSA/PyAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaGVja2JveCdzIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TmFtZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoZWNrYm94J3MgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRQcm9wZXJ0eTxzdHJpbmcgfCBudWxsPigndmFsdWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBkaXNwbGF5cyBjdXN0b20gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGFzQ3VzdG9tRXJyb3IoZXJyb3JOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldEZvcm1FcnJvcnMoKSkuaGFzRXJyb3IoZXJyb3JOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBkaXNwbGF5cyBhbiBlcnJvciB0aGF0IGl0IGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGhhc1JlcXVpcmVkRXJyb3IoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRGb3JtRXJyb3JzKCkpLmhhc0Vycm9yKCdyZXF1aXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNDaGVja2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0UHJvcGVydHk8Ym9vbGVhbj4oJ2NoZWNrZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRpc2FibGVkID0gYXdhaXQgKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggaXMgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5pc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1JlcXVpcmVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKTtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggaXMgc3RhY2tlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1N0YWNrZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLmhvc3QoKSkuaGFzQ2xhc3MoJ3NreS1mb3JtLWZpZWxkLXN0YWNrZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXRzIHRoZSBjaGVja2JveCBpbiBhbiB1bmNoZWNrZWQgc3RhdGUgYnkgdG9nZ2xpbmcgaXQgaWYgaXQgaXMgY3VycmVudGx5IGNoZWNrZWQsIG9yIGRvaW5nIG5vdGhpbmcgaWYgaXQgaXMgYWxyZWFkeSB1bmNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5jaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5pc0NoZWNrZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy4jdG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI2dldEZvcm1FcnJvcnMoKTogUHJvbWlzZTxTa3lGb3JtRXJyb3JzSGFybmVzcz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2F0b3JGb3IoU2t5Rm9ybUVycm9yc0hhcm5lc3MpKCk7XG4gIH1cblxuICBhc3luYyAjZ2V0SGVscElubGluZSgpOiBQcm9taXNlPFNreUhlbHBJbmxpbmVIYXJuZXNzPiB7XG4gICAgY29uc3QgaGFybmVzcyA9IGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKFNreUhlbHBJbmxpbmVIYXJuZXNzKSgpO1xuXG4gICAgaWYgKGhhcm5lc3MpIHtcbiAgICAgIHJldHVybiBoYXJuZXNzO1xuICAgIH1cblxuICAgIHRocm93IEVycm9yKCdObyBoZWxwIGlubGluZSBmb3VuZC4nKTtcbiAgfVxuXG4gIGFzeW5jICN0b2dnbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNEaXNhYmxlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB0b2dnbGUgdGhlIGNoZWNrYm94IGJlY2F1c2UgaXQgaXMgZGlzYWJsZWQuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5jbGljaygpO1xuICAgIH1cbiAgfVxufVxuIl19
|