@skyux/forms 10.0.0-alpha.1 → 10.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/documentation.json +4503 -3629
  2. package/esm2022/index.mjs +5 -1
  3. package/esm2022/lib/modules/character-counter/character-counter-indicator.component.mjs +7 -6
  4. package/esm2022/lib/modules/character-counter/character-counter-screen-reader.pipe.mjs +46 -0
  5. package/esm2022/lib/modules/character-counter/character-counter.directive.mjs +3 -3
  6. package/esm2022/lib/modules/character-counter/character-counter.module.mjs +8 -5
  7. package/esm2022/lib/modules/checkbox/checkbox-label.component.mjs +3 -3
  8. package/esm2022/lib/modules/checkbox/checkbox.component.mjs +28 -20
  9. package/esm2022/lib/modules/checkbox/checkbox.module.mjs +36 -7
  10. package/esm2022/lib/modules/file-attachment/file-attachment-label.component.mjs +3 -3
  11. package/esm2022/lib/modules/file-attachment/file-attachment.component.mjs +6 -7
  12. package/esm2022/lib/modules/file-attachment/file-attachment.service.mjs +5 -6
  13. package/esm2022/lib/modules/file-attachment/file-attachments.module.mjs +4 -4
  14. package/esm2022/lib/modules/file-attachment/file-drop.component.mjs +6 -7
  15. package/esm2022/lib/modules/file-attachment/file-item.component.mjs +4 -4
  16. package/esm2022/lib/modules/file-attachment/file-item.service.mjs +3 -3
  17. package/esm2022/lib/modules/file-attachment/file-size.pipe.mjs +3 -3
  18. package/esm2022/lib/modules/file-attachment/types/file-drop-change.mjs +1 -1
  19. package/esm2022/lib/modules/form-error/form-error.component.mjs +30 -14
  20. package/esm2022/lib/modules/form-error/form-error.module.mjs +16 -0
  21. package/esm2022/lib/modules/form-error/form-errors-enabled-token.mjs +6 -0
  22. package/esm2022/lib/modules/form-error/form-errors.component.mjs +5 -5
  23. package/esm2022/lib/modules/form-error/form-errors.module.mjs +7 -6
  24. package/esm2022/lib/modules/input-box/input-box-adapter.service.mjs +3 -3
  25. package/esm2022/lib/modules/input-box/input-box-control.directive.mjs +3 -3
  26. package/esm2022/lib/modules/input-box/input-box-help-inline.component.mjs +3 -3
  27. package/esm2022/lib/modules/input-box/input-box-host.service.mjs +3 -3
  28. package/esm2022/lib/modules/input-box/input-box.component.mjs +21 -6
  29. package/esm2022/lib/modules/input-box/input-box.module.mjs +26 -12
  30. package/esm2022/lib/modules/radio/radio-group-id.service.mjs +3 -3
  31. package/esm2022/lib/modules/radio/radio-group.component.mjs +74 -10
  32. package/esm2022/lib/modules/radio/radio-label.component.mjs +3 -3
  33. package/esm2022/lib/modules/radio/radio.component.mjs +3 -3
  34. package/esm2022/lib/modules/radio/radio.module.mjs +43 -9
  35. package/esm2022/lib/modules/selection-box/selection-box-adapter.service.mjs +3 -3
  36. package/esm2022/lib/modules/selection-box/selection-box-description.component.mjs +3 -3
  37. package/esm2022/lib/modules/selection-box/selection-box-grid.component.mjs +3 -3
  38. package/esm2022/lib/modules/selection-box/selection-box-header.component.mjs +3 -3
  39. package/esm2022/lib/modules/selection-box/selection-box.component.mjs +3 -3
  40. package/esm2022/lib/modules/selection-box/selection-box.module.mjs +4 -4
  41. package/esm2022/lib/modules/shared/sky-forms-resources.module.mjs +8 -6
  42. package/esm2022/lib/modules/toggle-switch/toggle-switch-label.component.mjs +3 -3
  43. package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +3 -3
  44. package/esm2022/lib/modules/toggle-switch/toggle-switch.module.mjs +4 -4
  45. package/esm2022/testing/checkbox/checkbox-harness.mjs +15 -1
  46. package/esm2022/testing/form-error/form-error-harness.mjs +5 -9
  47. package/esm2022/testing/form-error/form-errors-harness.mjs +15 -64
  48. package/esm2022/testing/input-box/input-box-harness.mjs +59 -2
  49. package/fesm2022/skyux-forms-testing.mjs +122 -106
  50. package/fesm2022/skyux-forms-testing.mjs.map +1 -1
  51. package/fesm2022/skyux-forms.mjs +478 -256
  52. package/fesm2022/skyux-forms.mjs.map +1 -1
  53. package/index.d.ts +4 -0
  54. package/lib/modules/character-counter/character-counter-screen-reader.pipe.d.ts +8 -0
  55. package/lib/modules/character-counter/character-counter.module.d.ts +3 -2
  56. package/lib/modules/checkbox/checkbox.component.d.ts +4 -2
  57. package/lib/modules/checkbox/checkbox.module.d.ts +6 -3
  58. package/lib/modules/file-attachment/types/file-drop-change.d.ts +2 -2
  59. package/lib/modules/form-error/form-error.component.d.ts +17 -3
  60. package/lib/modules/form-error/form-error.module.d.ts +7 -0
  61. package/lib/modules/form-error/form-errors-enabled-token.d.ts +5 -0
  62. package/lib/modules/form-error/form-errors.module.d.ts +2 -1
  63. package/lib/modules/input-box/input-box.component.d.ts +2 -1
  64. package/lib/modules/input-box/input-box.module.d.ts +7 -5
  65. package/lib/modules/radio/radio-group.component.d.ts +18 -3
  66. package/lib/modules/radio/radio.module.d.ts +6 -3
  67. package/package.json +12 -12
  68. package/testing/checkbox/checkbox-harness.d.ts +2 -0
  69. package/testing/form-error/form-error-harness.d.ts +4 -2
  70. package/testing/form-error/form-errors-harness.d.ts +10 -11
  71. package/testing/input-box/input-box-harness.d.ts +36 -1
@@ -57,6 +57,58 @@ class SkyCharacterCounterIndicatorHarness extends SkyComponentHarness {
57
57
  }
58
58
  }
59
59
 
60
+ class SkyFormErrorHarness extends SkyComponentHarness {
61
+ /**
62
+ * @internal
63
+ */
64
+ static { this.hostSelector = 'sky-form-error'; }
65
+ /**
66
+ * Gets a `HarnessPredicate` that can be used to search for a
67
+ * `SkyFormErrorHarness` that meets certain criteria
68
+ */
69
+ static with(filters) {
70
+ return SkyFormErrorHarness.getDataSkyIdPredicate(filters);
71
+ }
72
+ /**
73
+ * Gets the error name.
74
+ */
75
+ async getErrorName() {
76
+ return (await this.host()).getAttribute('errorName');
77
+ }
78
+ }
79
+
80
+ class SkyFormErrorsHarness extends SkyComponentHarness {
81
+ /**
82
+ * @internal
83
+ */
84
+ static { this.hostSelector = 'sky-form-errors'; }
85
+ /**
86
+ * Gets a `HarnessPredicate` that can be used to search for a
87
+ * `SkyFormErrorsHarness` that meets certain criteria
88
+ */
89
+ static with(filters) {
90
+ return SkyFormErrorsHarness.getDataSkyIdPredicate(filters);
91
+ }
92
+ /**
93
+ * Gets a list of all errors fired.
94
+ */
95
+ async getFormErrors() {
96
+ const formErrorHarnesses = await this.locatorForAll(SkyFormErrorHarness.with({}))();
97
+ return Promise.all(formErrorHarnesses.map(async (formError) => {
98
+ return { errorName: await formError.getErrorName() };
99
+ }));
100
+ }
101
+ /**
102
+ * Whether an error with the given name has fired.
103
+ */
104
+ async hasError(errorName) {
105
+ const formErrors = await this.getFormErrors();
106
+ return formErrors.some((error) => {
107
+ return error.errorName === errorName;
108
+ });
109
+ }
110
+ }
111
+
60
112
  /**
61
113
  * Harness for interacting with an input box component in tests.
62
114
  */
@@ -68,6 +120,9 @@ class SkyInputBoxHarness extends SkyComponentHarness {
68
120
  #getHintText = this.locatorForOptional('.sky-input-box-hint-text');
69
121
  #getLabel = this.locatorForOptional('.sky-control-label');
70
122
  #getWrapper = this.locatorFor('.sky-input-box');
123
+ async #getFormError() {
124
+ return this.locatorFor(SkyFormErrorsHarness)();
125
+ }
71
126
  /**
72
127
  * Gets a `HarnessPredicate` that can be used to search for a
73
128
  * `SkyInputBoxHarness` that meets certain criteria.
@@ -104,6 +159,60 @@ class SkyInputBoxHarness extends SkyComponentHarness {
104
159
  }))();
105
160
  return errors;
106
161
  }
162
+ /**
163
+ * Whether the custom error is triggered.
164
+ */
165
+ async hasCustomFormError(errorName) {
166
+ return (await this.#getFormError()).hasError(errorName);
167
+ }
168
+ /**
169
+ * Whether the required field is empty.
170
+ */
171
+ async hasRequiredError() {
172
+ return (await this.#getFormError()).hasError('required');
173
+ }
174
+ /**
175
+ * Whether the field has more characters than allowed.
176
+ */
177
+ async hasMaxLengthError() {
178
+ return (await this.#getFormError()).hasError('maxlength');
179
+ }
180
+ /**
181
+ * Whether the field has fewer characters than allowed.
182
+ */
183
+ async hasMinLengthError() {
184
+ return (await this.#getFormError()).hasError('minlength');
185
+ }
186
+ /**
187
+ * Whether the field is set to an invalid email address.
188
+ */
189
+ async hasEmailError() {
190
+ return (await this.#getFormError()).hasError('email');
191
+ }
192
+ /**
193
+ * Whether the field is set to an invalid URL.
194
+ */
195
+ async hasUrlError() {
196
+ return (await this.#getFormError()).hasError('url');
197
+ }
198
+ /**
199
+ * Whether the field is set to an invalid date.
200
+ */
201
+ async hasDateError() {
202
+ return (await this.#getFormError()).hasError('date');
203
+ }
204
+ /**
205
+ * Whether the field is set to an invalid phone number.
206
+ */
207
+ async hasPhoneFieldError() {
208
+ return (await this.#getFormError()).hasError('phone');
209
+ }
210
+ /**
211
+ * Whether the field is set to an invalid time.
212
+ */
213
+ async hasTimeError() {
214
+ return (await this.#getFormError()).hasError('time');
215
+ }
107
216
  /**
108
217
  * Indicates whether the input box has disabled styles applied.
109
218
  */
@@ -140,7 +249,6 @@ class SkyInputBoxHarness extends SkyComponentHarness {
140
249
  }
141
250
  /**
142
251
  * Indicates whether the input box has stacked styles applied.
143
- * @returns
144
252
  */
145
253
  async getStacked() {
146
254
  const host = await this.host();
@@ -270,6 +378,13 @@ class SkyCheckboxHarness extends SkyComponentHarness {
270
378
  static { this.hostSelector = 'sky-checkbox'; }
271
379
  #getInput = this.locatorFor('input.sky-checkbox-input');
272
380
  #getLabel = this.locatorForOptional(SkyCheckboxLabelHarness);
381
+ async #getFormErrors() {
382
+ const harness = await this.locatorForOptional(SkyFormErrorsHarness)();
383
+ if (harness) {
384
+ return harness;
385
+ }
386
+ throw Error('No form errors found.');
387
+ }
273
388
  /**
274
389
  * Gets a `HarnessPredicate` that can be used to search for a
275
390
  * `SkyCheckboxHarness` that meets certain criteria.
@@ -365,6 +480,12 @@ class SkyCheckboxHarness extends SkyComponentHarness {
365
480
  await this.#toggle();
366
481
  }
367
482
  }
483
+ async hasRequiredError() {
484
+ return (await this.#getFormErrors()).hasError('required');
485
+ }
486
+ async hasCustomError(errorName) {
487
+ return (await this.#getFormErrors()).hasError(errorName);
488
+ }
368
489
  async #toggle() {
369
490
  if (await this.isDisabled()) {
370
491
  throw new Error('Could not toggle the checkbox because it is disabled.');
@@ -375,111 +496,6 @@ class SkyCheckboxHarness extends SkyComponentHarness {
375
496
  }
376
497
  }
377
498
 
378
- class SkyFormErrorHarness extends SkyComponentHarness {
379
- /**
380
- * @internal
381
- */
382
- static { this.hostSelector = 'sky-form-error'; }
383
- /**
384
- * Gets a `HarnessPredicate` that can be used to search for a
385
- * `SkyFormErrorHarness` that meets certain criteria
386
- */
387
- static with(filters) {
388
- return SkyFormErrorHarness.getDataSkyIdPredicate(filters);
389
- }
390
- async #getFormErrorClasses() {
391
- const formErrorClasses = await (await this.host()).getProperty('classList');
392
- return Array.from(formErrorClasses);
393
- }
394
- /*
395
- * Gets the error class that signifies which error has fired.
396
- */
397
- async getFirstClassError() {
398
- return (await this.#getFormErrorClasses())[0];
399
- }
400
- }
401
-
402
- class SkyFormErrorsHarness extends SkyComponentHarness {
403
- /**
404
- * @internal
405
- */
406
- static { this.hostSelector = 'sky-form-errors'; }
407
- #getFormError = this.locatorForAll('sky-form-error');
408
- async #getFormErrorsClasses() {
409
- const formErrorHarnesses = await this.locatorForAll(SkyFormErrorHarness.with({}))();
410
- return Promise.all(formErrorHarnesses.map((formError) => {
411
- return formError.getFirstClassError();
412
- }));
413
- }
414
- /**
415
- * Gets a `HarnessPredicate` that can be used to search for a
416
- * `SkyFormErrorsHarness` that meets certain criteria
417
- */
418
- static with(filters) {
419
- return SkyFormErrorsHarness.getDataSkyIdPredicate(filters);
420
- }
421
- /*
422
- * Gets total number of errors.
423
- */
424
- async getNumberOfErrors() {
425
- return (await this.#getFormError()).length;
426
- }
427
- /*
428
- * Gets if the required error has triggered.
429
- */
430
- async hasRequiredError() {
431
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-required');
432
- }
433
- /*
434
- * Gets if the maximum length error has triggered.
435
- */
436
- async hasMaxLengthError() {
437
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-maxlength');
438
- }
439
- /*
440
- * Gets if the minimum length has triggered.
441
- */
442
- async hasMinLengthError() {
443
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-minlength');
444
- }
445
- /*
446
- * Gets if the character count error has triggered.
447
- */
448
- async hasCharacterCountError() {
449
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-character-counter');
450
- }
451
- /*
452
- * Gets if the date error has triggered.
453
- */
454
- async hasDateError() {
455
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-date');
456
- }
457
- /*
458
- * Gets if the email error has triggered.
459
- */
460
- async hasEmailError() {
461
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-email');
462
- }
463
- /*
464
- * Gets if the phone field error has triggered.
465
- */
466
- async hasPhoneFieldError() {
467
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-phone');
468
- }
469
- /*
470
- * Gets if the time field error has triggered.
471
- */
472
- async hasTimeError() {
473
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-time');
474
- }
475
- /*
476
- * Gets if the URL error has triggered.
477
- */
478
- async hasUrlError() {
479
- return (await this.#getFormErrorsClasses()).includes('sky-form-error-url');
480
- }
481
- }
482
-
483
499
  /**
484
500
  * Allows interaction with a SKY UX radio buttons within a radio group.
485
501
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-forms-testing.mjs","sources":["../../../../../libs/components/forms/testing/src/character-counter/character-counter-indicator-harness.ts","../../../../../libs/components/forms/testing/src/input-box/input-box-harness.ts","../../../../../libs/components/forms/testing/src/checkbox-fixture.ts","../../../../../libs/components/forms/testing/src/checkbox/checkbox-label-harness.ts","../../../../../libs/components/forms/testing/src/checkbox/checkbox-harness.ts","../../../../../libs/components/forms/testing/src/form-error/form-error-harness.ts","../../../../../libs/components/forms/testing/src/form-error/form-errors-harness.ts","../../../../../libs/components/forms/testing/src/radio-fixture.ts","../../../../../libs/components/forms/testing/src/skyux-forms-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyCharacterCounterIndicatorHarnessFilters } from './character-counter-indicator-harness-filters';\n\ntype LabelParts = {\n count: number;\n limit: number;\n};\n\n/**\n * Harness for interacting with a character counter indicator component in tests.\n */\nexport class SkyCharacterCounterIndicatorHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-character-counter-indicator';\n\n #getLabel = this.locatorFor('.sky-character-count-label');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyCharacterCounterIndicatorHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyCharacterCounterIndicatorHarnessFilters,\n ): HarnessPredicate<SkyCharacterCounterIndicatorHarness> {\n return SkyCharacterCounterIndicatorHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Gets the current character count.\n */\n public async getCharacterCount(): Promise<number> {\n return (await this.#getLabelParts()).count;\n }\n\n /**\n * Gets the character counter limit.\n */\n public async getCharacterCountLimit(): Promise<number> {\n return (await this.#getLabelParts()).limit;\n }\n\n /**\n * Indicates whether the character counter is in an error state because the current character\n * count is greater than the limit.\n */\n public async isOverLimit(): Promise<boolean> {\n return (await this.#getLabel()).hasClass('sky-error-label');\n }\n\n async #getLabelParts(): Promise<LabelParts> {\n const label = await this.#getLabel();\n const textParts = (await label.text()).split('/');\n\n let labelParts: LabelParts | undefined;\n\n if (textParts.length === 2) {\n labelParts = {\n count: +textParts[0].trim(),\n limit: +textParts[1].trim(),\n };\n }\n\n if (labelParts && !isNaN(labelParts.count) && !isNaN(labelParts.limit)) {\n return labelParts;\n }\n\n throw new Error(\n 'The character counter indicator does not contain text in the expected format.',\n );\n }\n}\n","import {\n ComponentHarness,\n HarnessPredicate,\n HarnessQuery,\n TestElement,\n} from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyStatusIndicatorHarness } from '@skyux/indicators/testing';\nimport { SkyPopoverHarness } from '@skyux/popovers/testing';\n\nimport { SkyCharacterCounterIndicatorHarness } from '../character-counter/character-counter-indicator-harness';\n\nimport { SkyInputBoxHarnessFilters } from './input-box-harness-filters';\n\n/**\n * Harness for interacting with an input box component in tests.\n */\nexport class SkyInputBoxHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-input-box';\n\n #getHintText = this.locatorForOptional('.sky-input-box-hint-text');\n #getLabel = this.locatorForOptional('.sky-control-label');\n #getWrapper = this.locatorFor('.sky-input-box');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyInputBoxHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyInputBoxHarnessFilters,\n ): HarnessPredicate<SkyInputBoxHarness> {\n return SkyInputBoxHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Returns a child harness.\n */\n public async queryHarness<T extends ComponentHarness>(\n query: HarnessQuery<T>,\n ): Promise<T | null> {\n return this.locatorForOptional(query)();\n }\n\n /**\n * Gets the character counter indicator for the input box or throws an error if\n * a character limit is not specified.\n */\n public async getCharacterCounter(): Promise<SkyCharacterCounterIndicatorHarness> {\n const characterCounter = await this.locatorForOptional(\n new HarnessPredicate(SkyCharacterCounterIndicatorHarness, {\n ancestor: '.sky-input-box-label-wrapper',\n }),\n )();\n\n if (!characterCounter) {\n throw new Error(\n 'The input box does not have a character limit specified.',\n );\n }\n\n return characterCounter;\n }\n\n /**\n * Gets a list of status indicator harnesses for errors not automatically\n * handled by input box.\n */\n public async getCustomErrors(): Promise<SkyStatusIndicatorHarness[]> {\n const errors = await this.locatorForAll(\n new HarnessPredicate(SkyStatusIndicatorHarness, {\n selector:\n 'sky-status-indicator:not(sky-form-error sky-status-indicator)',\n }),\n )();\n\n return errors;\n }\n\n /**\n * Indicates whether the input box has disabled styles applied.\n */\n public async getDisabled(): Promise<boolean> {\n const wrapper = await this.#getWrapper();\n\n return wrapper.hasClass('sky-input-box-disabled');\n }\n\n /**\n * Gets the text for the input box label.\n */\n public async getLabelText(): Promise<string> {\n const label = await this.#getLabel();\n\n return this.#getElementTextOrDefault(label);\n }\n\n /**\n * Gets the help popover for the input box or throws an error if\n * the help popover is not configured.\n */\n public async getHelpPopover(): Promise<SkyPopoverHarness> {\n const helpPopover = await this.locatorForOptional(\n new HarnessPredicate(SkyPopoverHarness, {\n ancestor: '.sky-control-help',\n }),\n )();\n\n if (!helpPopover) {\n throw new Error('The input box does not have a help popover configured.');\n }\n\n return helpPopover;\n }\n\n /**\n * Gets the hint text for the input box.\n */\n public async getHintText(): Promise<string> {\n const hintText = await this.#getHintText();\n\n return this.#getElementTextOrDefault(hintText);\n }\n\n /**\n * Indicates whether the input box has stacked styles applied.\n * @returns\n */\n public async getStacked(): Promise<boolean> {\n const host = await this.host();\n\n return host.hasClass('sky-margin-stacked-lg');\n }\n\n async #getElementTextOrDefault(el: TestElement | null): Promise<string> {\n return (await el?.text())?.trim() ?? '';\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX checkbox component.\n * @internal\n * @deprecated Use `SkyCheckboxHarness` instead.\n */\nexport class SkyCheckboxFixture {\n #debugEl: DebugElement;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-checkbox',\n );\n }\n\n /**\n * A flag indicating whether the checkbox is currently selected.\n */\n public get selected(): boolean {\n return this.#getCheckboxInputEl().nativeElement.checked;\n }\n\n /**\n * The checkbox's label\n */\n public get labelText(): string | undefined {\n return SkyAppTestUtility.getText(\n this.#debugEl.query(By.css('label.sky-checkbox-wrapper')),\n );\n }\n\n /**\n * The checkbox's icon type\n */\n public get iconType(): string | undefined {\n const classList = this.#debugEl.query(By.css('.fa.sky-icon'))?.nativeElement\n .classList;\n\n for (let i = 0, n = classList?.length; i < n; i++) {\n const cls = classList.item(i);\n\n if (cls.indexOf('fa-') === 0) {\n return cls.substr(3);\n }\n }\n return;\n }\n\n /**\n * The checkbox's type.\n */\n public get checkboxType(): string | undefined {\n const classList = this.#getCheckboxBoxEl().nativeElement.classList;\n\n if (classList.contains('sky-switch-control-danger')) {\n return 'danger';\n }\n\n if (classList.contains('sky-switch-control-info')) {\n return 'info';\n }\n\n if (classList.contains('sky-switch-control-success')) {\n return 'success';\n }\n\n if (classList.contains('sky-switch-control-warning')) {\n return 'warning';\n }\n\n return undefined;\n }\n\n /**\n * A flag indicating whether the checkbox is currently disabled.\n */\n public get disabled(): boolean {\n return this.#getCheckboxInputEl().nativeElement.disabled;\n }\n\n /**\n * Selects the checkbox.\n */\n public select(): void {\n if (!this.selected) {\n this.#clickCheckboxLabelEl();\n }\n }\n\n /**\n * Deselects the checkbox.\n */\n public deselect(): void {\n if (this.selected) {\n this.#clickCheckboxLabelEl();\n }\n }\n\n #clickCheckboxLabelEl(): void {\n this.#debugEl\n .query(By.css('label.sky-checkbox-wrapper'))\n .nativeElement.click();\n }\n\n #getCheckboxInputEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-checkbox-wrapper input'));\n }\n\n #getCheckboxBoxEl(): DebugElement {\n return this.#debugEl.query(By.css('label.sky-checkbox-wrapper span'));\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a checkbox label component in tests.\n * @internal\n */\nexport class SkyCheckboxLabelHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-checkbox-label';\n\n #getLabelContent = this.locatorFor('.sky-switch-label');\n\n /**\n * Gets the text content of the checkbox label.\n */\n public async getText(): Promise<string> {\n return (await this.#getLabelContent()).text();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyCheckboxHarnessFilters } from './checkbox-harness-filters';\nimport { SkyCheckboxLabelHarness } from './checkbox-label-harness';\n\n/**\n * Harness for interacting with a checkbox component in tests.\n * @internal\n */\nexport class SkyCheckboxHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-checkbox';\n\n #getInput = this.locatorFor('input.sky-checkbox-input');\n\n #getLabel = this.locatorForOptional(SkyCheckboxLabelHarness);\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyCheckboxHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyCheckboxHarnessFilters,\n ): HarnessPredicate<SkyCheckboxHarness> {\n return SkyCheckboxHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the checkbox.\n */\n public async blur(): Promise<void> {\n return (await this.#getInput()).blur();\n }\n\n /**\n * Puts the checkbox in a checked state by toggling it if it is currently unchecked, or doing nothing if it is already checked.\n */\n public async check(): Promise<void> {\n if (!(await this.isChecked())) {\n await this.#toggle();\n }\n }\n\n /**\n * Focuses the checkbox.\n */\n public async focus(): Promise<void> {\n return (await this.#getInput()).focus();\n }\n\n /**\n * Gets the checkbox's aria-label.\n */\n public async getAriaLabel(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-label');\n }\n\n /**\n * Gets the checkbox's aria-labelledby.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the checkbox's label text.\n */\n public async getLabelText(): Promise<string | undefined> {\n const label = await this.#getLabel();\n if (label) {\n return label.getText();\n }\n return;\n }\n\n /**\n * Gets the checkbox's name.\n */\n public async getName(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('name');\n }\n\n /**\n * Gets the checkbox's value.\n */\n public async getValue(): Promise<string | null> {\n return (await this.#getInput()).getProperty<string | null>('value');\n }\n\n /**\n * Whether the checkbox is checked.\n */\n public async isChecked(): Promise<boolean> {\n return (await this.#getInput()).getProperty<boolean>('checked');\n }\n\n /**\n * Whether the checkbox is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.#getInput()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the checkbox is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.#getInput()).isFocused();\n }\n\n /**\n * Whether the checkbox is required.\n */\n public async isRequired(): Promise<boolean> {\n const value = await (await this.#getInput()).getAttribute('required');\n return value !== null;\n }\n\n /**\n * Puts the checkbox in an unchecked state by toggling it if it is currently checked, or doing nothing if it is already unchecked.\n */\n public async uncheck(): Promise<void> {\n if (await this.isChecked()) {\n await this.#toggle();\n }\n }\n\n async #toggle(): Promise<void> {\n if (await this.isDisabled()) {\n throw new Error('Could not toggle the checkbox because it is disabled.');\n } else {\n await (await this.#getInput()).click();\n }\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorHarnessFilters } from './form-error-harness.filters';\n\nexport class SkyFormErrorHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-form-error';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyFormErrorHarness` that meets certain criteria\n */\n public static with(\n filters: SkyFormErrorHarnessFilters,\n ): HarnessPredicate<SkyFormErrorHarness> {\n return SkyFormErrorHarness.getDataSkyIdPredicate(filters);\n }\n\n async #getFormErrorClasses(): Promise<string[]> {\n const formErrorClasses = await (await this.host()).getProperty('classList');\n return Array.from(formErrorClasses);\n }\n\n /*\n * Gets the error class that signifies which error has fired.\n */\n public async getFirstClassError(): Promise<string> {\n return (await this.#getFormErrorClasses())[0];\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorHarness } from './form-error-harness';\nimport { SkyFormErrorsHarnessFilters } from './form-errors-harness.filters';\n\nexport class SkyFormErrorsHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-form-errors';\n\n #getFormError = this.locatorForAll('sky-form-error');\n\n async #getFormErrorsClasses(): Promise<string[]> {\n const formErrorHarnesses = await this.locatorForAll(\n SkyFormErrorHarness.with({}),\n )();\n\n return Promise.all(\n formErrorHarnesses.map((formError) => {\n return formError.getFirstClassError();\n }),\n );\n }\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyFormErrorsHarness` that meets certain criteria\n */\n public static with(\n filters: SkyFormErrorsHarnessFilters,\n ): HarnessPredicate<SkyFormErrorsHarness> {\n return SkyFormErrorsHarness.getDataSkyIdPredicate(filters);\n }\n\n /*\n * Gets total number of errors.\n */\n public async getNumberOfErrors(): Promise<number> {\n return (await this.#getFormError()).length;\n }\n\n /*\n * Gets if the required error has triggered.\n */\n public async hasRequiredError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-required',\n );\n }\n\n /*\n * Gets if the maximum length error has triggered.\n */\n public async hasMaxLengthError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-maxlength',\n );\n }\n\n /*\n * Gets if the minimum length has triggered.\n */\n public async hasMinLengthError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-minlength',\n );\n }\n\n /*\n * Gets if the character count error has triggered.\n */\n public async hasCharacterCountError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-character-counter',\n );\n }\n\n /*\n * Gets if the date error has triggered.\n */\n public async hasDateError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes('sky-form-error-date');\n }\n\n /*\n * Gets if the email error has triggered.\n */\n public async hasEmailError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-email',\n );\n }\n\n /*\n * Gets if the phone field error has triggered.\n */\n public async hasPhoneFieldError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes(\n 'sky-form-error-phone',\n );\n }\n\n /*\n * Gets if the time field error has triggered.\n */\n public async hasTimeError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes('sky-form-error-time');\n }\n\n /*\n * Gets if the URL error has triggered.\n */\n public async hasUrlError(): Promise<boolean> {\n return (await this.#getFormErrorsClasses()).includes('sky-form-error-url');\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX radio buttons within a radio group.\n * @internal\n */\nexport class SkyRadioFixture {\n #debugEl: DebugElement;\n #fixture: ComponentFixture<any>;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#fixture = fixture;\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-radio-group',\n );\n }\n\n /**\n * The selected radio button value.\n */\n public get value(): string {\n const selectedRadio = this.#debugEl.query(\n By.css('sky-radio input:checked'),\n );\n const selectedValue = selectedRadio && selectedRadio.nativeElement.value;\n\n return selectedValue;\n }\n\n /**\n * Set the selected radio button value.\n */\n public set value(value: string) {\n const allRadioInputs = this.#getAllRadioInputEls();\n\n allRadioInputs.forEach((input, index) => {\n if (input.nativeElement.value === value) {\n input.nativeElement.checked = true;\n } else {\n input.nativeElement.checked = false;\n }\n });\n }\n\n /**\n * A flag indicating if every radio button in the radio group is disabled.\n */\n public get disabled(): boolean {\n const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n for (let i = 0; i < allRadioButtons.length; i++) {\n if (!this.#radioButtonDisabled(i)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Set the disabled value for all radio buttons.\n */\n public set disabled(value: boolean) {\n const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n allRadioButtons.forEach((button, index) => {\n this.#setRadioButtonDisabled(index, value);\n });\n }\n\n #getAllSkyRadioButtonEls(): DebugElement[] {\n return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio'));\n }\n\n #getAllRadioInputEls(): DebugElement[] {\n return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio input'));\n }\n\n #getRadioButtonInputEl(index: number): DebugElement | undefined {\n const allRadioInputs = this.#getAllRadioInputEls();\n\n if (allRadioInputs && allRadioInputs[index]) {\n return allRadioInputs[index];\n }\n /* istanbul ignore next */\n return;\n }\n\n #radioButtonDisabled(index: number): boolean {\n const radioButton = this.#getRadioButtonInputEl(index);\n\n return radioButton && radioButton.nativeElement.disabled;\n }\n\n #setRadioButtonDisabled(index: number, value: boolean): void {\n const radioButton = this.#getRadioButtonInputEl(index);\n\n /* istanbul ignore else */\n if (radioButton) {\n radioButton.nativeElement.disabled = value;\n\n this.#fixture.detectChanges();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skyux-forms-testing.mjs","sources":["../../../../../libs/components/forms/testing/src/character-counter/character-counter-indicator-harness.ts","../../../../../libs/components/forms/testing/src/form-error/form-error-harness.ts","../../../../../libs/components/forms/testing/src/form-error/form-errors-harness.ts","../../../../../libs/components/forms/testing/src/input-box/input-box-harness.ts","../../../../../libs/components/forms/testing/src/checkbox-fixture.ts","../../../../../libs/components/forms/testing/src/checkbox/checkbox-label-harness.ts","../../../../../libs/components/forms/testing/src/checkbox/checkbox-harness.ts","../../../../../libs/components/forms/testing/src/radio-fixture.ts","../../../../../libs/components/forms/testing/src/skyux-forms-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyCharacterCounterIndicatorHarnessFilters } from './character-counter-indicator-harness-filters';\n\ntype LabelParts = {\n count: number;\n limit: number;\n};\n\n/**\n * Harness for interacting with a character counter indicator component in tests.\n */\nexport class SkyCharacterCounterIndicatorHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-character-counter-indicator';\n\n #getLabel = this.locatorFor('.sky-character-count-label');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyCharacterCounterIndicatorHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyCharacterCounterIndicatorHarnessFilters,\n ): HarnessPredicate<SkyCharacterCounterIndicatorHarness> {\n return SkyCharacterCounterIndicatorHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Gets the current character count.\n */\n public async getCharacterCount(): Promise<number> {\n return (await this.#getLabelParts()).count;\n }\n\n /**\n * Gets the character counter limit.\n */\n public async getCharacterCountLimit(): Promise<number> {\n return (await this.#getLabelParts()).limit;\n }\n\n /**\n * Indicates whether the character counter is in an error state because the current character\n * count is greater than the limit.\n */\n public async isOverLimit(): Promise<boolean> {\n return (await this.#getLabel()).hasClass('sky-error-label');\n }\n\n async #getLabelParts(): Promise<LabelParts> {\n const label = await this.#getLabel();\n const textParts = (await label.text()).split('/');\n\n let labelParts: LabelParts | undefined;\n\n if (textParts.length === 2) {\n labelParts = {\n count: +textParts[0].trim(),\n limit: +textParts[1].trim(),\n };\n }\n\n if (labelParts && !isNaN(labelParts.count) && !isNaN(labelParts.limit)) {\n return labelParts;\n }\n\n throw new Error(\n 'The character counter indicator does not contain text in the expected format.',\n );\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorHarnessFilters } from './form-error-harness.filters';\n\nexport class SkyFormErrorHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-form-error';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyFormErrorHarness` that meets certain criteria\n */\n public static with(\n filters: SkyFormErrorHarnessFilters,\n ): HarnessPredicate<SkyFormErrorHarness> {\n return SkyFormErrorHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Gets the error name.\n */\n public async getErrorName(): Promise<string | null> {\n return (await this.host()).getAttribute('errorName');\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorHarness } from './form-error-harness';\nimport { SkyFormErrorsHarnessFilters } from './form-errors-harness.filters';\n\nexport class SkyFormErrorsHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-form-errors';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyFormErrorsHarness` that meets certain criteria\n */\n public static with(\n filters: SkyFormErrorsHarnessFilters,\n ): HarnessPredicate<SkyFormErrorsHarness> {\n return SkyFormErrorsHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Gets a list of all errors fired.\n */\n public async getFormErrors(): Promise<{ errorName: string | null }[]> {\n const formErrorHarnesses = await this.locatorForAll(\n SkyFormErrorHarness.with({}),\n )();\n\n return Promise.all(\n formErrorHarnesses.map(async (formError) => {\n return { errorName: await formError.getErrorName() };\n }),\n );\n }\n\n /**\n * Whether an error with the given name has fired.\n */\n public async hasError(errorName: string): Promise<boolean> {\n const formErrors = await this.getFormErrors();\n return formErrors.some((error) => {\n return error.errorName === errorName;\n });\n }\n}\n","import {\n ComponentHarness,\n HarnessPredicate,\n HarnessQuery,\n TestElement,\n} from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyStatusIndicatorHarness } from '@skyux/indicators/testing';\nimport { SkyPopoverHarness } from '@skyux/popovers/testing';\n\nimport { SkyCharacterCounterIndicatorHarness } from '../character-counter/character-counter-indicator-harness';\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyInputBoxHarnessFilters } from './input-box-harness-filters';\n\n/**\n * Harness for interacting with an input box component in tests.\n */\nexport class SkyInputBoxHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-input-box';\n\n #getHintText = this.locatorForOptional('.sky-input-box-hint-text');\n #getLabel = this.locatorForOptional('.sky-control-label');\n #getWrapper = this.locatorFor('.sky-input-box');\n\n async #getFormError(): Promise<SkyFormErrorsHarness> {\n return this.locatorFor(SkyFormErrorsHarness)();\n }\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyInputBoxHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyInputBoxHarnessFilters,\n ): HarnessPredicate<SkyInputBoxHarness> {\n return SkyInputBoxHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Returns a child harness.\n */\n public async queryHarness<T extends ComponentHarness>(\n query: HarnessQuery<T>,\n ): Promise<T | null> {\n return this.locatorForOptional(query)();\n }\n\n /**\n * Gets the character counter indicator for the input box or throws an error if\n * a character limit is not specified.\n */\n public async getCharacterCounter(): Promise<SkyCharacterCounterIndicatorHarness> {\n const characterCounter = await this.locatorForOptional(\n new HarnessPredicate(SkyCharacterCounterIndicatorHarness, {\n ancestor: '.sky-input-box-label-wrapper',\n }),\n )();\n\n if (!characterCounter) {\n throw new Error(\n 'The input box does not have a character limit specified.',\n );\n }\n\n return characterCounter;\n }\n\n /**\n * Gets a list of status indicator harnesses for errors not automatically\n * handled by input box.\n */\n public async getCustomErrors(): Promise<SkyStatusIndicatorHarness[]> {\n const errors = await this.locatorForAll(\n new HarnessPredicate(SkyStatusIndicatorHarness, {\n selector:\n 'sky-status-indicator:not(sky-form-error sky-status-indicator)',\n }),\n )();\n\n return errors;\n }\n\n /**\n * Whether the custom error is triggered.\n */\n public async hasCustomFormError(errorName: string): Promise<boolean> {\n return (await this.#getFormError()).hasError(errorName);\n }\n\n /**\n * Whether the required field is empty.\n */\n public async hasRequiredError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('required');\n }\n\n /**\n * Whether the field has more characters than allowed.\n */\n public async hasMaxLengthError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('maxlength');\n }\n\n /**\n * Whether the field has fewer characters than allowed.\n */\n public async hasMinLengthError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('minlength');\n }\n\n /**\n * Whether the field is set to an invalid email address.\n */\n public async hasEmailError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('email');\n }\n\n /**\n * Whether the field is set to an invalid URL.\n */\n public async hasUrlError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('url');\n }\n\n /**\n * Whether the field is set to an invalid date.\n */\n public async hasDateError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('date');\n }\n\n /**\n * Whether the field is set to an invalid phone number.\n */\n public async hasPhoneFieldError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('phone');\n }\n\n /**\n * Whether the field is set to an invalid time.\n */\n public async hasTimeError(): Promise<boolean> {\n return (await this.#getFormError()).hasError('time');\n }\n\n /**\n * Indicates whether the input box has disabled styles applied.\n */\n public async getDisabled(): Promise<boolean> {\n const wrapper = await this.#getWrapper();\n\n return wrapper.hasClass('sky-input-box-disabled');\n }\n\n /**\n * Gets the text for the input box label.\n */\n public async getLabelText(): Promise<string> {\n const label = await this.#getLabel();\n\n return this.#getElementTextOrDefault(label);\n }\n\n /**\n * Gets the help popover for the input box or throws an error if\n * the help popover is not configured.\n */\n public async getHelpPopover(): Promise<SkyPopoverHarness> {\n const helpPopover = await this.locatorForOptional(\n new HarnessPredicate(SkyPopoverHarness, {\n ancestor: '.sky-control-help',\n }),\n )();\n\n if (!helpPopover) {\n throw new Error('The input box does not have a help popover configured.');\n }\n\n return helpPopover;\n }\n\n /**\n * Gets the hint text for the input box.\n */\n public async getHintText(): Promise<string> {\n const hintText = await this.#getHintText();\n\n return this.#getElementTextOrDefault(hintText);\n }\n\n /**\n * Indicates whether the input box has stacked styles applied.\n */\n public async getStacked(): Promise<boolean> {\n const host = await this.host();\n\n return host.hasClass('sky-margin-stacked-lg');\n }\n\n async #getElementTextOrDefault(el: TestElement | null): Promise<string> {\n return (await el?.text())?.trim() ?? '';\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX checkbox component.\n * @internal\n * @deprecated Use `SkyCheckboxHarness` instead.\n */\nexport class SkyCheckboxFixture {\n #debugEl: DebugElement;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-checkbox',\n );\n }\n\n /**\n * A flag indicating whether the checkbox is currently selected.\n */\n public get selected(): boolean {\n return this.#getCheckboxInputEl().nativeElement.checked;\n }\n\n /**\n * The checkbox's label\n */\n public get labelText(): string | undefined {\n return SkyAppTestUtility.getText(\n this.#debugEl.query(By.css('label.sky-checkbox-wrapper')),\n );\n }\n\n /**\n * The checkbox's icon type\n */\n public get iconType(): string | undefined {\n const classList = this.#debugEl.query(By.css('.fa.sky-icon'))?.nativeElement\n .classList;\n\n for (let i = 0, n = classList?.length; i < n; i++) {\n const cls = classList.item(i);\n\n if (cls.indexOf('fa-') === 0) {\n return cls.substr(3);\n }\n }\n return;\n }\n\n /**\n * The checkbox's type.\n */\n public get checkboxType(): string | undefined {\n const classList = this.#getCheckboxBoxEl().nativeElement.classList;\n\n if (classList.contains('sky-switch-control-danger')) {\n return 'danger';\n }\n\n if (classList.contains('sky-switch-control-info')) {\n return 'info';\n }\n\n if (classList.contains('sky-switch-control-success')) {\n return 'success';\n }\n\n if (classList.contains('sky-switch-control-warning')) {\n return 'warning';\n }\n\n return undefined;\n }\n\n /**\n * A flag indicating whether the checkbox is currently disabled.\n */\n public get disabled(): boolean {\n return this.#getCheckboxInputEl().nativeElement.disabled;\n }\n\n /**\n * Selects the checkbox.\n */\n public select(): void {\n if (!this.selected) {\n this.#clickCheckboxLabelEl();\n }\n }\n\n /**\n * Deselects the checkbox.\n */\n public deselect(): void {\n if (this.selected) {\n this.#clickCheckboxLabelEl();\n }\n }\n\n #clickCheckboxLabelEl(): void {\n this.#debugEl\n .query(By.css('label.sky-checkbox-wrapper'))\n .nativeElement.click();\n }\n\n #getCheckboxInputEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-checkbox-wrapper input'));\n }\n\n #getCheckboxBoxEl(): DebugElement {\n return this.#debugEl.query(By.css('label.sky-checkbox-wrapper span'));\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a checkbox label component in tests.\n * @internal\n */\nexport class SkyCheckboxLabelHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-checkbox-label';\n\n #getLabelContent = this.locatorFor('.sky-switch-label');\n\n /**\n * Gets the text content of the checkbox label.\n */\n public async getText(): Promise<string> {\n return (await this.#getLabelContent()).text();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyCheckboxHarnessFilters } from './checkbox-harness-filters';\nimport { SkyCheckboxLabelHarness } from './checkbox-label-harness';\n\n/**\n * Harness for interacting with a checkbox component in tests.\n * @internal\n */\nexport class SkyCheckboxHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-checkbox';\n\n #getInput = this.locatorFor('input.sky-checkbox-input');\n\n #getLabel = this.locatorForOptional(SkyCheckboxLabelHarness);\n\n async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n const harness = await this.locatorForOptional(SkyFormErrorsHarness)();\n\n if (harness) {\n return harness;\n }\n\n throw Error('No form errors found.');\n }\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyCheckboxHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyCheckboxHarnessFilters,\n ): HarnessPredicate<SkyCheckboxHarness> {\n return SkyCheckboxHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the checkbox.\n */\n public async blur(): Promise<void> {\n return (await this.#getInput()).blur();\n }\n\n /**\n * Puts the checkbox in a checked state by toggling it if it is currently unchecked, or doing nothing if it is already checked.\n */\n public async check(): Promise<void> {\n if (!(await this.isChecked())) {\n await this.#toggle();\n }\n }\n\n /**\n * Focuses the checkbox.\n */\n public async focus(): Promise<void> {\n return (await this.#getInput()).focus();\n }\n\n /**\n * Gets the checkbox's aria-label.\n */\n public async getAriaLabel(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-label');\n }\n\n /**\n * Gets the checkbox's aria-labelledby.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the checkbox's label text.\n */\n public async getLabelText(): Promise<string | undefined> {\n const label = await this.#getLabel();\n if (label) {\n return label.getText();\n }\n return;\n }\n\n /**\n * Gets the checkbox's name.\n */\n public async getName(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('name');\n }\n\n /**\n * Gets the checkbox's value.\n */\n public async getValue(): Promise<string | null> {\n return (await this.#getInput()).getProperty<string | null>('value');\n }\n\n /**\n * Whether the checkbox is checked.\n */\n public async isChecked(): Promise<boolean> {\n return (await this.#getInput()).getProperty<boolean>('checked');\n }\n\n /**\n * Whether the checkbox is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.#getInput()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the checkbox is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.#getInput()).isFocused();\n }\n\n /**\n * Whether the checkbox is required.\n */\n public async isRequired(): Promise<boolean> {\n const value = await (await this.#getInput()).getAttribute('required');\n return value !== null;\n }\n\n /**\n * Puts the checkbox in an unchecked state by toggling it if it is currently checked, or doing nothing if it is already unchecked.\n */\n public async uncheck(): Promise<void> {\n if (await this.isChecked()) {\n await this.#toggle();\n }\n }\n\n public async hasRequiredError(): Promise<boolean> {\n return (await this.#getFormErrors()).hasError('required');\n }\n\n public async hasCustomError(errorName: string): Promise<boolean> {\n return (await this.#getFormErrors()).hasError(errorName);\n }\n\n async #toggle(): Promise<void> {\n if (await this.isDisabled()) {\n throw new Error('Could not toggle the checkbox because it is disabled.');\n } else {\n await (await this.#getInput()).click();\n }\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX radio buttons within a radio group.\n * @internal\n */\nexport class SkyRadioFixture {\n #debugEl: DebugElement;\n #fixture: ComponentFixture<any>;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#fixture = fixture;\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-radio-group',\n );\n }\n\n /**\n * The selected radio button value.\n */\n public get value(): string {\n const selectedRadio = this.#debugEl.query(\n By.css('sky-radio input:checked'),\n );\n const selectedValue = selectedRadio && selectedRadio.nativeElement.value;\n\n return selectedValue;\n }\n\n /**\n * Set the selected radio button value.\n */\n public set value(value: string) {\n const allRadioInputs = this.#getAllRadioInputEls();\n\n allRadioInputs.forEach((input, index) => {\n if (input.nativeElement.value === value) {\n input.nativeElement.checked = true;\n } else {\n input.nativeElement.checked = false;\n }\n });\n }\n\n /**\n * A flag indicating if every radio button in the radio group is disabled.\n */\n public get disabled(): boolean {\n const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n for (let i = 0; i < allRadioButtons.length; i++) {\n if (!this.#radioButtonDisabled(i)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Set the disabled value for all radio buttons.\n */\n public set disabled(value: boolean) {\n const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n allRadioButtons.forEach((button, index) => {\n this.#setRadioButtonDisabled(index, value);\n });\n }\n\n #getAllSkyRadioButtonEls(): DebugElement[] {\n return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio'));\n }\n\n #getAllRadioInputEls(): DebugElement[] {\n return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio input'));\n }\n\n #getRadioButtonInputEl(index: number): DebugElement | undefined {\n const allRadioInputs = this.#getAllRadioInputEls();\n\n if (allRadioInputs && allRadioInputs[index]) {\n return allRadioInputs[index];\n }\n /* istanbul ignore next */\n return;\n }\n\n #radioButtonDisabled(index: number): boolean {\n const radioButton = this.#getRadioButtonInputEl(index);\n\n return radioButton && radioButton.nativeElement.disabled;\n }\n\n #setRadioButtonDisabled(index: number, value: boolean): void {\n const radioButton = this.#getRadioButtonInputEl(index);\n\n /* istanbul ignore else */\n if (radioButton) {\n radioButton.nativeElement.disabled = value;\n\n this.#fixture.detectChanges();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}