@crowdstrike/glide-core 0.9.6 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +17 -53
  2. package/dist/accordion.d.ts +10 -10
  3. package/dist/accordion.js +1 -1
  4. package/dist/accordion.stories.d.ts +0 -1
  5. package/dist/accordion.styles.js +36 -38
  6. package/dist/accordion.test.basics.js +13 -95
  7. package/dist/accordion.test.events.js +21 -33
  8. package/dist/accordion.test.focus.d.ts +1 -0
  9. package/dist/accordion.test.focus.js +11 -0
  10. package/dist/accordion.test.interactions.d.ts +1 -0
  11. package/dist/accordion.test.interactions.js +75 -0
  12. package/dist/button-group.button.d.ts +2 -4
  13. package/dist/button-group.button.js +1 -1
  14. package/dist/button-group.button.styles.js +6 -14
  15. package/dist/button-group.button.test.basics.js +8 -17
  16. package/dist/button-group.button.test.interactions.js +4 -4
  17. package/dist/button-group.d.ts +0 -2
  18. package/dist/button-group.test.basics.js +10 -10
  19. package/dist/button-group.test.events.js +2 -2
  20. package/dist/button-group.test.interactions.js +1 -1
  21. package/dist/button.d.ts +7 -10
  22. package/dist/button.js +1 -1
  23. package/dist/button.styles.js +4 -7
  24. package/dist/button.test.basics.js +10 -26
  25. package/dist/button.test.events.js +9 -9
  26. package/dist/checkbox-group.d.ts +3 -4
  27. package/dist/checkbox-group.js +1 -1
  28. package/dist/checkbox-group.styles.js +13 -1
  29. package/dist/checkbox-group.test.basics.js +8 -12
  30. package/dist/checkbox-group.test.focus.js +7 -7
  31. package/dist/checkbox-group.test.interactions.d.ts +1 -0
  32. package/dist/checkbox-group.test.interactions.js +82 -0
  33. package/dist/checkbox.d.ts +5 -4
  34. package/dist/checkbox.js +1 -1
  35. package/dist/checkbox.styles.js +35 -15
  36. package/dist/checkbox.test.basics.js +6 -15
  37. package/dist/checkbox.test.events.js +9 -0
  38. package/dist/checkbox.test.focus.js +4 -2
  39. package/dist/checkbox.test.interactions.js +11 -11
  40. package/dist/drawer.d.ts +2 -5
  41. package/dist/drawer.js +1 -1
  42. package/dist/drawer.test.accessibility.js +8 -8
  43. package/dist/drawer.test.basics.js +16 -16
  44. package/dist/drawer.test.closing.js +18 -16
  45. package/dist/drawer.test.events.js +13 -24
  46. package/dist/drawer.test.methods.js +22 -22
  47. package/dist/dropdown.d.ts +7 -5
  48. package/dist/dropdown.js +1 -1
  49. package/dist/dropdown.option.d.ts +2 -3
  50. package/dist/dropdown.option.js +1 -1
  51. package/dist/dropdown.option.styles.js +31 -19
  52. package/dist/dropdown.option.test.basics.js +4 -4
  53. package/dist/dropdown.option.test.events.js +9 -1
  54. package/dist/dropdown.option.test.interactions.single.js +2 -2
  55. package/dist/dropdown.styles.js +39 -3
  56. package/dist/dropdown.test.basics.d.ts +1 -1
  57. package/dist/dropdown.test.basics.js +27 -14
  58. package/dist/dropdown.test.basics.multiple.js +65 -32
  59. package/dist/dropdown.test.basics.single.js +49 -0
  60. package/dist/dropdown.test.events.filterable.js +13 -2
  61. package/dist/dropdown.test.focus.filterable.js +12 -3
  62. package/dist/dropdown.test.focus.js +18 -2
  63. package/dist/dropdown.test.form.multiple.js +3 -2
  64. package/dist/dropdown.test.interactions.filterable.js +141 -45
  65. package/dist/dropdown.test.interactions.js +24 -0
  66. package/dist/dropdown.test.interactions.multiple.js +87 -30
  67. package/dist/dropdown.test.interactions.single.js +40 -4
  68. package/dist/form-controls-layout.d.ts +0 -2
  69. package/dist/icon-button.d.ts +2 -4
  70. package/dist/icon-button.js +1 -1
  71. package/dist/icon-button.test.basics.js +14 -82
  72. package/dist/icon-button.test.focus.d.ts +1 -0
  73. package/dist/icon-button.test.focus.js +13 -0
  74. package/dist/input.d.ts +4 -5
  75. package/dist/input.js +1 -1
  76. package/dist/input.styles.js +4 -4
  77. package/dist/input.test.basics.js +0 -52
  78. package/dist/input.test.events.js +27 -27
  79. package/dist/input.test.focus.js +27 -26
  80. package/dist/input.test.form.js +6 -6
  81. package/dist/input.test.validity.js +130 -130
  82. package/dist/label.d.ts +1 -3
  83. package/dist/label.js +1 -1
  84. package/dist/label.styles.js +5 -6
  85. package/dist/label.test.basics.js +4 -4
  86. package/dist/library/ow.js +1 -1
  87. package/dist/menu.button.d.ts +0 -2
  88. package/dist/menu.button.test.basics.js +3 -3
  89. package/dist/menu.d.ts +1 -4
  90. package/dist/menu.js +1 -1
  91. package/dist/menu.link.d.ts +1 -2
  92. package/dist/menu.link.js +1 -1
  93. package/dist/menu.options.d.ts +0 -2
  94. package/dist/menu.test.events.js +6 -6
  95. package/dist/menu.test.focus.js +5 -18
  96. package/dist/menu.test.interactions.js +48 -24
  97. package/dist/modal.d.ts +6 -17
  98. package/dist/modal.icon-button.d.ts +0 -2
  99. package/dist/modal.icon-button.test.basics.js +3 -3
  100. package/dist/modal.js +1 -1
  101. package/dist/modal.styles.js +13 -19
  102. package/dist/modal.tertiary-icon.d.ts +0 -3
  103. package/dist/modal.tertiary-icon.test.basics.js +3 -3
  104. package/dist/modal.test.basics.js +9 -5
  105. package/dist/modal.test.close.js +2 -2
  106. package/dist/modal.test.events.js +2 -2
  107. package/dist/radio-group.d.ts +0 -3
  108. package/dist/radio-group.js +1 -1
  109. package/dist/radio-group.test.basics.js +61 -61
  110. package/dist/radio-group.test.events.js +13 -13
  111. package/dist/radio-group.test.focus.js +1 -1
  112. package/dist/radio-group.test.form.js +2 -2
  113. package/dist/radio-group.test.validity.js +12 -12
  114. package/dist/radio.d.ts +0 -3
  115. package/dist/radio.styles.js +4 -12
  116. package/dist/split-button.d.ts +8 -11
  117. package/dist/split-button.js +1 -1
  118. package/dist/split-button.primary-button.d.ts +21 -0
  119. package/dist/split-button.primary-button.js +1 -0
  120. package/dist/split-button.primary-button.styles.js +96 -0
  121. package/dist/split-button.primary-button.test.basics.d.ts +1 -0
  122. package/dist/split-button.primary-button.test.basics.js +31 -0
  123. package/dist/split-button.primary-button.test.focus.d.ts +1 -0
  124. package/dist/split-button.primary-button.test.focus.js +14 -0
  125. package/dist/split-button.primary-link.d.ts +19 -0
  126. package/dist/split-button.primary-link.js +1 -0
  127. package/dist/split-button.primary-link.test.basics.d.ts +1 -0
  128. package/dist/split-button.primary-link.test.basics.js +30 -0
  129. package/dist/split-button.primary-link.test.focus.d.ts +1 -0
  130. package/dist/split-button.primary-link.test.focus.js +15 -0
  131. package/dist/split-button.secondary-button.d.ts +25 -0
  132. package/dist/split-button.secondary-button.js +1 -0
  133. package/dist/split-button.secondary-button.styles.js +103 -0
  134. package/dist/split-button.secondary-button.test.basics.d.ts +1 -0
  135. package/dist/split-button.secondary-button.test.basics.js +58 -0
  136. package/dist/split-button.secondary-button.test.focus.d.ts +1 -0
  137. package/dist/split-button.secondary-button.test.focus.js +14 -0
  138. package/dist/split-button.secondary-button.test.interactions.d.ts +2 -0
  139. package/dist/split-button.secondary-button.test.interactions.js +30 -0
  140. package/dist/split-button.stories.d.ts +4 -3
  141. package/dist/split-button.styles.js +1 -94
  142. package/dist/split-button.test.basics.d.ts +2 -1
  143. package/dist/split-button.test.basics.js +67 -80
  144. package/dist/split-button.test.interactions.d.ts +4 -0
  145. package/dist/split-button.test.interactions.js +51 -0
  146. package/dist/styles/opacity-and-scale-animation.js +2 -6
  147. package/dist/styles/variables.css +1 -1
  148. package/dist/tab.d.ts +2 -11
  149. package/dist/tab.group.d.ts +3 -5
  150. package/dist/tab.group.js +1 -1
  151. package/dist/tab.group.styles.js +18 -15
  152. package/dist/tab.group.test.basics.js +49 -34
  153. package/dist/tab.group.test.interactions.js +17 -14
  154. package/dist/tab.panel.d.ts +0 -3
  155. package/dist/tab.test.basics.js +6 -5
  156. package/dist/tag.d.ts +5 -4
  157. package/dist/tag.js +1 -1
  158. package/dist/tag.styles.js +47 -38
  159. package/dist/tag.test.basics.js +18 -110
  160. package/dist/tag.test.events.js +12 -8
  161. package/dist/tag.test.focus.js +2 -3
  162. package/dist/tag.test.interactions.d.ts +1 -0
  163. package/dist/tag.test.interactions.js +36 -0
  164. package/dist/textarea.d.ts +2 -3
  165. package/dist/textarea.js +2 -2
  166. package/dist/textarea.test.basics.js +8 -8
  167. package/dist/textarea.test.events.js +55 -55
  168. package/dist/textarea.test.form.js +9 -9
  169. package/dist/textarea.test.validity.js +167 -135
  170. package/dist/toasts.d.ts +1 -5
  171. package/dist/toasts.test.basics.js +2 -1
  172. package/dist/toasts.toast.d.ts +1 -4
  173. package/dist/toasts.toast.js +1 -1
  174. package/dist/toasts.toast.styles.js +12 -0
  175. package/dist/toggle.d.ts +0 -2
  176. package/dist/toggle.styles.js +1 -5
  177. package/dist/toggle.test.basics.js +2 -2
  178. package/dist/toggle.test.interactions.js +7 -7
  179. package/dist/tooltip.d.ts +2 -1
  180. package/dist/tooltip.js +1 -1
  181. package/dist/tooltip.styles.js +37 -13
  182. package/dist/tooltip.test.basics.d.ts +1 -1
  183. package/dist/tooltip.test.basics.js +19 -19
  184. package/dist/tree.d.ts +0 -2
  185. package/dist/tree.item.d.ts +5 -7
  186. package/dist/tree.item.icon-button.d.ts +1 -4
  187. package/dist/tree.item.js +1 -1
  188. package/dist/tree.item.menu.d.ts +1 -2
  189. package/dist/tree.item.menu.js +1 -1
  190. package/dist/tree.item.menu.test.basics.js +31 -10
  191. package/dist/tree.item.styles.js +7 -9
  192. package/dist/tree.item.test.basics.js +43 -31
  193. package/dist/tree.test.basics.js +29 -29
  194. package/dist/tree.test.focus.js +77 -74
  195. package/package.json +12 -14
  196. package/dist/split-container.d.ts +0 -31
  197. package/dist/split-container.js +0 -1
  198. package/dist/split-container.styles.js +0 -132
  199. package/dist/split-container.test.basics.d.ts +0 -3
  200. package/dist/split-container.test.basics.js +0 -445
  201. package/dist/split-container.test.interactions.d.ts +0 -1
  202. package/dist/split-container.test.interactions.js +0 -20
  203. package/dist/split-link.d.ts +0 -25
  204. package/dist/split-link.js +0 -1
  205. package/dist/split-link.test.basics.d.ts +0 -1
  206. package/dist/split-link.test.basics.js +0 -93
  207. package/dist/split-link.test.interactions.d.ts +0 -1
  208. package/dist/split-link.test.interactions.js +0 -20
  209. package/dist/status-indicator.d.ts +0 -30
  210. package/dist/status-indicator.js +0 -1
  211. package/dist/status-indicator.stories.d.ts +0 -5
  212. package/dist/status-indicator.styles.js +0 -58
  213. package/dist/status-indicator.test.basics.d.ts +0 -1
  214. package/dist/status-indicator.test.basics.js +0 -102
  215. /package/dist/{split-container.styles.d.ts → split-button.primary-button.styles.d.ts} +0 -0
  216. /package/dist/{status-indicator.styles.d.ts → split-button.secondary-button.styles.d.ts} +0 -0
@@ -1,16 +1,20 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
1
2
  import './tag.js';
2
3
  import { expect, fixture, html, oneEvent } from '@open-wc/testing';
3
4
  import GlideCoreTag from './tag.js';
5
+ import sinon from 'sinon';
4
6
  GlideCoreTag.shadowRootOptions.mode = 'open';
5
- it('dispatches a "remove" event when the icon button is clicked', async () => {
6
- const component = await fixture(html `<glide-core-tag removable-label="test-aria-label"
7
- ><span slot="prefix">Prefix</span
8
- ><span data-content>Tag</span></glide-core-tag
9
- >`);
10
- const iconButton = component.shadowRoot?.querySelector('[data-test="button"]');
7
+ it('dispatches one "remove" event', async () => {
8
+ const component = await fixture(html `<glide-core-tag label="Label" removable></glide-core-tag>`);
9
+ const spy = sinon.spy();
10
+ component.addEventListener('remove', spy);
11
11
  setTimeout(() => {
12
- iconButton?.click();
12
+ component.shadowRoot
13
+ ?.querySelector('[data-test="button"]')
14
+ ?.click();
13
15
  });
14
16
  const event = await oneEvent(component, 'remove');
15
- expect(event?.type).to.be.equal('remove');
17
+ expect(event instanceof Event).to.be.true;
18
+ expect(event.bubbles).to.be.true;
19
+ expect(spy.callCount).to.equal(1);
16
20
  });
@@ -1,10 +1,9 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
1
2
  import { expect, fixture, html } from '@open-wc/testing';
2
3
  import GlideCoreTag from './tag.js';
3
4
  GlideCoreTag.shadowRootOptions.mode = 'open';
4
5
  it('calling `focus()` focuses the button', async () => {
5
- const component = await fixture(html `<glide-core-tag removable-label="Removable Label"
6
- >Tag</glide-core-tag
7
- >`);
6
+ const component = await fixture(html `<glide-core-tag label="Label" removable></glide-core-tag>`);
8
7
  component.focus();
9
8
  const button = component.shadowRoot?.querySelector('[data-test="button"]');
10
9
  expect(component.shadowRoot?.activeElement).to.equal(button);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
2
+ import { aTimeout, expect, fixture, html } from '@open-wc/testing';
3
+ import { sendKeys } from '@web/test-runner-commands';
4
+ import GlideCoreTag from './tag.js';
5
+ GlideCoreTag.shadowRootOptions.mode = 'open';
6
+ it('removes itself on click', async () => {
7
+ const component = await fixture(html `<glide-core-tag label="Label" removable></glide-core-tag>`);
8
+ component.click();
9
+ // Wait for the animation to complete.
10
+ await aTimeout(200);
11
+ expect(document.querySelector('glide-core-tag')).to.be.null;
12
+ });
13
+ it('does not remove itself on click when disabled', async () => {
14
+ const component = await fixture(html `<glide-core-tag label="Label" disabled removable></glide-core-tag>`);
15
+ component.click();
16
+ // Wait for the animation to complete.
17
+ await aTimeout(200);
18
+ expect(document.querySelector('glide-core-tag') instanceof GlideCoreTag).to.be
19
+ .true;
20
+ });
21
+ it('removes itself on Space', async () => {
22
+ const component = await fixture(html `<glide-core-tag label="Label" removable></glide-core-tag>`);
23
+ component.focus();
24
+ await sendKeys({ press: ' ' });
25
+ // Wait for the animation to complete.
26
+ await aTimeout(200);
27
+ expect(document.querySelector('glide-core-tag')).to.be.null;
28
+ });
29
+ it('removes itself on Enter', async () => {
30
+ const component = await fixture(html `<glide-core-tag label="Label" removable></glide-core-tag>`);
31
+ component.focus();
32
+ await sendKeys({ press: 'Enter' });
33
+ // Wait for the animation to complete.
34
+ await aTimeout(200);
35
+ expect(document.querySelector('glide-core-tag')).to.be.null;
36
+ });
@@ -6,8 +6,6 @@ declare global {
6
6
  }
7
7
  }
8
8
  /**
9
- * @description A text area with a label and optional description and tooltip. Participates in forms and validation via `FormData` and various methods.
10
- *
11
9
  * @event change - `(event: Event) => void`
12
10
  * @event input - `(event: Event) => void`
13
11
  * @event invalid - `(event: Event) => void`
@@ -30,9 +28,10 @@ export default class GlideCoreTextarea extends LitElement {
30
28
  readonly: boolean;
31
29
  disabled: boolean;
32
30
  maxlength?: number;
33
- name?: string;
31
+ name: string;
34
32
  spellcheck: boolean;
35
33
  autocapitalize: 'on' | 'off' | 'none' | 'sentences' | 'words' | 'characters';
34
+ autocomplete: 'on' | 'off';
36
35
  privateSplit?: 'left' | 'middle';
37
36
  blur(): void;
38
37
  checkValidity(): boolean;
package/dist/textarea.js CHANGED
@@ -1,2 +1,2 @@
1
- var __decorate=this&&this.__decorate||function(e,t,i,a){var r,o=arguments.length,l=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,i,a);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(l=(o<3?r(l):o>3?r(t,i,l):r(t,i))||l);return o>3&&l&&Object.defineProperty(t,i,l),l};import"./label.js";import{LitElement,html,nothing}from"lit";import{LocalizeController}from"./library/localize.js";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import ow from"./library/ow.js";import styles from"./textarea.styles.js";let GlideCoreTextarea=class GlideCoreTextarea extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed",delegatesFocus:!0}}static{this.styles=styles}blur(){this.#e.value?.blur()}checkValidity(){this.isCheckingValidity=!0;const e=this.#t.checkValidity();return this.isCheckingValidity=!1,e}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",this.#i)}get form(){return this.#t.form}get validity(){return!this.required||this.value||this.disabled?this.#a?this.#t.setValidity({tooLong:!0}," ",this.#e.value):this.#t.setValidity({}):this.#t.setValidity({valueMissing:!0}," ",this.#e.value),this.#t.validity}get willValidate(){return this.#t.willValidate}formAssociatedCallback(){this.form?.addEventListener("formdata",this.#i)}formResetCallback(){this.value=this.getAttribute("value")??""}render(){return html`<glide-core-private-label split="${ifDefined(this.privateSplit??void 0)}" orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${this.#r||this.#a}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label class="label" for="textarea">${this.label}</label><div class="textarea-container" slot="control"><textarea aria-describedby="meta" aria-invalid="${this.#r||this.#a}" class="${classMap({error:this.#r||this.#a})}" id="textarea" name="${ifDefined(this.name)}" placeholder="${ifDefined(this.placeholder)}" rows="${this.rows}" autocapitalize="${ifDefined(this.autocapitalize)}" spellcheck="${this.spellcheck}" .value="${this.value}" ?required="${this.required}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" ${ref(this.#e)} @input="${this.#o}" @change="${this.#l}" @blur="${this.#s}">
2
- </textarea></div><div class="meta" id="meta" slot="description"><slot class="description" name="description"></slot>${this.maxlength?html`<div class="${classMap({"character-count":!0,error:this.#a})}" data-test="character-count-container"><span aria-hidden="true" data-test="character-count-text">${this.#d.term("displayedCharacterCount",this.#n,this.maxlength)} </span><span class="hidden" data-test="character-count-announcement">${this.#d.term("announcedCharacterCount",this.#n,this.maxlength)}</span></div>`:nothing}</div></glide-core-private-label>`}reportValidity(){this.isReportValidityOrSubmit=!0;const e=this.#t.reportValidity();return this.requestUpdate(),e}constructor(){super(),this.value="",this.label="",this.hideLabel=!1,this.orientation="horizontal",this.placeholder="",this.rows=2,this.required=!1,this.readonly=!1,this.disabled=!1,this.spellcheck=!1,this.autocapitalize="on",this.isBlurring=!1,this.isCheckingValidity=!1,this.isReportValidityOrSubmit=!1,this.#d=new LocalizeController(this),this.#e=createRef(),this.#i=({formData:e})=>{this.name&&this.value&&!this.disabled&&e.append(this.name,this.value)},this.#t=this.attachInternals(),this.addEventListener("invalid",(e=>{if(e?.preventDefault(),this.isCheckingValidity||this.isBlurring)return;this.isReportValidityOrSubmit=!0;this.form?.querySelector(":invalid")===this&&this.focus()}))}#t;#d;#e;#i;get#r(){return!this.disabled&&!this.readonly&&!this.validity.valid&&this.isReportValidityOrSubmit}get#n(){return this.value.length}get#a(){return Boolean(!this.disabled&&!this.readonly&&this.maxlength&&this.#n>this.maxlength)}#s(){this.isBlurring=!0,this.reportValidity(),this.isBlurring=!1}#l(e){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement)),this.value=this.#e.value.value,this.dispatchEvent(new Event(e.type,e))}#o(){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement)),this.value=this.#e.value.value}};__decorate([property()],GlideCoreTextarea.prototype,"value",void 0),__decorate([property()],GlideCoreTextarea.prototype,"label",void 0),__decorate([property({attribute:"hide-label",type:Boolean})],GlideCoreTextarea.prototype,"hideLabel",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"orientation",void 0),__decorate([property()],GlideCoreTextarea.prototype,"placeholder",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTextarea.prototype,"rows",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"required",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"readonly",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"disabled",void 0),__decorate([property({type:Number,converter:e=>e&&Number.parseInt(e,10)})],GlideCoreTextarea.prototype,"maxlength",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"name",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"spellcheck",void 0),__decorate([property()],GlideCoreTextarea.prototype,"autocapitalize",void 0),__decorate([property()],GlideCoreTextarea.prototype,"privateSplit",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isBlurring",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isCheckingValidity",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isReportValidityOrSubmit",void 0),GlideCoreTextarea=__decorate([customElement("glide-core-textarea")],GlideCoreTextarea);export default GlideCoreTextarea;
1
+ var __decorate=this&&this.__decorate||function(e,t,i,a){var r,o=arguments.length,l=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,i,a);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(l=(o<3?r(l):o>3?r(t,i,l):r(t,i))||l);return o>3&&l&&Object.defineProperty(t,i,l),l};import"./label.js";import{LitElement,html,nothing}from"lit";import{LocalizeController}from"./library/localize.js";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import ow from"./library/ow.js";import styles from"./textarea.styles.js";let GlideCoreTextarea=class GlideCoreTextarea extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed",delegatesFocus:!0}}static{this.styles=styles}blur(){this.#e.value?.blur()}checkValidity(){this.isCheckingValidity=!0;const e=this.#t.checkValidity();return this.isCheckingValidity=!1,e}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",this.#i)}get form(){return this.#t.form}get validity(){return!this.required||this.value||this.disabled?this.#a?this.#t.setValidity({tooLong:!0}," ",this.#e.value):this.#t.setValidity({}):this.#t.setValidity({valueMissing:!0}," ",this.#e.value),this.#t.validity}get willValidate(){return this.#t.willValidate}formAssociatedCallback(){this.form?.addEventListener("formdata",this.#i)}formResetCallback(){this.value=this.getAttribute("value")??""}render(){return html`<glide-core-private-label split="${ifDefined(this.privateSplit??void 0)}" orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${this.#r||this.#a}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label class="label" for="textarea">${this.label}</label><div class="textarea-container" slot="control"><textarea aria-describedby="meta" aria-invalid="${this.#r||this.#a}" class="${classMap({error:this.#r||this.#a})}" id="textarea" name="${ifDefined(this.name)}" placeholder="${ifDefined(this.placeholder)}" rows="${this.rows}" autocapitalize="${this.autocapitalize}" autocomplete="${this.autocomplete}" spellcheck="${this.spellcheck}" .value="${this.value}" ?required="${this.required}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" ${ref(this.#e)} @input="${this.#o}" @change="${this.#l}" @blur="${this.#s}">
2
+ </textarea></div><div class="meta" id="meta" slot="description"><slot class="description" name="description"></slot>${this.maxlength?html`<div class="${classMap({"character-count":!0,error:this.#a})}" data-test="character-count-container"><span aria-hidden="true" data-test="character-count-text">${this.#d.term("displayedCharacterCount",this.#n,this.maxlength)} </span><span class="hidden" data-test="character-count-announcement">${this.#d.term("announcedCharacterCount",this.#n,this.maxlength)}</span></div>`:nothing}</div></glide-core-private-label>`}reportValidity(){this.isReportValidityOrSubmit=!0;const e=this.#t.reportValidity();return this.requestUpdate(),e}constructor(){super(),this.value="",this.label="",this.hideLabel=!1,this.orientation="horizontal",this.placeholder="",this.rows=2,this.required=!1,this.readonly=!1,this.disabled=!1,this.name="",this.spellcheck=!1,this.autocapitalize="on",this.autocomplete="on",this.isBlurring=!1,this.isCheckingValidity=!1,this.isReportValidityOrSubmit=!1,this.#d=new LocalizeController(this),this.#e=createRef(),this.#i=({formData:e})=>{this.name&&this.value&&!this.disabled&&e.append(this.name,this.value)},this.#t=this.attachInternals(),this.addEventListener("invalid",(e=>{if(e?.preventDefault(),this.isCheckingValidity||this.isBlurring)return;this.isReportValidityOrSubmit=!0;this.form?.querySelector(":invalid")===this&&this.focus()}))}#t;#d;#e;#i;get#r(){return!this.disabled&&!this.readonly&&!this.validity.valid&&this.isReportValidityOrSubmit}get#n(){return this.value.length}get#a(){return Boolean(!this.disabled&&!this.readonly&&this.maxlength&&this.#n>this.maxlength)}#s(){this.isBlurring=!0,this.reportValidity(),this.isBlurring=!1}#l(e){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement)),this.value=this.#e.value.value,this.dispatchEvent(new Event(e.type,e))}#o(){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement)),this.value=this.#e.value.value}};__decorate([property()],GlideCoreTextarea.prototype,"value",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"label",void 0),__decorate([property({attribute:"hide-label",reflect:!0,type:Boolean})],GlideCoreTextarea.prototype,"hideLabel",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"orientation",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"placeholder",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTextarea.prototype,"rows",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTextarea.prototype,"required",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTextarea.prototype,"readonly",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTextarea.prototype,"disabled",void 0),__decorate([property({type:Number,converter:e=>e&&Number.parseInt(e,10),reflect:!0})],GlideCoreTextarea.prototype,"maxlength",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"name",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTextarea.prototype,"spellcheck",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"autocapitalize",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"autocomplete",void 0),__decorate([property()],GlideCoreTextarea.prototype,"privateSplit",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isBlurring",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isCheckingValidity",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isReportValidityOrSubmit",void 0),GlideCoreTextarea=__decorate([customElement("glide-core-textarea")],GlideCoreTextarea);export default GlideCoreTextarea;
@@ -20,9 +20,9 @@ it('renders a textarea with two rows and value when attribute `value` is set ',
20
20
  ></glide-core-textarea>`);
21
21
  const textarea = component.shadowRoot.querySelector('textarea');
22
22
  expect(component);
23
- expect(component).to.have.attribute('rows', '2');
23
+ expect(component?.getAttribute('rows')).to.equal('2');
24
24
  expect(textarea).to.exist;
25
- expect(textarea).to.have.attribute('rows', '2');
25
+ expect(textarea?.getAttribute('rows')).to.equal('2');
26
26
  });
27
27
  it('renders the `rows` attribute on the textarea when set', async () => {
28
28
  const component = await fixture(html `<glide-core-textarea
@@ -31,7 +31,7 @@ it('renders the `rows` attribute on the textarea when set', async () => {
31
31
  rows="5"
32
32
  ></glide-core-textarea>`);
33
33
  const textarea = component.shadowRoot.querySelector('textarea');
34
- expect(textarea).to.have.attribute('rows', '5');
34
+ expect(textarea?.getAttribute('rows')).to.equal('5');
35
35
  });
36
36
  it('renders a label when attribute `label` is set', async () => {
37
37
  const component = await fixture(html `<glide-core-textarea
@@ -49,7 +49,7 @@ it('renders the textarea as readonly when attribute `readonly` is set', async ()
49
49
  readonly
50
50
  ></glide-core-textarea>`);
51
51
  const textarea = component.shadowRoot.querySelector('textarea');
52
- expect(textarea).to.have.attribute('readonly');
52
+ expect(textarea?.hasAttribute('readonly')).to.be.true;
53
53
  });
54
54
  it('renders the textarea as disabled when attribute `disabled` is set', async () => {
55
55
  const component = await fixture(html `<glide-core-textarea
@@ -58,7 +58,7 @@ it('renders the textarea as disabled when attribute `disabled` is set', async ()
58
58
  disabled
59
59
  ></glide-core-textarea>`);
60
60
  const textarea = component.shadowRoot.querySelector('textarea');
61
- expect(textarea).to.have.attribute('disabled');
61
+ expect(textarea?.hasAttribute('disabled')).to.be.true;
62
62
  });
63
63
  it('renders the textarea with a placeholder when attribute `placeholder` is set', async () => {
64
64
  const component = await fixture(html `<glide-core-textarea
@@ -67,7 +67,7 @@ it('renders the textarea with a placeholder when attribute `placeholder` is set'
67
67
  placeholder="placeholder"
68
68
  ></glide-core-textarea>`);
69
69
  const textarea = component.shadowRoot.querySelector('textarea');
70
- expect(textarea).to.have.attribute('placeholder', 'placeholder');
70
+ expect(textarea?.getAttribute('placeholder')).to.equal('placeholder');
71
71
  });
72
72
  it('renders `required` on textarea when set', async () => {
73
73
  const component = await fixture(html `<glide-core-textarea
@@ -76,7 +76,7 @@ it('renders `required` on textarea when set', async () => {
76
76
  required
77
77
  ></glide-core-textarea>`);
78
78
  const textarea = component.shadowRoot.querySelector('textarea');
79
- expect(textarea).to.have.attribute('required');
79
+ expect(textarea?.hasAttribute('required')).to.be.true;
80
80
  });
81
81
  it('renders a `name` attribute on the textarea when set', async () => {
82
82
  const component = await fixture(html `<glide-core-textarea
@@ -85,7 +85,7 @@ it('renders a `name` attribute on the textarea when set', async () => {
85
85
  name="test-name"
86
86
  ></glide-core-textarea>`);
87
87
  const textarea = component.shadowRoot.querySelector('textarea');
88
- expect(textarea).to.have.attribute('name', 'test-name');
88
+ expect(textarea?.getAttribute('name')).to.equal('test-name');
89
89
  });
90
90
  it('supports a "tooltip" slot', async () => {
91
91
  const component = await fixture(html `
@@ -4,68 +4,68 @@ import * as sinon from 'sinon';
4
4
  import { aTimeout, expect, fixture, html, oneEvent } from '@open-wc/testing';
5
5
  import { sendKeys } from '@web/test-runner-commands';
6
6
  it('dispatches a `input` event when typed in', async () => {
7
- const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
7
+ const component = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
8
8
  setTimeout(async () => {
9
- textarea.focus();
9
+ component.focus();
10
10
  await sendKeys({ type: 'testing' });
11
- textarea.blur();
11
+ component.blur();
12
12
  });
13
- const event = await oneEvent(textarea, 'input');
13
+ const event = await oneEvent(component, 'input');
14
14
  expect(event instanceof Event).to.be.true;
15
15
  expect(event.bubbles).to.be.true;
16
16
  });
17
17
  it('dispatches an `change` event when typed in', async () => {
18
- const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
18
+ const component = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
19
19
  setTimeout(async () => {
20
- textarea.focus();
20
+ component.focus();
21
21
  await sendKeys({ type: 'testing' });
22
- textarea.blur();
22
+ component.blur();
23
23
  });
24
- const event = await oneEvent(textarea, 'change');
24
+ const event = await oneEvent(component, 'change');
25
25
  expect(event instanceof Event).to.be.true;
26
26
  expect(event.bubbles).to.be.true;
27
27
  });
28
28
  it('dispatches an `invalid` event on submit when required and no value', async () => {
29
29
  const form = document.createElement('form');
30
- const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
30
+ const component = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
31
31
  parentNode: form,
32
32
  });
33
33
  setTimeout(() => form.requestSubmit());
34
- const event = await oneEvent(textarea, 'invalid');
34
+ const event = await oneEvent(component, 'invalid');
35
35
  expect(event instanceof Event).to.be.true;
36
36
  });
37
37
  it('dispatches an `invalid` event after `checkValidity` is called when required and no value', async () => {
38
38
  const form = document.createElement('form');
39
- const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
39
+ const component = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
40
40
  parentNode: form,
41
41
  });
42
- setTimeout(() => textarea.checkValidity());
43
- const event = await oneEvent(textarea, 'invalid');
42
+ setTimeout(() => component.checkValidity());
43
+ const event = await oneEvent(component, 'invalid');
44
44
  expect(event instanceof Event).to.be.true;
45
45
  });
46
46
  it('dispatches an `invalid` event after `reportValidity` is called when required and no value', async () => {
47
47
  const form = document.createElement('form');
48
- const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
48
+ const component = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
49
49
  parentNode: form,
50
50
  });
51
- setTimeout(() => textarea.reportValidity());
52
- const event = await oneEvent(textarea, 'invalid');
51
+ setTimeout(() => component.reportValidity());
52
+ const event = await oneEvent(component, 'invalid');
53
53
  expect(event instanceof Event).to.be.true;
54
54
  });
55
55
  it('does not dispatch an `invalid` event after `checkValidity` is called when not required', async () => {
56
56
  const form = document.createElement('form');
57
- const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
57
+ const component = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
58
58
  parentNode: form,
59
59
  });
60
60
  const spy = sinon.spy();
61
- textarea.addEventListener('invalid', spy);
62
- textarea.checkValidity();
61
+ component.addEventListener('invalid', spy);
62
+ component.checkValidity();
63
63
  await aTimeout(0);
64
64
  expect(spy.callCount).to.equal(0);
65
65
  });
66
66
  it('does not dispatch an `invalid` event after `checkValidity` is called when required, no value, and disabled', async () => {
67
67
  const form = document.createElement('form');
68
- const textarea = await fixture(html `<glide-core-textarea
68
+ const component = await fixture(html `<glide-core-textarea
69
69
  label="label"
70
70
  required
71
71
  disabled
@@ -73,25 +73,25 @@ it('does not dispatch an `invalid` event after `checkValidity` is called when re
73
73
  parentNode: form,
74
74
  });
75
75
  const spy = sinon.spy();
76
- textarea.addEventListener('invalid', spy);
77
- textarea.checkValidity();
76
+ component.addEventListener('invalid', spy);
77
+ component.checkValidity();
78
78
  await aTimeout(0);
79
79
  expect(spy.callCount).to.equal(0);
80
80
  });
81
81
  it('does not dispatch an `invalid` event when `reportValidity` is called when not required,', async () => {
82
82
  const form = document.createElement('form');
83
- const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
83
+ const component = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
84
84
  parentNode: form,
85
85
  });
86
86
  const spy = sinon.spy();
87
- textarea.addEventListener('invalid', spy);
88
- textarea.reportValidity();
87
+ component.addEventListener('invalid', spy);
88
+ component.reportValidity();
89
89
  await aTimeout(0);
90
90
  expect(spy.callCount).to.equal(0);
91
91
  });
92
92
  it('does not dispatch an `invalid` event when `reportValidity` is called when required, no value, and disabled', async () => {
93
93
  const form = document.createElement('form');
94
- const textarea = await fixture(html `<glide-core-textarea
94
+ const component = await fixture(html `<glide-core-textarea
95
95
  label="label"
96
96
  required
97
97
  disabled
@@ -99,78 +99,78 @@ it('does not dispatch an `invalid` event when `reportValidity` is called when re
99
99
  parentNode: form,
100
100
  });
101
101
  const spy = sinon.spy();
102
- textarea.addEventListener('invalid', spy);
103
- textarea.reportValidity();
102
+ component.addEventListener('invalid', spy);
103
+ component.reportValidity();
104
104
  await aTimeout(0);
105
105
  expect(spy.callCount).to.equal(0);
106
106
  });
107
107
  it('dispatches an `invalid` event after `requestSubmit` is called when `maxlength` exceeded', async () => {
108
108
  const form = document.createElement('form');
109
- const textarea = await fixture(html `<glide-core-textarea
109
+ const component = await fixture(html `<glide-core-textarea
110
110
  label="label"
111
111
  maxlength="3"
112
112
  ></glide-core-textarea>`, {
113
113
  parentNode: form,
114
114
  });
115
115
  setTimeout(async () => {
116
- textarea.focus();
116
+ component.focus();
117
117
  await sendKeys({ type: 'testing' });
118
118
  form.requestSubmit();
119
119
  });
120
- const event = await oneEvent(textarea, 'invalid');
120
+ const event = await oneEvent(component, 'invalid');
121
121
  expect(event instanceof Event).to.be.true;
122
122
  });
123
123
  it('dispatches an `invalid` event after `checkValidity` is called when `maxlength` exceeded', async () => {
124
124
  const form = document.createElement('form');
125
- const textarea = await fixture(html `<glide-core-textarea
125
+ const component = await fixture(html `<glide-core-textarea
126
126
  label="label"
127
127
  maxlength="3"
128
128
  ></glide-core-textarea>`, {
129
129
  parentNode: form,
130
130
  });
131
131
  setTimeout(async () => {
132
- textarea.focus();
132
+ component.focus();
133
133
  await sendKeys({ type: 'testing' });
134
- textarea.checkValidity();
134
+ component.checkValidity();
135
135
  });
136
- const event = await oneEvent(textarea, 'invalid');
136
+ const event = await oneEvent(component, 'invalid');
137
137
  expect(event instanceof Event).to.be.true;
138
138
  });
139
139
  it('dispatches an `invalid` event after `reportValidity` is called when `maxlength` exceeded', async () => {
140
140
  const form = document.createElement('form');
141
- const textarea = await fixture(html `<glide-core-textarea
141
+ const component = await fixture(html `<glide-core-textarea
142
142
  label="label"
143
143
  maxlength="3"
144
144
  ></glide-core-textarea>`, {
145
145
  parentNode: form,
146
146
  });
147
147
  setTimeout(async () => {
148
- textarea.focus();
148
+ component.focus();
149
149
  await sendKeys({ type: 'testing' });
150
- textarea.reportValidity();
150
+ component.reportValidity();
151
151
  });
152
- const event = await oneEvent(textarea, 'invalid');
152
+ const event = await oneEvent(component, 'invalid');
153
153
  expect(event instanceof Event).to.be.true;
154
154
  });
155
155
  it('does not dispatch an `invalid` event after `checkValidity` is called when `maxlength` not exceeded', async () => {
156
156
  const form = document.createElement('form');
157
- const textarea = await fixture(html `<glide-core-textarea
157
+ const component = await fixture(html `<glide-core-textarea
158
158
  label="label"
159
159
  maxlength="3"
160
160
  ></glide-core-textarea>`, {
161
161
  parentNode: form,
162
162
  });
163
163
  const spy = sinon.spy();
164
- textarea.addEventListener('invalid', spy);
165
- textarea.focus();
164
+ component.addEventListener('invalid', spy);
165
+ component.focus();
166
166
  await sendKeys({ type: 'ab' });
167
- textarea.checkValidity();
167
+ component.checkValidity();
168
168
  await aTimeout(0);
169
169
  expect(spy.callCount).to.equal(0);
170
170
  });
171
171
  it('does not dispatch an `invalid` event after `checkValidity` is called when `maxlength` exceeded and disabled', async () => {
172
172
  const form = document.createElement('form');
173
- const textarea = await fixture(html `<glide-core-textarea
173
+ const component = await fixture(html `<glide-core-textarea
174
174
  label="label"
175
175
  maxlength="3"
176
176
  disabled
@@ -178,32 +178,32 @@ it('does not dispatch an `invalid` event after `checkValidity` is called when `m
178
178
  parentNode: form,
179
179
  });
180
180
  const spy = sinon.spy();
181
- textarea.addEventListener('invalid', spy);
182
- textarea.focus();
181
+ component.addEventListener('invalid', spy);
182
+ component.focus();
183
183
  await sendKeys({ type: 'test' });
184
- textarea.checkValidity();
184
+ component.checkValidity();
185
185
  await aTimeout(0);
186
186
  expect(spy.callCount).to.equal(0);
187
187
  });
188
188
  it('does not dispatch an `invalid` event when `reportValidity` is called and `maxlength` is not exceeded,', async () => {
189
189
  const form = document.createElement('form');
190
- const textarea = await fixture(html `<glide-core-textarea
190
+ const component = await fixture(html `<glide-core-textarea
191
191
  label="label"
192
192
  maxlength="3"
193
193
  ></glide-core-textarea>`, {
194
194
  parentNode: form,
195
195
  });
196
196
  const spy = sinon.spy();
197
- textarea.addEventListener('invalid', spy);
198
- textarea.focus();
197
+ component.addEventListener('invalid', spy);
198
+ component.focus();
199
199
  await sendKeys({ type: 'ab' });
200
- textarea.reportValidity();
200
+ component.reportValidity();
201
201
  await aTimeout(0);
202
202
  expect(spy.callCount).to.equal(0);
203
203
  });
204
204
  it('does not dispatch an `invalid` event when `reportValidity` is called `maxlength` exceeded and disabled,', async () => {
205
205
  const form = document.createElement('form');
206
- const textarea = await fixture(html `<glide-core-textarea
206
+ const component = await fixture(html `<glide-core-textarea
207
207
  label="label"
208
208
  maxlength="3"
209
209
  disabled
@@ -211,10 +211,10 @@ it('does not dispatch an `invalid` event when `reportValidity` is called `maxlen
211
211
  parentNode: form,
212
212
  });
213
213
  const spy = sinon.spy();
214
- textarea.addEventListener('invalid', spy);
215
- textarea.focus();
214
+ component.addEventListener('invalid', spy);
215
+ component.focus();
216
216
  await sendKeys({ type: 'test' });
217
- textarea.reportValidity();
217
+ component.reportValidity();
218
218
  await aTimeout(0);
219
219
  expect(spy.callCount).to.equal(0);
220
220
  });
@@ -4,22 +4,22 @@ import { expect, fixture, html } from '@open-wc/testing';
4
4
  import { sendKeys } from '@web/test-runner-commands';
5
5
  it('can be reset to initial value', async () => {
6
6
  const form = document.createElement('form');
7
- const textarea = await fixture(html `<glide-core-textarea
7
+ const component = await fixture(html `<glide-core-textarea
8
8
  value="testing"
9
9
  label="label"
10
10
  ></glide-core-textarea>`, { parentNode: form });
11
- textarea.focus();
11
+ component.focus();
12
12
  await sendKeys({ type: '-value' });
13
- await expect(textarea.value).to.equal('testing-value');
13
+ await expect(component.value).to.equal('testing-value');
14
14
  form.reset();
15
- expect(textarea.value).to.equal('testing');
15
+ expect(component.value).to.equal('testing');
16
16
  });
17
17
  it('can be reset if there was no initial value', async () => {
18
18
  const form = document.createElement('form');
19
- const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, { parentNode: form });
20
- textarea.value = 'value';
19
+ const component = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, { parentNode: form });
20
+ component.value = 'value';
21
21
  form.reset();
22
- expect(textarea.value).to.equal('');
22
+ expect(component.value).to.equal('');
23
23
  });
24
24
  it('has `formData` when it has a `value` and `name`', async () => {
25
25
  const form = document.createElement('form');
@@ -33,12 +33,12 @@ it('has `formData` when it has a `value` and `name`', async () => {
33
33
  });
34
34
  it('has `formData` when text is entered and has a `name`', async () => {
35
35
  const form = document.createElement('form');
36
- const textarea = await fixture(html `<glide-core-textarea
36
+ const component = await fixture(html `<glide-core-textarea
37
37
  value=""
38
38
  label="label"
39
39
  name="name"
40
40
  ></glide-core-textarea>`, { parentNode: form });
41
- textarea?.focus();
41
+ component?.focus();
42
42
  await sendKeys({ type: 'testing' });
43
43
  const formData = new FormData(form);
44
44
  expect(formData.get('name')).to.be.equal('testing');