happy-dom 17.0.1 → 17.0.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 (92) hide show
  1. package/cjs/module/ECMAScriptModuleCompiler.cjs +1 -1
  2. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +17 -0
  3. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  4. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +8 -0
  5. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  6. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs +17 -0
  7. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs.map +1 -1
  8. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts +8 -0
  9. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  10. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +17 -0
  11. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  12. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts +8 -0
  13. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  14. package/cjs/nodes/html-element/HTMLElement.cjs +9 -4
  15. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  16. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  17. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +17 -0
  18. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  19. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +8 -0
  20. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  21. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +17 -0
  22. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  23. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +8 -0
  24. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  25. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +17 -0
  26. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
  27. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts +8 -0
  28. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  29. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +17 -0
  30. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
  31. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts +8 -0
  32. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  33. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +17 -0
  34. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  35. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts +8 -0
  36. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  37. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +17 -0
  38. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  39. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +8 -0
  40. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  41. package/lib/module/ECMAScriptModuleCompiler.js +1 -1
  42. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +8 -0
  43. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  44. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +17 -0
  45. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  46. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts +8 -0
  47. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  48. package/lib/nodes/html-area-element/HTMLAreaElement.js +17 -0
  49. package/lib/nodes/html-area-element/HTMLAreaElement.js.map +1 -1
  50. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +8 -0
  51. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  52. package/lib/nodes/html-button-element/HTMLButtonElement.js +17 -0
  53. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  54. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  55. package/lib/nodes/html-element/HTMLElement.js +9 -4
  56. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  57. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +8 -0
  58. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  59. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +17 -0
  60. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  61. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +8 -0
  62. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  63. package/lib/nodes/html-input-element/HTMLInputElement.js +17 -0
  64. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  65. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts +8 -0
  66. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  67. package/lib/nodes/html-media-element/HTMLMediaElement.js +17 -0
  68. package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
  69. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts +8 -0
  70. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  71. package/lib/nodes/html-object-element/HTMLObjectElement.js +17 -0
  72. package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
  73. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts +8 -0
  74. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  75. package/lib/nodes/html-select-element/HTMLSelectElement.js +17 -0
  76. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  77. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +8 -0
  78. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  79. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +17 -0
  80. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  81. package/package.json +1 -1
  82. package/src/module/ECMAScriptModuleCompiler.ts +1 -1
  83. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +19 -0
  84. package/src/nodes/html-area-element/HTMLAreaElement.ts +19 -0
  85. package/src/nodes/html-button-element/HTMLButtonElement.ts +19 -0
  86. package/src/nodes/html-element/HTMLElement.ts +9 -4
  87. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +19 -0
  88. package/src/nodes/html-input-element/HTMLInputElement.ts +19 -0
  89. package/src/nodes/html-media-element/HTMLMediaElement.ts +19 -0
  90. package/src/nodes/html-object-element/HTMLObjectElement.ts +19 -0
  91. package/src/nodes/html-select-element/HTMLSelectElement.ts +19 -0
  92. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +19 -0
@@ -375,6 +375,25 @@ export default class HTMLAnchorElement extends HTMLElement implements IHTMLHyper
375
375
  this.setAttribute('type', type);
376
376
  }
377
377
 
378
+ /**
379
+ * @override
380
+ */
381
+ public override get tabIndex(): number {
382
+ const tabIndex = this.getAttribute('tabindex');
383
+ if (tabIndex !== null) {
384
+ const parsed = Number(tabIndex);
385
+ return isNaN(parsed) ? 0 : parsed;
386
+ }
387
+ return 0;
388
+ }
389
+
390
+ /**
391
+ * @override
392
+ */
393
+ public override set tabIndex(tabIndex: number) {
394
+ super.tabIndex = tabIndex;
395
+ }
396
+
378
397
  /**
379
398
  * @override
380
399
  */
@@ -374,6 +374,25 @@ export default class HTMLAreaElement extends HTMLElement implements IHTMLHyperli
374
374
  this.#htmlHyperlinkElementUtility.setHash(hash);
375
375
  }
376
376
 
377
+ /**
378
+ * @override
379
+ */
380
+ public override get tabIndex(): number {
381
+ const tabIndex = this.getAttribute('tabindex');
382
+ if (tabIndex !== null) {
383
+ const parsed = Number(tabIndex);
384
+ return isNaN(parsed) ? 0 : parsed;
385
+ }
386
+ return 0;
387
+ }
388
+
389
+ /**
390
+ * @override
391
+ */
392
+ public override set tabIndex(tabIndex: number) {
393
+ super.tabIndex = tabIndex;
394
+ }
395
+
377
396
  /**
378
397
  * @override
379
398
  */
@@ -297,6 +297,25 @@ export default class HTMLButtonElement extends HTMLElement {
297
297
  this.setAttribute('popovertargetaction', value);
298
298
  }
299
299
 
300
+ /**
301
+ * @override
302
+ */
303
+ public override get tabIndex(): number {
304
+ const tabIndex = this.getAttribute('tabindex');
305
+ if (tabIndex !== null) {
306
+ const parsed = Number(tabIndex);
307
+ return isNaN(parsed) ? 0 : parsed;
308
+ }
309
+ return 0;
310
+ }
311
+
312
+ /**
313
+ * @override
314
+ */
315
+ public override set tabIndex(tabIndex: number) {
316
+ super.tabIndex = tabIndex;
317
+ }
318
+
300
319
  /**
301
320
  * Checks validity.
302
321
  *
@@ -188,7 +188,11 @@ export default class HTMLElement extends Element {
188
188
  */
189
189
  public get tabIndex(): number {
190
190
  const tabIndex = this.getAttribute('tabindex');
191
- return tabIndex !== null ? Number(tabIndex) : -1;
191
+ if (tabIndex !== null) {
192
+ const parsed = Number(tabIndex);
193
+ return isNaN(parsed) ? -1 : parsed;
194
+ }
195
+ return -1;
192
196
  }
193
197
 
194
198
  /**
@@ -197,10 +201,11 @@ export default class HTMLElement extends Element {
197
201
  * @param tabIndex Tab index.
198
202
  */
199
203
  public set tabIndex(tabIndex: number) {
200
- if (tabIndex === -1) {
201
- this.removeAttribute('tabindex');
204
+ const parsed = Number(tabIndex);
205
+ if (isNaN(parsed)) {
206
+ this.setAttribute('tabindex', '0');
202
207
  } else {
203
- this.setAttribute('tabindex', String(tabIndex));
208
+ this.setAttribute('tabindex', String(parsed));
204
209
  }
205
210
  }
206
211
 
@@ -227,6 +227,25 @@ export default class HTMLIFrameElement extends HTMLElement {
227
227
  return this.#contentWindowContainer.window;
228
228
  }
229
229
 
230
+ /**
231
+ * @override
232
+ */
233
+ public override get tabIndex(): number {
234
+ const tabIndex = this.getAttribute('tabindex');
235
+ if (tabIndex !== null) {
236
+ const parsed = Number(tabIndex);
237
+ return isNaN(parsed) ? 0 : parsed;
238
+ }
239
+ return 0;
240
+ }
241
+
242
+ /**
243
+ * @override
244
+ */
245
+ public override set tabIndex(tabIndex: number) {
246
+ super.tabIndex = tabIndex;
247
+ }
248
+
230
249
  /**
231
250
  * @override
232
251
  */
@@ -1158,6 +1158,25 @@ export default class HTMLInputElement extends HTMLElement {
1158
1158
  this.setAttribute('popovertargetaction', value);
1159
1159
  }
1160
1160
 
1161
+ /**
1162
+ * @override
1163
+ */
1164
+ public override get tabIndex(): number {
1165
+ const tabIndex = this.getAttribute('tabindex');
1166
+ if (tabIndex !== null) {
1167
+ const parsed = Number(tabIndex);
1168
+ return isNaN(parsed) ? 0 : parsed;
1169
+ }
1170
+ return 0;
1171
+ }
1172
+
1173
+ /**
1174
+ * @override
1175
+ */
1176
+ public override set tabIndex(tabIndex: number) {
1177
+ super.tabIndex = tabIndex;
1178
+ }
1179
+
1161
1180
  /**
1162
1181
  * Sets validation message.
1163
1182
  *
@@ -612,6 +612,25 @@ export default class HTMLMediaElement extends HTMLElement {
612
612
  return this[PropertySymbol.paused];
613
613
  }
614
614
 
615
+ /**
616
+ * @override
617
+ */
618
+ public override get tabIndex(): number {
619
+ const tabIndex = this.getAttribute('tabindex');
620
+ if (tabIndex !== null) {
621
+ const parsed = Number(tabIndex);
622
+ return isNaN(parsed) ? 0 : parsed;
623
+ }
624
+ return 0;
625
+ }
626
+
627
+ /**
628
+ * @override
629
+ */
630
+ public override set tabIndex(tabIndex: number) {
631
+ super.tabIndex = tabIndex;
632
+ }
633
+
615
634
  /**
616
635
  * Adds a new text track to the media element.
617
636
  *
@@ -175,6 +175,25 @@ export default class HTMLObjectElement extends HTMLElement {
175
175
  return false;
176
176
  }
177
177
 
178
+ /**
179
+ * @override
180
+ */
181
+ public override get tabIndex(): number {
182
+ const tabIndex = this.getAttribute('tabindex');
183
+ if (tabIndex !== null) {
184
+ const parsed = Number(tabIndex);
185
+ return isNaN(parsed) ? 0 : parsed;
186
+ }
187
+ return 0;
188
+ }
189
+
190
+ /**
191
+ * @override
192
+ */
193
+ public override set tabIndex(tabIndex: number) {
194
+ super.tabIndex = tabIndex;
195
+ }
196
+
178
197
  /**
179
198
  * Checks validity.
180
199
  *
@@ -515,6 +515,25 @@ export default class HTMLSelectElement extends HTMLElement {
515
515
  );
516
516
  }
517
517
 
518
+ /**
519
+ * @override
520
+ */
521
+ public override get tabIndex(): number {
522
+ const tabIndex = this.getAttribute('tabindex');
523
+ if (tabIndex !== null) {
524
+ const parsed = Number(tabIndex);
525
+ return isNaN(parsed) ? 0 : parsed;
526
+ }
527
+ return 0;
528
+ }
529
+
530
+ /**
531
+ * @override
532
+ */
533
+ public override set tabIndex(tabIndex: number) {
534
+ super.tabIndex = tabIndex;
535
+ }
536
+
518
537
  /**
519
538
  * Returns item from options collection by index.
520
539
  *
@@ -438,6 +438,25 @@ export default class HTMLTextAreaElement extends HTMLElement {
438
438
  return HTMLLabelElementUtility.getAssociatedLabelElements(this);
439
439
  }
440
440
 
441
+ /**
442
+ * @override
443
+ */
444
+ public override get tabIndex(): number {
445
+ const tabIndex = this.getAttribute('tabindex');
446
+ if (tabIndex !== null) {
447
+ const parsed = Number(tabIndex);
448
+ return isNaN(parsed) ? 0 : parsed;
449
+ }
450
+ return 0;
451
+ }
452
+
453
+ /**
454
+ * @override
455
+ */
456
+ public override set tabIndex(tabIndex: number) {
457
+ super.tabIndex = tabIndex;
458
+ }
459
+
441
460
  /**
442
461
  * Selects the text.
443
462
  */