@marko/language-server 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -293,494 +293,524 @@ import { JSDOM } from "jsdom";
293
293
  var keyboard = {
294
294
  /**
295
295
  * - Ensures every accesskey attribute value is unique
296
- * - accesskey attribute value should be unique ([url](https://dequeuniversity.com/rules/axe/4.4/accesskeys?application=axeAPI))
296
+ * - accesskey attribute value should be unique ([url](https://dequeuniversity.com/rules/axe/4.8/accesskeys?application=axeAPI))
297
297
  */
298
298
  accesskeys: "accesskeys",
299
299
  /**
300
300
  * - Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content
301
- * - Page must have means to bypass repeated blocks ([url](https://dequeuniversity.com/rules/axe/4.4/bypass?application=axeAPI))
301
+ * - Page must have means to bypass repeated blocks ([url](https://dequeuniversity.com/rules/axe/4.8/bypass?application=axeAPI))
302
302
  */
303
303
  bypass: "bypass",
304
304
  /**
305
305
  * - Ensures elements in the focus order have a role appropriate for interactive content
306
- * - Elements in the focus order should have an appropriate role ([url](https://dequeuniversity.com/rules/axe/4.4/focus-order-semantics?application=axeAPI))
306
+ * - Elements in the focus order should have an appropriate role ([url](https://dequeuniversity.com/rules/axe/4.8/focus-order-semantics?application=axeAPI))
307
307
  */
308
308
  focusOrderSemantics: "focus-order-semantics",
309
309
  /**
310
310
  * - Ensures `<frame>` and `<iframe>` elements with focusable content do not have tabindex=-1
311
- * - Frames with focusable content must not have tabindex=-1 ([url](https://dequeuniversity.com/rules/axe/4.4/frame-focusable-content?application=axeAPI))
311
+ * - Frames with focusable content must not have tabindex=-1 ([url](https://dequeuniversity.com/rules/axe/4.8/frame-focusable-content?application=axeAPI))
312
312
  */
313
313
  frameFocusableContent: "frame-focusable-content",
314
314
  /**
315
315
  * - Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies
316
- * - Interactive controls must not be nested ([url](https://dequeuniversity.com/rules/axe/4.4/nested-interactive?application=axeAPI))
316
+ * - Interactive controls must not be nested ([url](https://dequeuniversity.com/rules/axe/4.8/nested-interactive?application=axeAPI))
317
317
  */
318
318
  nestedInteractive: "nested-interactive",
319
319
  /**
320
320
  * - Ensures all page content is contained by landmarks
321
- * - All page content should be contained by landmarks ([url](https://dequeuniversity.com/rules/axe/4.4/region?application=axeAPI))
321
+ * - All page content should be contained by landmarks ([url](https://dequeuniversity.com/rules/axe/4.8/region?application=axeAPI))
322
322
  */
323
323
  region: "region",
324
324
  /**
325
325
  * - Ensure elements that have scrollable content are accessible by keyboard
326
- * - Scrollable region must have keyboard access ([url](https://dequeuniversity.com/rules/axe/4.4/scrollable-region-focusable?application=axeAPI))
326
+ * - Scrollable region must have keyboard access ([url](https://dequeuniversity.com/rules/axe/4.8/scrollable-region-focusable?application=axeAPI))
327
327
  */
328
328
  scrollableRegionFocusable: "scrollable-region-focusable",
329
329
  /**
330
330
  * - Ensure all skip links have a focusable target
331
- * - The skip-link target should exist and be focusable ([url](https://dequeuniversity.com/rules/axe/4.4/skip-link?application=axeAPI))
331
+ * - The skip-link target should exist and be focusable ([url](https://dequeuniversity.com/rules/axe/4.8/skip-link?application=axeAPI))
332
332
  */
333
333
  skipLink: "skip-link",
334
334
  /**
335
335
  * - Ensures tabindex attribute values are not greater than 0
336
- * - Elements should not have tabindex greater than zero ([url](https://dequeuniversity.com/rules/axe/4.4/tabindex?application=axeAPI))
336
+ * - Elements should not have tabindex greater than zero ([url](https://dequeuniversity.com/rules/axe/4.8/tabindex?application=axeAPI))
337
337
  */
338
338
  tabindex: "tabindex"
339
339
  };
340
340
  var textAlternatives = {
341
341
  /**
342
342
  * - Ensures `<area>` elements of image maps have alternate text
343
- * - Active `<area>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.4/area-alt?application=axeAPI))
343
+ * - Active `<area>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/area-alt?application=axeAPI))
344
344
  */
345
345
  areaAlt: "area-alt",
346
346
  /**
347
347
  * - Ensures each HTML document contains a non-empty `<title>` element
348
- * - Documents must have `<title>` element to aid in navigation ([url](https://dequeuniversity.com/rules/axe/4.4/document-title?application=axeAPI))
348
+ * - Documents must have `<title>` element to aid in navigation ([url](https://dequeuniversity.com/rules/axe/4.8/document-title?application=axeAPI))
349
349
  */
350
350
  documentTitle: "document-title",
351
351
  /**
352
352
  * - Ensures `<iframe>` and `<frame>` elements contain a unique title attribute
353
- * - Frames should have a unique title attribute ([url](https://dequeuniversity.com/rules/axe/4.4/frame-title-unique?application=axeAPI))
353
+ * - Frames must have a unique title attribute ([url](https://dequeuniversity.com/rules/axe/4.8/frame-title-unique?application=axeAPI))
354
354
  */
355
355
  frameTitleUnique: "frame-title-unique",
356
356
  /**
357
357
  * - Ensures `<iframe>` and `<frame>` elements have an accessible name
358
- * - Frames must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/frame-title?application=axeAPI))
358
+ * - Frames must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/frame-title?application=axeAPI))
359
359
  */
360
360
  frameTitle: "frame-title",
361
361
  /**
362
362
  * - Ensures `<img>` elements have alternate text or a role of none or presentation
363
- * - Images must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.4/image-alt?application=axeAPI))
363
+ * - Images must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/image-alt?application=axeAPI))
364
364
  */
365
365
  imageAlt: "image-alt",
366
366
  /**
367
367
  * - Ensure image alternative is not repeated as text
368
- * - Alternative text of images should not be repeated as text ([url](https://dequeuniversity.com/rules/axe/4.4/image-redundant-alt?application=axeAPI))
368
+ * - Alternative text of images should not be repeated as text ([url](https://dequeuniversity.com/rules/axe/4.8/image-redundant-alt?application=axeAPI))
369
369
  */
370
370
  imageRedundantAlt: "image-redundant-alt",
371
371
  /**
372
372
  * - Ensures `<input type="image">` elements have alternate text
373
- * - Image buttons must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.4/input-image-alt?application=axeAPI))
373
+ * - Image buttons must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/input-image-alt?application=axeAPI))
374
374
  */
375
375
  inputImageAlt: "input-image-alt",
376
376
  /**
377
377
  * - Ensures `<object>` elements have alternate text
378
- * - `<object>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.4/object-alt?application=axeAPI))
378
+ * - `<object>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/object-alt?application=axeAPI))
379
379
  */
380
380
  objectAlt: "object-alt",
381
381
  /**
382
- * - Ensures [role='img'] elements have alternate text
383
- * - [role='img'] elements must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.4/role-img-alt?application=axeAPI))
382
+ * - Ensures [role="img"] elements have alternate text
383
+ * - [role="img"] elements must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.8/role-img-alt?application=axeAPI))
384
384
  */
385
385
  roleImgAlt: "role-img-alt",
386
386
  /**
387
387
  * - Ensures that server-side image maps are not used
388
- * - Server-side image maps must not be used ([url](https://dequeuniversity.com/rules/axe/4.4/server-side-image-map?application=axeAPI))
388
+ * - Server-side image maps must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/server-side-image-map?application=axeAPI))
389
389
  */
390
390
  serverSideImageMap: "server-side-image-map",
391
391
  /**
392
392
  * - Ensures `<svg>` elements with an img, graphics-document or graphics-symbol role have an accessible text
393
- * - `<svg>` elements with an img role must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.4/svg-img-alt?application=axeAPI))
393
+ * - `<svg>` elements with an img role must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.8/svg-img-alt?application=axeAPI))
394
394
  */
395
395
  svgImgAlt: "svg-img-alt",
396
396
  /**
397
397
  * - Ensures `<video>` elements have captions
398
- * - `<video>` elements must have captions ([url](https://dequeuniversity.com/rules/axe/4.4/video-caption?application=axeAPI))
398
+ * - `<video>` elements must have captions ([url](https://dequeuniversity.com/rules/axe/4.8/video-caption?application=axeAPI))
399
399
  */
400
400
  videoCaption: "video-caption"
401
401
  };
402
402
  var aria = {
403
403
  /**
404
- * - Ensures ARIA attributes are allowed for an element's role
405
- * - Elements must only use allowed ARIA attributes ([url](https://dequeuniversity.com/rules/axe/4.4/aria-allowed-attr?application=axeAPI))
404
+ * - Ensures an element's role supports its ARIA attributes
405
+ * - Elements must only use supported ARIA attributes ([url](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-attr?application=axeAPI))
406
406
  */
407
407
  ariaAllowedAttr: "aria-allowed-attr",
408
408
  /**
409
409
  * - Ensures role attribute has an appropriate value for the element
410
- * - ARIA role should be appropriate for the element ([url](https://dequeuniversity.com/rules/axe/4.4/aria-allowed-role?application=axeAPI))
410
+ * - ARIA role should be appropriate for the element ([url](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-role?application=axeAPI))
411
411
  */
412
412
  ariaAllowedRole: "aria-allowed-role",
413
+ /**
414
+ * - Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent
415
+ * - aria-braille attributes must have a non-braille equivalent ([url](https://dequeuniversity.com/rules/axe/4.8/aria-braille-equivalent?application=axeAPI))
416
+ */
417
+ ariaBrailleEquivalent: "aria-braille-equivalent",
413
418
  /**
414
419
  * - Ensures every ARIA button, link and menuitem has an accessible name
415
- * - ARIA commands must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-command-name?application=axeAPI))
420
+ * - ARIA commands must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-command-name?application=axeAPI))
416
421
  */
417
422
  ariaCommandName: "aria-command-name",
423
+ /**
424
+ * - Ensures ARIA attributes are used as described in the specification of the element's role
425
+ * - ARIA attributes must be used as specified for the element's role ([url](https://dequeuniversity.com/rules/axe/4.8/aria-conditional-attr?application=axeAPI))
426
+ */
427
+ ariaConditionalAttr: "aria-conditional-attr",
428
+ /**
429
+ * - Ensures elements do not use deprecated roles
430
+ * - Deprecated ARIA roles must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/aria-deprecated-role?application=axeAPI))
431
+ */
432
+ ariaDeprecatedRole: "aria-deprecated-role",
418
433
  /**
419
434
  * - Ensures every ARIA dialog and alertdialog node has an accessible name
420
- * - ARIA dialog and alertdialog nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-dialog-name?application=axeAPI))
435
+ * - ARIA dialog and alertdialog nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-dialog-name?application=axeAPI))
421
436
  */
422
437
  ariaDialogName: "aria-dialog-name",
423
438
  /**
424
- * - Ensures aria-hidden='true' is not present on the document body.
425
- * - aria-hidden='true' must not be present on the document body ([url](https://dequeuniversity.com/rules/axe/4.4/aria-hidden-body?application=axeAPI))
439
+ * - Ensures aria-hidden="true" is not present on the document body.
440
+ * - aria-hidden="true" must not be present on the document body ([url](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-body?application=axeAPI))
426
441
  */
427
442
  ariaHiddenBody: "aria-hidden-body",
428
443
  /**
429
444
  * - Ensures every ARIA input field has an accessible name
430
- * - ARIA input fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-input-field-name?application=axeAPI))
445
+ * - ARIA input fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-input-field-name?application=axeAPI))
431
446
  */
432
447
  ariaInputFieldName: "aria-input-field-name",
433
448
  /**
434
449
  * - Ensures every ARIA meter node has an accessible name
435
- * - ARIA meter nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-meter-name?application=axeAPI))
450
+ * - ARIA meter nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-meter-name?application=axeAPI))
436
451
  */
437
452
  ariaMeterName: "aria-meter-name",
438
453
  /**
439
454
  * - Ensures every ARIA progressbar node has an accessible name
440
- * - ARIA progressbar nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-progressbar-name?application=axeAPI))
455
+ * - ARIA progressbar nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-progressbar-name?application=axeAPI))
441
456
  */
442
457
  ariaProgressbarName: "aria-progressbar-name",
458
+ /**
459
+ * - Ensures ARIA attributes are not prohibited for an element's role
460
+ * - Elements must only use permitted ARIA attributes ([url](https://dequeuniversity.com/rules/axe/4.8/aria-prohibited-attr?application=axeAPI))
461
+ */
462
+ ariaProhibitedAttr: "aria-prohibited-attr",
443
463
  /**
444
464
  * - Ensures elements with ARIA roles have all required ARIA attributes
445
- * - Required ARIA attributes must be provided ([url](https://dequeuniversity.com/rules/axe/4.4/aria-required-attr?application=axeAPI))
465
+ * - Required ARIA attributes must be provided ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-attr?application=axeAPI))
446
466
  */
447
467
  ariaRequiredAttr: "aria-required-attr",
448
468
  /**
449
469
  * - Ensures elements with an ARIA role that require child roles contain them
450
- * - Certain ARIA roles must contain particular children ([url](https://dequeuniversity.com/rules/axe/4.4/aria-required-children?application=axeAPI))
470
+ * - Certain ARIA roles must contain particular children ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-children?application=axeAPI))
451
471
  */
452
472
  ariaRequiredChildren: "aria-required-children",
453
473
  /**
454
474
  * - Ensures elements with an ARIA role that require parent roles are contained by them
455
- * - Certain ARIA roles must be contained by particular parents ([url](https://dequeuniversity.com/rules/axe/4.4/aria-required-parent?application=axeAPI))
475
+ * - Certain ARIA roles must be contained by particular parents ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-parent?application=axeAPI))
456
476
  */
457
477
  ariaRequiredParent: "aria-required-parent",
458
478
  /**
459
479
  * - Ensure aria-roledescription is only used on elements with an implicit or explicit role
460
- * - aria-roledescription must be on elements with a semantic role ([url](https://dequeuniversity.com/rules/axe/4.4/aria-roledescription?application=axeAPI))
480
+ * - aria-roledescription must be on elements with a semantic role ([url](https://dequeuniversity.com/rules/axe/4.8/aria-roledescription?application=axeAPI))
461
481
  */
462
482
  ariaRoledescription: "aria-roledescription",
463
483
  /**
464
484
  * - Ensures all elements with a role attribute use a valid value
465
- * - ARIA roles used must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.4/aria-roles?application=axeAPI))
485
+ * - ARIA roles used must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.8/aria-roles?application=axeAPI))
466
486
  */
467
487
  ariaRoles: "aria-roles",
468
488
  /**
469
- * - Ensures "role=text" is used on elements with no focusable descendants
470
- * - "role=text" should have no focusable descendants ([url](https://dequeuniversity.com/rules/axe/4.4/aria-text?application=axeAPI))
489
+ * - Ensures role="text" is used on elements with no focusable descendants
490
+ * - "role=text" should have no focusable descendants ([url](https://dequeuniversity.com/rules/axe/4.8/aria-text?application=axeAPI))
471
491
  */
472
492
  ariaText: "aria-text",
473
493
  /**
474
494
  * - Ensures every ARIA toggle field has an accessible name
475
- * - ARIA toggle fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-toggle-field-name?application=axeAPI))
495
+ * - ARIA toggle fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-toggle-field-name?application=axeAPI))
476
496
  */
477
497
  ariaToggleFieldName: "aria-toggle-field-name",
478
498
  /**
479
499
  * - Ensures every ARIA tooltip node has an accessible name
480
- * - ARIA tooltip nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-tooltip-name?application=axeAPI))
500
+ * - ARIA tooltip nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-tooltip-name?application=axeAPI))
481
501
  */
482
502
  ariaTooltipName: "aria-tooltip-name",
483
503
  /**
484
504
  * - Ensures every ARIA treeitem node has an accessible name
485
- * - ARIA treeitem nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/aria-treeitem-name?application=axeAPI))
505
+ * - ARIA treeitem nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-treeitem-name?application=axeAPI))
486
506
  */
487
507
  ariaTreeitemName: "aria-treeitem-name",
488
508
  /**
489
509
  * - Ensures all ARIA attributes have valid values
490
- * - ARIA attributes must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.4/aria-valid-attr-value?application=axeAPI))
510
+ * - ARIA attributes must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr-value?application=axeAPI))
491
511
  */
492
512
  ariaValidAttrValue: "aria-valid-attr-value",
493
513
  /**
494
514
  * - Ensures attributes that begin with aria- are valid ARIA attributes
495
- * - ARIA attributes must conform to valid names ([url](https://dequeuniversity.com/rules/axe/4.4/aria-valid-attr?application=axeAPI))
515
+ * - ARIA attributes must conform to valid names ([url](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr?application=axeAPI))
496
516
  */
497
517
  ariaValidAttr: "aria-valid-attr",
498
518
  /**
499
- * - Ensures table headers have discernible text
500
- * - Table header text must not be empty ([url](https://dequeuniversity.com/rules/axe/4.4/empty-table-header?application=axeAPI))
501
- */
502
- emptyTableHeader: "empty-table-header",
503
- /**
504
- * - Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger.
505
- * - Elements of role none or presentation should be flagged ([url](https://dequeuniversity.com/rules/axe/4.4/presentation-role-conflict?application=axeAPI))
519
+ * - Elements marked as presentational should not have global ARIA or tabindex to ensure all screen readers ignore them
520
+ * - Ensure elements marked as presentational are consistently ignored ([url](https://dequeuniversity.com/rules/axe/4.8/presentation-role-conflict?application=axeAPI))
506
521
  */
507
522
  presentationRoleConflict: "presentation-role-conflict"
508
523
  };
509
524
  var nameRoleValue = {
510
525
  /**
511
526
  * - Ensures aria-hidden elements are not focusable nor contain focusable elements
512
- * - ARIA hidden element must not be focusable or contain focusable elements ([url](https://dequeuniversity.com/rules/axe/4.4/aria-hidden-focus?application=axeAPI))
527
+ * - ARIA hidden element must not be focusable or contain focusable elements ([url](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-focus?application=axeAPI))
513
528
  */
514
529
  ariaHiddenFocus: "aria-hidden-focus",
515
530
  /**
516
531
  * - Ensures buttons have discernible text
517
- * - Buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.4/button-name?application=axeAPI))
532
+ * - Buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/button-name?application=axeAPI))
518
533
  */
519
534
  buttonName: "button-name",
520
535
  /**
521
536
  * - Ensures headings have discernible text
522
- * - Headings should not be empty ([url](https://dequeuniversity.com/rules/axe/4.4/empty-heading?application=axeAPI))
537
+ * - Headings should not be empty ([url](https://dequeuniversity.com/rules/axe/4.8/empty-heading?application=axeAPI))
523
538
  */
524
539
  emptyHeading: "empty-heading",
540
+ /**
541
+ * - Ensures table headers have discernible text
542
+ * - Table header text should not be empty ([url](https://dequeuniversity.com/rules/axe/4.8/empty-table-header?application=axeAPI))
543
+ */
544
+ emptyTableHeader: "empty-table-header",
525
545
  /**
526
546
  * - Ensures input buttons have discernible text
527
- * - Input buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.4/input-button-name?application=axeAPI))
547
+ * - Input buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/input-button-name?application=axeAPI))
528
548
  */
529
549
  inputButtonName: "input-button-name",
530
550
  /**
531
551
  * - Ensures links have discernible text
532
- * - Links must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.4/link-name?application=axeAPI))
552
+ * - Links must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/link-name?application=axeAPI))
533
553
  */
534
554
  linkName: "link-name"
535
555
  };
536
556
  var timeAndMedia = {
537
557
  /**
538
558
  * - Ensures `<audio>` elements have captions
539
- * - `<audio>` elements must have a captions track ([url](https://dequeuniversity.com/rules/axe/4.4/audio-caption?application=axeAPI))
559
+ * - `<audio>` elements must have a captions track ([url](https://dequeuniversity.com/rules/axe/4.8/audio-caption?application=axeAPI))
540
560
  */
541
561
  audioCaption: "audio-caption",
542
562
  /**
543
563
  * - Ensures `<blink>` elements are not used
544
- * - `<blink>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.4/blink?application=axeAPI))
564
+ * - `<blink>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/blink?application=axeAPI))
545
565
  */
546
566
  blink: "blink",
547
567
  /**
548
- * - Ensures `<meta http-equiv="refresh">` is not used
549
- * - Timed refresh must not exist ([url](https://dequeuniversity.com/rules/axe/4.4/meta-refresh?application=axeAPI))
568
+ * - Ensures `<meta http-equiv="refresh">` is not used for delayed refresh
569
+ * - Delayed refresh must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/meta-refresh-no-exceptions?application=axeAPI))
570
+ */
571
+ metaRefreshNoExceptions: "meta-refresh-no-exceptions",
572
+ /**
573
+ * - Ensures `<meta http-equiv="refresh">` is not used for delayed refresh
574
+ * - Delayed refresh under 20 hours must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/meta-refresh?application=axeAPI))
550
575
  */
551
576
  metaRefresh: "meta-refresh",
552
577
  /**
553
578
  * - Ensures `<video>` or `<audio>` elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio
554
- * - `<video>` or `<audio>` elements must not play automatically ([url](https://dequeuniversity.com/rules/axe/4.4/no-autoplay-audio?application=axeAPI))
579
+ * - `<video>` or `<audio>` elements must not play automatically ([url](https://dequeuniversity.com/rules/axe/4.8/no-autoplay-audio?application=axeAPI))
555
580
  */
556
581
  noAutoplayAudio: "no-autoplay-audio"
557
582
  };
558
583
  var forms = {
559
584
  /**
560
585
  * - Ensure the autocomplete attribute is correct and suitable for the form field
561
- * - autocomplete attribute must be used correctly ([url](https://dequeuniversity.com/rules/axe/4.4/autocomplete-valid?application=axeAPI))
586
+ * - autocomplete attribute must be used correctly ([url](https://dequeuniversity.com/rules/axe/4.8/autocomplete-valid?application=axeAPI))
562
587
  */
563
588
  autocompleteValid: "autocomplete-valid",
564
589
  /**
565
590
  * - Ensures form field does not have multiple label elements
566
- * - Form field must not have multiple label elements ([url](https://dequeuniversity.com/rules/axe/4.4/form-field-multiple-labels?application=axeAPI))
591
+ * - Form field must not have multiple label elements ([url](https://dequeuniversity.com/rules/axe/4.8/form-field-multiple-labels?application=axeAPI))
567
592
  */
568
593
  formFieldMultipleLabels: "form-field-multiple-labels",
569
594
  /**
570
595
  * - Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes
571
- * - Form elements should have a visible label ([url](https://dequeuniversity.com/rules/axe/4.4/label-title-only?application=axeAPI))
596
+ * - Form elements should have a visible label ([url](https://dequeuniversity.com/rules/axe/4.8/label-title-only?application=axeAPI))
572
597
  */
573
598
  labelTitleOnly: "label-title-only",
574
599
  /**
575
600
  * - Ensures every form element has a label
576
- * - Form elements must have labels ([url](https://dequeuniversity.com/rules/axe/4.4/label?application=axeAPI))
601
+ * - Form elements must have labels ([url](https://dequeuniversity.com/rules/axe/4.8/label?application=axeAPI))
577
602
  */
578
603
  label: "label",
579
604
  /**
580
605
  * - Ensures select element has an accessible name
581
- * - Select element must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/select-name?application=axeAPI))
606
+ * - Select element must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/select-name?application=axeAPI))
582
607
  */
583
608
  selectName: "select-name"
584
609
  };
585
610
  var structure = {
586
611
  /**
587
612
  * - Ensure that text spacing set through style attributes can be adjusted with custom stylesheets
588
- * - Inline text spacing must be adjustable with custom stylesheets ([url](https://dequeuniversity.com/rules/axe/4.4/avoid-inline-spacing?application=axeAPI))
613
+ * - Inline text spacing must be adjustable with custom stylesheets ([url](https://dequeuniversity.com/rules/axe/4.8/avoid-inline-spacing?application=axeAPI))
589
614
  */
590
615
  avoidInlineSpacing: "avoid-inline-spacing",
591
616
  /**
592
617
  * - Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations
593
- * - CSS Media queries must not lock display orientation ([url](https://dequeuniversity.com/rules/axe/4.4/css-orientation-lock?application=axeAPI))
618
+ * - CSS Media queries must not lock display orientation ([url](https://dequeuniversity.com/rules/axe/4.8/css-orientation-lock?application=axeAPI))
594
619
  */
595
620
  cssOrientationLock: "css-orientation-lock",
596
621
  /**
597
622
  * - Ensures `<dl>` elements are structured correctly
598
- * - `<dl>` elements must only directly contain properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements ([url](https://dequeuniversity.com/rules/axe/4.4/definition-list?application=axeAPI))
623
+ * - `<dl>` elements must only directly contain properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements ([url](https://dequeuniversity.com/rules/axe/4.8/definition-list?application=axeAPI))
599
624
  */
600
625
  definitionList: "definition-list",
601
626
  /**
602
627
  * - Ensures `<dt>` and `<dd>` elements are contained by a `<dl>`
603
- * - `<dt>` and `<dd>` elements must be contained by a `<dl>` ([url](https://dequeuniversity.com/rules/axe/4.4/dlitem?application=axeAPI))
628
+ * - `<dt>` and `<dd>` elements must be contained by a `<dl>` ([url](https://dequeuniversity.com/rules/axe/4.8/dlitem?application=axeAPI))
604
629
  */
605
630
  dlitem: "dlitem",
606
631
  /**
607
632
  * - Ensures `<iframe>` and `<frame>` elements contain the axe-core script
608
- * - Frames should be tested with axe-core ([url](https://dequeuniversity.com/rules/axe/4.4/frame-tested?application=axeAPI))
633
+ * - Frames should be tested with axe-core ([url](https://dequeuniversity.com/rules/axe/4.8/frame-tested?application=axeAPI))
609
634
  */
610
635
  frameTested: "frame-tested",
611
636
  /**
612
637
  * - Informs users about hidden content.
613
- * - Hidden content on the page should be analyzed ([url](https://dequeuniversity.com/rules/axe/4.4/hidden-content?application=axeAPI))
638
+ * - Hidden content on the page should be analyzed ([url](https://dequeuniversity.com/rules/axe/4.8/hidden-content?application=axeAPI))
614
639
  */
615
640
  hiddenContent: "hidden-content",
616
641
  /**
617
642
  * - Ensures that lists are structured correctly
618
- * - `<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements ([url](https://dequeuniversity.com/rules/axe/4.4/list?application=axeAPI))
643
+ * - `<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements ([url](https://dequeuniversity.com/rules/axe/4.8/list?application=axeAPI))
619
644
  */
620
645
  list: "list",
621
646
  /**
622
647
  * - Ensures `<li>` elements are used semantically
623
- * - `<li>` elements must be contained in a `<ul>` or `<ol>` ([url](https://dequeuniversity.com/rules/axe/4.4/listitem?application=axeAPI))
648
+ * - `<li>` elements must be contained in a `<ul>` or `<ol>` ([url](https://dequeuniversity.com/rules/axe/4.8/listitem?application=axeAPI))
624
649
  */
625
650
  listitem: "listitem"
626
651
  };
627
652
  var parsing = {
628
653
  /**
629
654
  * - Ensures every id attribute value of active elements is unique
630
- * - IDs of active elements must be unique ([url](https://dequeuniversity.com/rules/axe/4.4/duplicate-id-active?application=axeAPI))
655
+ * - IDs of active elements must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-active?application=axeAPI))
631
656
  */
632
657
  duplicateIdActive: "duplicate-id-active",
633
658
  /**
634
659
  * - Ensures every id attribute value used in ARIA and in labels is unique
635
- * - IDs used in ARIA and labels must be unique ([url](https://dequeuniversity.com/rules/axe/4.4/duplicate-id-aria?application=axeAPI))
660
+ * - IDs used in ARIA and labels must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-aria?application=axeAPI))
636
661
  */
637
662
  duplicateIdAria: "duplicate-id-aria",
638
663
  /**
639
664
  * - Ensures every id attribute value is unique
640
- * - id attribute value must be unique ([url](https://dequeuniversity.com/rules/axe/4.4/duplicate-id?application=axeAPI))
665
+ * - id attribute value must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id?application=axeAPI))
641
666
  */
642
667
  duplicateId: "duplicate-id",
643
668
  /**
644
669
  * - Ensures `<marquee>` elements are not used
645
- * - `<marquee>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.4/marquee?application=axeAPI))
670
+ * - `<marquee>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/marquee?application=axeAPI))
646
671
  */
647
672
  marquee: "marquee"
648
673
  };
649
674
  var semantics = {
650
675
  /**
651
676
  * - Ensures the order of headings is semantically correct
652
- * - Heading levels should only increase by one ([url](https://dequeuniversity.com/rules/axe/4.4/heading-order?application=axeAPI))
677
+ * - Heading levels should only increase by one ([url](https://dequeuniversity.com/rules/axe/4.8/heading-order?application=axeAPI))
653
678
  */
654
679
  headingOrder: "heading-order",
655
680
  /**
656
681
  * - Ensure that links with the same accessible name serve a similar purpose
657
- * - Links with the same name must have a similar purpose ([url](https://dequeuniversity.com/rules/axe/4.4/identical-links-same-purpose?application=axeAPI))
682
+ * - Links with the same name must have a similar purpose ([url](https://dequeuniversity.com/rules/axe/4.8/identical-links-same-purpose?application=axeAPI))
658
683
  */
659
684
  identicalLinksSamePurpose: "identical-links-same-purpose",
660
685
  /**
661
686
  * - Ensures that elements labelled through their content must have their visible text as part of their accessible name
662
- * - Elements must have their visible text as part of their accessible name ([url](https://dequeuniversity.com/rules/axe/4.4/label-content-name-mismatch?application=axeAPI))
687
+ * - Elements must have their visible text as part of their accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/label-content-name-mismatch?application=axeAPI))
663
688
  */
664
689
  labelContentNameMismatch: "label-content-name-mismatch",
665
690
  /**
666
691
  * - Ensures the banner landmark is at top level
667
- * - Banner landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-banner-is-top-level?application=axeAPI))
692
+ * - Banner landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-banner-is-top-level?application=axeAPI))
668
693
  */
669
694
  landmarkBannerIsTopLevel: "landmark-banner-is-top-level",
670
695
  /**
671
696
  * - Ensures the complementary landmark or aside is at top level
672
- * - Aside should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-complementary-is-top-level?application=axeAPI))
697
+ * - Aside should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-complementary-is-top-level?application=axeAPI))
673
698
  */
674
699
  landmarkComplementaryIsTopLevel: "landmark-complementary-is-top-level",
675
700
  /**
676
701
  * - Ensures the contentinfo landmark is at top level
677
- * - Contentinfo landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-contentinfo-is-top-level?application=axeAPI))
702
+ * - Contentinfo landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-contentinfo-is-top-level?application=axeAPI))
678
703
  */
679
704
  landmarkContentinfoIsTopLevel: "landmark-contentinfo-is-top-level",
680
705
  /**
681
706
  * - Ensures the main landmark is at top level
682
- * - Main landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-main-is-top-level?application=axeAPI))
707
+ * - Main landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-main-is-top-level?application=axeAPI))
683
708
  */
684
709
  landmarkMainIsTopLevel: "landmark-main-is-top-level",
685
710
  /**
686
711
  * - Ensures the document has at most one banner landmark
687
- * - Document should not have more than one banner landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-no-duplicate-banner?application=axeAPI))
712
+ * - Document should not have more than one banner landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-banner?application=axeAPI))
688
713
  */
689
714
  landmarkNoDuplicateBanner: "landmark-no-duplicate-banner",
690
715
  /**
691
716
  * - Ensures the document has at most one contentinfo landmark
692
- * - Document should not have more than one contentinfo landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-no-duplicate-contentinfo?application=axeAPI))
717
+ * - Document should not have more than one contentinfo landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-contentinfo?application=axeAPI))
693
718
  */
694
719
  landmarkNoDuplicateContentinfo: "landmark-no-duplicate-contentinfo",
695
720
  /**
696
721
  * - Ensures the document has at most one main landmark
697
- * - Document should not have more than one main landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-no-duplicate-main?application=axeAPI))
722
+ * - Document should not have more than one main landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-main?application=axeAPI))
698
723
  */
699
724
  landmarkNoDuplicateMain: "landmark-no-duplicate-main",
700
725
  /**
701
726
  * - Ensures the document has a main landmark
702
- * - Document should have one main landmark ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-one-main?application=axeAPI))
727
+ * - Document should have one main landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-one-main?application=axeAPI))
703
728
  */
704
729
  landmarkOneMain: "landmark-one-main",
705
730
  /**
706
731
  * - Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
707
- * - Ensures landmarks are unique ([url](https://dequeuniversity.com/rules/axe/4.4/landmark-unique?application=axeAPI))
732
+ * - Ensures landmarks are unique ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-unique?application=axeAPI))
708
733
  */
709
734
  landmarkUnique: "landmark-unique",
710
735
  /**
711
736
  * - Ensure bold, italic text and font-size is not used to style `<p>` elements as a heading
712
- * - Styled `<p>` elements must not be used as headings ([url](https://dequeuniversity.com/rules/axe/4.4/p-as-heading?application=axeAPI))
737
+ * - Styled `<p>` elements must not be used as headings ([url](https://dequeuniversity.com/rules/axe/4.8/p-as-heading?application=axeAPI))
713
738
  */
714
739
  pAsHeading: "p-as-heading",
715
740
  /**
716
741
  * - Ensure that the page, or at least one of its frames contains a level-one heading
717
- * - Page should contain a level-one heading ([url](https://dequeuniversity.com/rules/axe/4.4/page-has-heading-one?application=axeAPI))
742
+ * - Page should contain a level-one heading ([url](https://dequeuniversity.com/rules/axe/4.8/page-has-heading-one?application=axeAPI))
718
743
  */
719
744
  pageHasHeadingOne: "page-has-heading-one"
720
745
  };
721
746
  var language = {
722
747
  /**
723
748
  * - Ensures every HTML document has a lang attribute
724
- * - `<html>` element must have a lang attribute ([url](https://dequeuniversity.com/rules/axe/4.4/html-has-lang?application=axeAPI))
749
+ * - `<html>` element must have a lang attribute ([url](https://dequeuniversity.com/rules/axe/4.8/html-has-lang?application=axeAPI))
725
750
  */
726
751
  htmlHasLang: "html-has-lang",
727
752
  /**
728
753
  * - Ensures the lang attribute of the `<html>` element has a valid value
729
- * - `<html>` element must have a valid value for the lang attribute ([url](https://dequeuniversity.com/rules/axe/4.4/html-lang-valid?application=axeAPI))
754
+ * - `<html>` element must have a valid value for the lang attribute ([url](https://dequeuniversity.com/rules/axe/4.8/html-lang-valid?application=axeAPI))
730
755
  */
731
756
  htmlLangValid: "html-lang-valid",
732
757
  /**
733
758
  * - Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page
734
- * - HTML elements with lang and xml:lang must have the same base language ([url](https://dequeuniversity.com/rules/axe/4.4/html-xml-lang-mismatch?application=axeAPI))
759
+ * - HTML elements with lang and xml:lang must have the same base language ([url](https://dequeuniversity.com/rules/axe/4.8/html-xml-lang-mismatch?application=axeAPI))
735
760
  */
736
761
  htmlXmlLangMismatch: "html-xml-lang-mismatch",
737
762
  /**
738
763
  * - Ensures lang attributes have valid values
739
- * - lang attribute must have a valid value ([url](https://dequeuniversity.com/rules/axe/4.4/valid-lang?application=axeAPI))
764
+ * - lang attribute must have a valid value ([url](https://dequeuniversity.com/rules/axe/4.8/valid-lang?application=axeAPI))
740
765
  */
741
766
  validLang: "valid-lang"
742
767
  };
743
768
  var sensoryAndVisualCues = {
744
769
  /**
745
770
  * - Ensures `<meta name="viewport">` can scale a significant amount
746
- * - Users should be able to zoom and scale the text up to 500% ([url](https://dequeuniversity.com/rules/axe/4.4/meta-viewport-large?application=axeAPI))
771
+ * - Users should be able to zoom and scale the text up to 500% ([url](https://dequeuniversity.com/rules/axe/4.8/meta-viewport-large?application=axeAPI))
747
772
  */
748
773
  metaViewportLarge: "meta-viewport-large",
749
774
  /**
750
775
  * - Ensures `<meta name="viewport">` does not disable text scaling and zooming
751
- * - Zooming and scaling should not be disabled ([url](https://dequeuniversity.com/rules/axe/4.4/meta-viewport?application=axeAPI))
776
+ * - Zooming and scaling must not be disabled ([url](https://dequeuniversity.com/rules/axe/4.8/meta-viewport?application=axeAPI))
777
+ */
778
+ metaViewport: "meta-viewport",
779
+ /**
780
+ * - Ensure touch target have sufficient size and space
781
+ * - All touch targets must be 24px large, or leave sufficient space ([url](https://dequeuniversity.com/rules/axe/4.8/target-size?application=axeAPI))
752
782
  */
753
- metaViewport: "meta-viewport"
783
+ targetSize: "target-size"
754
784
  };
755
785
  var tables = {
756
786
  /**
757
787
  * - Ensures the scope attribute is used correctly on tables
758
- * - scope attribute should be used correctly ([url](https://dequeuniversity.com/rules/axe/4.4/scope-attr-valid?application=axeAPI))
788
+ * - scope attribute should be used correctly ([url](https://dequeuniversity.com/rules/axe/4.8/scope-attr-valid?application=axeAPI))
759
789
  */
760
790
  scopeAttrValid: "scope-attr-valid",
761
791
  /**
762
792
  * - Ensure the `<caption>` element does not contain the same text as the summary attribute
763
- * - tables should not have the same summary and caption ([url](https://dequeuniversity.com/rules/axe/4.4/table-duplicate-name?application=axeAPI))
793
+ * - tables should not have the same summary and caption ([url](https://dequeuniversity.com/rules/axe/4.8/table-duplicate-name?application=axeAPI))
764
794
  */
765
795
  tableDuplicateName: "table-duplicate-name",
766
796
  /**
767
797
  * - Ensure that tables with a caption use the `<caption>` element.
768
- * - Data or header cells must not be used to give caption to a data table. ([url](https://dequeuniversity.com/rules/axe/4.4/table-fake-caption?application=axeAPI))
798
+ * - Data or header cells must not be used to give caption to a data table. ([url](https://dequeuniversity.com/rules/axe/4.8/table-fake-caption?application=axeAPI))
769
799
  */
770
800
  tableFakeCaption: "table-fake-caption",
771
801
  /**
772
802
  * - Ensure that each non-empty data cell in a `<table>` larger than 3 by 3 has one or more table headers
773
- * - Non-empty `<td>` elements in larger `<table>` must have an associated table header ([url](https://dequeuniversity.com/rules/axe/4.4/td-has-header?application=axeAPI))
803
+ * - Non-empty `<td>` elements in larger `<table>` must have an associated table header ([url](https://dequeuniversity.com/rules/axe/4.8/td-has-header?application=axeAPI))
774
804
  */
775
805
  tdHasHeader: "td-has-header",
776
806
  /**
777
807
  * - Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table
778
- * - Table cells that use the headers attribute must only refer to cells in the same table ([url](https://dequeuniversity.com/rules/axe/4.4/td-headers-attr?application=axeAPI))
808
+ * - Table cells that use the headers attribute must only refer to cells in the same table ([url](https://dequeuniversity.com/rules/axe/4.8/td-headers-attr?application=axeAPI))
779
809
  */
780
810
  tdHeadersAttr: "td-headers-attr",
781
811
  /**
782
812
  * - Ensure that `<th>` elements and elements with role=columnheader/rowheader have data cells they describe
783
- * - Table headers in a data table must refer to data cells ([url](https://dequeuniversity.com/rules/axe/4.4/th-has-data-cells?application=axeAPI))
813
+ * - Table headers in a data table must refer to data cells ([url](https://dequeuniversity.com/rules/axe/4.8/th-has-data-cells?application=axeAPI))
784
814
  */
785
815
  thHasDataCells: "th-has-data-cells"
786
816
  };
@@ -794,8 +824,8 @@ var rules = {
794
824
  aria.ariaAllowedAttr,
795
825
  aria.ariaAllowedRole,
796
826
  aria.ariaHiddenBody,
797
- aria.ariaRoledescription,
798
827
  aria.ariaRoles,
828
+ aria.ariaDeprecatedRole,
799
829
  aria.presentationRoleConflict,
800
830
  forms.autocompleteValid,
801
831
  forms.formFieldMultipleLabels,
@@ -809,8 +839,6 @@ var rules = {
809
839
  nameRoleValue.ariaHiddenFocus,
810
840
  // Could not find error state
811
841
  nameRoleValue.emptyHeading,
812
- parsing.duplicateIdActive,
813
- parsing.duplicateIdAria,
814
842
  parsing.marquee,
815
843
  semantics.identicalLinksSamePurpose,
816
844
  // Could not find error state
@@ -838,6 +866,7 @@ var rules = {
838
866
  */
839
867
  requiresAttrs: [
840
868
  aria.ariaRequiredAttr,
869
+ aria.ariaProhibitedAttr,
841
870
  language.htmlHasLang,
842
871
  textAlternatives.areaAlt,
843
872
  textAlternatives.imageAlt,
@@ -855,7 +884,7 @@ var rules = {
855
884
  aria.ariaRequiredChildren,
856
885
  aria.ariaText,
857
886
  aria.ariaValidAttrValue,
858
- aria.emptyTableHeader,
887
+ nameRoleValue.emptyTableHeader,
859
888
  keyboard.frameFocusableContent,
860
889
  keyboard.skipLink,
861
890
  nameRoleValue.ariaHiddenFocus,
@@ -868,8 +897,7 @@ var rules = {
868
897
  textAlternatives.documentTitle,
869
898
  textAlternatives.frameTitleUnique,
870
899
  textAlternatives.frameTitle,
871
- textAlternatives.videoCaption,
872
- timeAndMedia.audioCaption
900
+ textAlternatives.videoCaption
873
901
  ],
874
902
  /**
875
903
  * These rules can be resolved by changing content in
@@ -915,18 +943,20 @@ var rules = {
915
943
  * These rules should not be enforced to all users of
916
944
  * the official Marko language server.
917
945
  */
918
- blacklist: [structure.frameTested, parsing.duplicateId],
946
+ blacklist: [structure.frameTested],
919
947
  /**
920
948
  * These are rules that cannot currently be validated, either
921
949
  * because of limitations with JSDom + axe-core or with the
922
950
  * current implementation of the language server.
923
951
  */
924
952
  cannotValidate: [
953
+ parsing.duplicateIdAria,
925
954
  keyboard.scrollableRegionFocusable,
926
955
  semantics.pAsHeading,
927
956
  structure.avoidInlineSpacing,
928
957
  structure.cssOrientationLock,
929
- structure.hiddenContent
958
+ structure.hiddenContent,
959
+ sensoryAndVisualCues.targetSize
930
960
  ]
931
961
  };
932
962
  var separated_rules_default = rules;
@@ -1974,8 +2004,6 @@ var format2 = async (doc, params, cancel) => {
1974
2004
  const options = {
1975
2005
  parser: "marko",
1976
2006
  filepath,
1977
- markoCompiler: Project3.getCompiler(dir),
1978
- markoCompilerConfig: Project3.getConfig(dir),
1979
2007
  plugins: [markoPrettier],
1980
2008
  tabWidth: params.options.tabSize,
1981
2009
  useTabs: params.options.insertSpaces === false,
@@ -1985,6 +2013,7 @@ var format2 = async (doc, params, cancel) => {
1985
2013
  };
1986
2014
  if (cancel.isCancellationRequested)
1987
2015
  return;
2016
+ markoPrettier.setCompiler(Project3.getCompiler(dir), Project3.getConfig(dir));
1988
2017
  const ret = [
1989
2018
  TextEdit6.replace(
1990
2019
  {
@@ -2034,7 +2063,7 @@ import {
2034
2063
  // src/ts-plugin/host.ts
2035
2064
  import path6 from "path";
2036
2065
  import * as defaultCompiler from "@marko/compiler";
2037
- import * as defaultConfig from "@marko/compiler/config";
2066
+ import defaultConfig from "@marko/compiler/config";
2038
2067
  import * as defaultTranslator from "@marko/translator-default";
2039
2068
  import {
2040
2069
  Processors,
@@ -2863,24 +2892,31 @@ function docLocationAtTextSpan(doc, { start, length }) {
2863
2892
  end: doc.positionAt(start + length)
2864
2893
  };
2865
2894
  }
2895
+ function getTSConfigFile(fileName) {
2896
+ let configFile;
2897
+ const docFsDir = path7.dirname(fileName);
2898
+ const cache = Project5.getCache(docFsDir);
2899
+ let configFileCache = cache.get(getTSConfigFile);
2900
+ if (configFileCache) {
2901
+ configFile = configFileCache.get(docFsDir);
2902
+ } else {
2903
+ configFileCache = /* @__PURE__ */ new Map();
2904
+ cache.set(getTSConfigFile, configFileCache);
2905
+ }
2906
+ if (!configFile) {
2907
+ configFile = ts.findConfigFile(fileName, ts.sys.fileExists, "tsconfig.json") || ts.findConfigFile(fileName, ts.sys.fileExists, "jsconfig.json");
2908
+ }
2909
+ configFileCache.set(docFsDir, configFile);
2910
+ return configFile;
2911
+ }
2866
2912
  function getTSProject(docFsPath) {
2867
2913
  var _a;
2868
2914
  let configFile;
2869
2915
  let markoScriptLang = ScriptLang.js;
2870
2916
  if (docFsPath) {
2871
- configFile = ts.findConfigFile(
2872
- docFsPath,
2873
- ts.sys.fileExists,
2874
- "tsconfig.json"
2875
- );
2876
- if (configFile) {
2917
+ configFile = getTSConfigFile(docFsPath);
2918
+ if (configFile == null ? void 0 : configFile.endsWith("tsconfig.json")) {
2877
2919
  markoScriptLang = ScriptLang.ts;
2878
- } else {
2879
- configFile = ts.findConfigFile(
2880
- docFsPath,
2881
- ts.sys.fileExists,
2882
- "jsconfig.json"
2883
- );
2884
2920
  }
2885
2921
  }
2886
2922
  const rootDir = configFile && path7.dirname(configFile) || process.cwd();
@@ -2967,8 +3003,12 @@ function getTSProject(docFsPath) {
2967
3003
  const result = new Set(potentialGlobalFiles);
2968
3004
  for (const doc of getAllOpen()) {
2969
3005
  const { scheme, fsPath } = URI6.parse(doc.uri);
2970
- if (scheme === "file")
2971
- result.add(fsPath);
3006
+ if (scheme === "file") {
3007
+ const projectForFile = getTSProject(fsPath);
3008
+ if (projectForFile === tsProject) {
3009
+ result.add(fsPath);
3010
+ }
3011
+ }
2972
3012
  }
2973
3013
  return [...result];
2974
3014
  },