abledom 0.0.5 → 0.1.1

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/esm/index.js CHANGED
@@ -62,9 +62,6 @@ var ui_default = "#abledom-report {\n bottom: 20px;\n display: flex;\n flex-d
62
62
 
63
63
  // src/ui/domBuilder.ts
64
64
  var DOMBuilder = class {
65
- // static fromString(parent: HTMLElement | DocumentFragment, html: string): void {
66
- // // const builder = new DOMBuilder(parent);
67
- // }
68
65
  constructor(parent) {
69
66
  __publicField(this, "_doc");
70
67
  __publicField(this, "_stack");
@@ -347,12 +344,20 @@ var _NotificationUI = class _NotificationUI {
347
344
  revealButton.style.display = "none";
348
345
  }
349
346
  }
350
- ).element(reveal_default).closeTag().text(notification.message).openTag("a", {
351
- class: "button close",
352
- href: "/",
353
- title: "Open help",
354
- target: "_blank"
355
- }).element(help_default).closeTag().openTag(
347
+ ).element(reveal_default).closeTag().text(notification.message).openTag(
348
+ "a",
349
+ {
350
+ class: "button close",
351
+ href: notification.help || "/",
352
+ title: "Open help",
353
+ target: "_blank"
354
+ },
355
+ (help) => {
356
+ if (!notification.help) {
357
+ help.style.display = "none";
358
+ }
359
+ }
360
+ ).element(help_default).closeTag().openTag(
356
361
  "button",
357
362
  {
358
363
  class: "button close",
@@ -1280,7 +1285,7 @@ var FocusableElementLabelRule = class extends ValidationRule {
1280
1285
  ).booleanValue;
1281
1286
  }
1282
1287
  _hasLabel(element) {
1283
- var _a, _b;
1288
+ var _a, _b, _c;
1284
1289
  const labels = element.labels;
1285
1290
  if (labels && labels.length > 0) {
1286
1291
  for (let i = 0; i < labels.length; i++) {
@@ -1295,6 +1300,9 @@ var FocusableElementLabelRule = class extends ValidationRule {
1295
1300
  return true;
1296
1301
  }
1297
1302
  }
1303
+ if ((_a = element.textContent) == null ? void 0 : _a.trim()) {
1304
+ return true;
1305
+ }
1298
1306
  const labelNodes = document.evaluate(
1299
1307
  `(
1300
1308
  .//@aria-label |
@@ -1310,7 +1318,7 @@ var FocusableElementLabelRule = class extends ValidationRule {
1310
1318
  null
1311
1319
  );
1312
1320
  for (let i = 0; i < labelNodes.snapshotLength; i++) {
1313
- const val = (_b = (_a = labelNodes.snapshotItem(i)) == null ? void 0 : _a.nodeValue) == null ? void 0 : _b.trim();
1321
+ const val = (_c = (_b = labelNodes.snapshotItem(i)) == null ? void 0 : _b.nodeValue) == null ? void 0 : _c.trim();
1314
1322
  if (val) {
1315
1323
  return true;
1316
1324
  }
@@ -1373,7 +1381,8 @@ var FocusableElementLabelRule = class extends ValidationRule {
1373
1381
  notification: isElementVisible(element) ? {
1374
1382
  id: "focusable-element-label",
1375
1383
  message: "Focusable element must have a non-empty text label.",
1376
- element
1384
+ element,
1385
+ help: "https://www.w3.org/WAI/tutorials/forms/labels/"
1377
1386
  } : void 0,
1378
1387
  dependsOnIds: new Set(labelledByValues)
1379
1388
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/base.ts","inline-file:/Users/marata/Documents/Work/abledom/src/ui/ui.css","../../src/ui/domBuilder.ts","inline-file:/Users/marata/Documents/Work/abledom/src/ui/close.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/help.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/log.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/reveal.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/hideall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/muteall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/showall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/aligntopleft.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/aligntopright.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/alignbottomright.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/alignbottomleft.svg","../../src/ui/ui.ts","../../src/utils.ts","../../src/core.ts","../../src/rules/atomic.ts","../../src/rules/label.ts","../../src/rules/existingid.ts","../../src/rules/focuslost.ts","../../src/rules/badfocus.ts","../../src/rules/find.ts","../../src/rules/notify.ts"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport enum ValidationRuleType {\n Error = 1,\n Warning,\n Info,\n}\n\nexport interface ValidationNotification {\n id: string;\n message: string;\n element?: HTMLElement;\n rel?: Node;\n link?: string;\n stack?: string[];\n relStack?: string[];\n}\n\nexport interface ValidationResult {\n notification?: ValidationNotification;\n dependsOnIds?: Set<string>;\n}\n\nexport interface BlurNotification extends ValidationNotification {\n position?: string[];\n}\n\nexport abstract class ValidationRule<\n N extends ValidationNotification = ValidationNotification,\n> {\n abstract type: ValidationRuleType;\n abstract name: string;\n private _window?: Window;\n private _exceptions: ((element: HTMLElement) => boolean)[] = [];\n private _onNotification:\n | ((rult: ValidationRule<N>, notification: N) => void)\n | undefined;\n\n static init(\n instance: ValidationRule,\n window: Window,\n onNotification: (\n rule: ValidationRule,\n notification: ValidationNotification,\n ) => void,\n ): void {\n instance._window = window;\n instance._onNotification = onNotification;\n }\n\n static dispose(instance: ValidationRule): void {\n instance.dispose();\n }\n\n static checkExceptions(\n instance: ValidationRule,\n element: HTMLElement,\n ): boolean {\n for (const exception of instance._exceptions) {\n if (exception(element)) {\n return true;\n }\n }\n\n return false;\n }\n\n private dispose(): void {\n this._window = undefined;\n this._onNotification = undefined;\n this._exceptions = [];\n }\n\n addException(checkException: (element: HTMLElement) => boolean): void {\n this._exceptions?.push(checkException);\n }\n\n removeException(checkException: (element: HTMLElement) => boolean): void {\n const index = this._exceptions.indexOf(checkException);\n\n if (index >= 0) {\n this._exceptions.splice(index, 1);\n }\n }\n\n /**\n * If true, the rule violation will be anchored to the currently present\n * in DOM element it is applied to, otherwise the error message will show\n * till it is dismissed.\n */\n abstract anchored: boolean;\n\n /**\n * Window is set when the rule is added to the AbleDOM instance.\n */\n get window(): Window | undefined {\n return this._window;\n }\n\n // Called when the parent AbleDOM instance is started.\n start?(): void;\n // Called when the parent AbleDOM instance is stopped.\n stop?(): void;\n\n // Called before validation. If returns false, the rule will not be applied to\n // the element.\n accept?(element: HTMLElement): boolean;\n\n validate?(element: HTMLElement): ValidationResult | null;\n\n notify(notification: N): void {\n this._onNotification?.(this, notification);\n }\n\n focused?(event: FocusEvent): ValidationNotification | null;\n blurred?(event: FocusEvent): BlurNotification | null;\n}\n","export default \"#abledom-report {\\n bottom: 20px;\\n display: flex;\\n flex-direction: column;\\n left: 10px;\\n max-height: 80%;\\n max-width: 60%;\\n padding: 4px 8px;\\n position: absolute;\\n z-index: 100500;\\n}\\n\\n#abledom-report :focus-visible {\\n outline: 3px solid red;\\n mix-blend-mode: difference;\\n}\\n\\n#abledom-report.abledom-align-left {\\n left: 10px;\\n right: auto;\\n}\\n\\n#abledom-report.abledom-align-right {\\n left: auto;\\n right: 10px;\\n}\\n\\n#abledom-report.abledom-align-bottom {\\n bottom: 20px;\\n top: auto;\\n}\\n\\n#abledom-report.abledom-align-top {\\n /* flex-direction: column-reverse; */\\n bottom: auto;\\n top: 10px;\\n}\\n\\n.abledom-menu-container {\\n backdrop-filter: blur(3px);\\n border-radius: 8px;\\n box-shadow: 0px 0px 4px rgba(127, 127, 127, 0.5);\\n display: inline-block;\\n margin: 2px auto 2px 0;\\n}\\n\\n#abledom-report.abledom-align-right .abledom-menu-container {\\n margin: 2px 0 2px auto;\\n}\\n\\n.abledom-menu {\\n background-color: rgba(140, 10, 121, 0.7);\\n border-radius: 8px;\\n color: white;\\n display: inline flex;\\n font-family: Arial, Helvetica, sans-serif;\\n font-size: 16px;\\n line-height: 26px;\\n padding: 4px;\\n}\\n\\n.abledom-menu .notifications-count {\\n margin: 0 8px;\\n display: inline-block;\\n}\\n\\n.abledom-menu .button {\\n all: unset;\\n color: #000;\\n cursor: pointer;\\n background: linear-gradient(\\n 180deg,\\n rgba(255, 255, 255, 1) 0%,\\n rgba(200, 200, 200, 1) 100%\\n );\\n border-radius: 6px;\\n border: 1px solid rgba(255, 255, 255, 0.4);\\n box-sizing: border-box;\\n line-height: 0px;\\n margin-right: 4px;\\n max-height: 26px;\\n padding: 2px;\\n text-decoration: none;\\n}\\n\\n.abledom-menu .align-button {\\n border-right-color: rgba(0, 0, 0, 0.4);\\n border-radius: 0;\\n margin: 0;\\n}\\n\\n.abledom-menu .align-button:active,\\n#abledom-report .pressed {\\n background: linear-gradient(\\n 180deg,\\n rgba(130, 130, 130, 1) 0%,\\n rgba(180, 180, 180, 1) 100%\\n );\\n}\\n\\n.abledom-menu .align-button-first {\\n border-top-left-radius: 6px;\\n border-bottom-left-radius: 6px;\\n margin-left: 8px;\\n}\\n.abledom-menu .align-button-last {\\n border-top-right-radius: 6px;\\n border-bottom-right-radius: 6px;\\n border-right-color: rgba(255, 255, 255, 0.4);\\n}\\n\\n.abledom-notifications-container {\\n overflow: scroll;\\n max-height: calc(100vh - 100px);\\n}\\n\\n#abledom-report.abledom-align-right .abledom-notifications-container {\\n text-align: right;\\n}\\n\\n.abledom-notification-container {\\n backdrop-filter: blur(3px);\\n border-radius: 8px;\\n box-shadow: 0px 0px 4px rgba(127, 127, 127, 0.5);\\n display: inline-flex;\\n margin: 2px 0;\\n}\\n\\n.abledom-notification {\\n background-color: rgba(164, 2, 2, 0.7);\\n border-radius: 8px;\\n color: white;\\n display: inline flex;\\n font-family: Arial, Helvetica, sans-serif;\\n font-size: 16px;\\n line-height: 26px;\\n padding: 4px;\\n}\\n.abledom-notification_warning {\\n background-color: rgba(163, 82, 1, 0.7);\\n}\\n.abledom-notification_info {\\n background-color: rgba(0, 0, 255, 0.7);\\n}\\n\\n.abledom-notification .button {\\n all: unset;\\n color: #000;\\n cursor: pointer;\\n background: linear-gradient(\\n 180deg,\\n rgba(255, 255, 255, 1) 0%,\\n rgba(200, 200, 200, 1) 100%\\n );\\n border-radius: 6px;\\n border: 1px solid rgba(255, 255, 255, 0.4);\\n box-sizing: border-box;\\n line-height: 0px;\\n margin-right: 4px;\\n max-height: 26px;\\n padding: 2px;\\n text-decoration: none;\\n}\\n\\n.abledom-notification .button:hover {\\n opacity: 0.7;\\n}\\n\\n.abledom-notification .button.close {\\n background: none;\\n border-color: transparent;\\n color: #fff;\\n margin: 0;\\n}\\n\\n.abledom-highlight {\\n background-color: yellow;\\n border: 1px solid red;\\n box-sizing: border-box;\\n display: none;\\n opacity: 0.6;\\n position: absolute;\\n z-index: 100499;\\n}\\n\";","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport class DOMBuilder {\n private _doc: Document | undefined;\n private _stack: (HTMLElement | DocumentFragment)[];\n\n // static fromString(parent: HTMLElement | DocumentFragment, html: string): void {\n // // const builder = new DOMBuilder(parent);\n\n // }\n\n constructor(parent: HTMLElement | DocumentFragment) {\n this._doc = parent.ownerDocument;\n this._stack = [parent];\n }\n\n openTag(\n tagName: string,\n attributes?: Record<string, string>,\n callback?: (element: HTMLElement) => void,\n namespace?: string,\n ): DOMBuilder {\n const parent = this._stack[0];\n const element = (\n namespace\n ? this._doc?.createElementNS(namespace, tagName)\n : this._doc?.createElement(tagName)\n ) as HTMLElement;\n\n if (parent && element) {\n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n if (key === \"class\") {\n element.className = value;\n } else if (key === \"style\") {\n element.style.cssText = value;\n } else {\n element.setAttribute(key, value);\n }\n }\n }\n\n if (callback) {\n callback(element);\n }\n\n parent.appendChild(element);\n\n this._stack.unshift(element);\n }\n\n return this;\n }\n\n closeTag(): DOMBuilder {\n if (this._stack.length <= 1) {\n throw new Error(\"Nothing to close\");\n }\n\n this._stack.shift();\n\n return this;\n }\n\n text(text: string): DOMBuilder {\n this._stack[0]?.appendChild(document.createTextNode(text));\n return this;\n }\n\n element(\n callback: (element: HTMLElement | DocumentFragment) => void,\n ): DOMBuilder {\n callback(this._stack[0]);\n return this;\n }\n}\n","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M9.09 9a3 3 0 1 1 5.83 1c-.28 1.02-1.22 1.5-2.01 2.1-.76.58-1 1.1-1 2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"17\",\"r\":\"0.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"polyline\", {\"points\":\"4 7 9 12 4 17\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"11\",\"y1\":\"19\",\"x2\":\"20\",\"y2\":\"19\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"6\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"22\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"6\",\"y2\":\"12\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"18\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"1.67\",\"y1\":\"1.67\",\"x2\":\"18.33\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"1.67\",\"y1\":\"1.67\",\"x2\":\"18.33\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"18.33\",\"y1\":\"1.67\",\"x2\":\"1.67\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"3\",\"y\":\"3\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"11\",\"y\":\"3\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"11\",\"y\":\"11\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"3\",\"y\":\"11\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ValidationNotification,\n ValidationRule,\n ValidationRuleType,\n} from \"../rules/base\";\n\n// The imports below will become functions that use DOMBuilder to build SVG\n// unrolled by both Vite (in `npm run dev`) and TSUP (in `npm run build`).\n// @ts-expect-error parsed assets\nimport css from \"./ui.css?raw\";\n// @ts-expect-error parsed assets\nimport svgClose from \"./close.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgHelp from \"./help.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgLog from \"./log.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgReveal from \"./reveal.svg?raw\";\n\n// @ts-expect-error parsed assets\nimport svgHideAll from \"./hideall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgMuteAll from \"./muteall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgShowAll from \"./showall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignTopLeft from \"./aligntopleft.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignTopRight from \"./aligntopright.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignBottomRight from \"./alignbottomright.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignBottomLeft from \"./alignbottomleft.svg?raw\";\n\nimport { DOMBuilder } from \"./domBuilder\";\n\nenum UIAlignments {\n BottomLeft = \"bottom-left\",\n BottomRight = \"bottom-right\",\n TopLeft = \"top-left\",\n TopRight = \"top-right\",\n}\n\nconst pressedClass = \"pressed\";\n\ninterface WindowWithAbleDOMDevtools extends Window {\n __ableDOMDevtools?: {\n revealElement?: (element: HTMLElement) => Promise<boolean>;\n };\n}\n\nexport interface HTMLElementWithAbleDOMUIFlag extends HTMLElement {\n // A flag to quickly test that the element should be ignored by the validator.\n __abledomui?: boolean;\n}\n\nexport class NotificationUI {\n private static _notificationsUI: NotificationsUI | undefined;\n\n static setOnToggle(\n instance: NotificationUI,\n onToggle: (notificationUI: NotificationUI, show: boolean) => void,\n ) {\n instance._onToggle = onToggle;\n }\n\n private static _highlight: ElementHighlighter;\n\n private _win: Window;\n private _wrapper: HTMLElementWithAbleDOMUIFlag;\n private _rule: ValidationRule;\n private _onToggle:\n | ((notificationUI: NotificationUI, show: boolean) => void)\n | undefined;\n\n static getElement(instance: NotificationUI): HTMLElement {\n return instance._wrapper;\n }\n\n isHidden = false;\n\n constructor(win: Window, rule: ValidationRule) {\n this._win = win;\n this._rule = rule;\n\n if (!NotificationUI._notificationsUI) {\n NotificationUI._notificationsUI = new NotificationsUI(this._win);\n }\n\n this._wrapper = win.document.createElement(\n \"div\",\n ) as HTMLElementWithAbleDOMUIFlag;\n\n if (!NotificationUI._highlight) {\n NotificationUI._highlight = new ElementHighlighter(win);\n }\n\n NotificationUI._notificationsUI.addNotification(this);\n }\n\n update(notification: ValidationNotification): void {\n const win = this._win;\n const rule = this._rule;\n const wrapper = this._wrapper;\n const element = notification.element;\n\n wrapper.__abledomui = true;\n wrapper.textContent = \"\";\n\n new DOMBuilder(wrapper)\n .openTag(\n \"div\",\n { class: \"abledom-notification-container\" },\n (container) => {\n container.onmouseover = () => {\n element && NotificationUI._highlight?.highlight(element);\n };\n\n container.onmouseout = () => {\n NotificationUI._highlight?.hide();\n };\n },\n )\n .openTag(\"div\", {\n class: `abledom-notification${\n rule.type === ValidationRuleType.Warning\n ? \" abledom-notification_warning\"\n : rule.type === ValidationRuleType.Info\n ? \" abledom-notification_info\"\n : \"\"\n }`,\n })\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Log to Console\",\n },\n (logButton) => {\n logButton.onclick = () => {\n console.error(\n \"AbleDOM: \",\n \"\\nmessage:\",\n notification.message,\n \"\\nelement:\",\n element,\n ...(notification.rel ? [\"\\nrelative:\", notification.rel] : []),\n \"\\nnotification:\",\n notification,\n );\n };\n },\n )\n .element(svgLog)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Reveal in Elements panel\",\n },\n (revealButton: HTMLElement) => {\n const hasDevTools =\n !!(win as WindowWithAbleDOMDevtools).__ableDOMDevtools\n ?.revealElement && false; // Temtorarily disabling the devtools plugin integration.\n if (hasDevTools && element && win.document.body.contains(element)) {\n revealButton.onclick = () => {\n const revealElement = (win as WindowWithAbleDOMDevtools)\n .__ableDOMDevtools?.revealElement;\n if (revealElement && win.document.body.contains(element)) {\n revealElement(element).then((revealed: boolean) => {\n if (!revealed) {\n // TODO\n }\n });\n }\n };\n } else {\n revealButton.style.display = \"none\";\n }\n },\n )\n .element(svgReveal)\n .closeTag()\n .text(notification.message)\n .openTag(\"a\", {\n class: \"button close\",\n href: \"/\",\n title: \"Open help\",\n target: \"_blank\",\n })\n .element(svgHelp)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button close\",\n title: \"Hide\",\n },\n (closeButton) => {\n closeButton.onclick = () => {\n this.toggle(false);\n NotificationUI._highlight?.hide();\n };\n },\n )\n .element(svgClose)\n .closeTag()\n .closeTag()\n .closeTag();\n }\n\n toggle(show: boolean, initial = false) {\n this.isHidden = !show;\n\n if (!initial) {\n this._onToggle?.(this, show);\n\n if (!this._rule.anchored && !show) {\n this.dispose();\n }\n }\n\n this._wrapper.style.display = show ? \"block\" : \"none\";\n }\n\n dispose() {\n this._wrapper.remove();\n NotificationUI._notificationsUI?.removeNotification(this);\n }\n}\n\nexport class NotificationsUI {\n private _container: HTMLElement;\n private _notificationsContainer: HTMLElement;\n private _menuElement: HTMLElement;\n private _notificationCountElement: HTMLSpanElement | undefined;\n private _showAllButton: HTMLElement | undefined;\n private _hideAllButton: HTMLElement | undefined;\n private _alignBottomLeftButton: HTMLElement | undefined;\n private _alignTopLeftButton: HTMLElement | undefined;\n private _alignTopRightButton: HTMLElement | undefined;\n private _alignBottomRightButton: HTMLElement | undefined;\n\n private _isMuted = false;\n private _notifications: Set<NotificationUI> = new Set();\n\n constructor(win: Window) {\n const container = (this._container =\n win.document.createElement(\"div\")) as HTMLElementWithAbleDOMUIFlag;\n container.__abledomui = true;\n container.id = \"abledom-report\";\n\n const style = document.createElement(\"style\");\n style.type = \"text/css\";\n style.appendChild(document.createTextNode(css));\n container.appendChild(style);\n\n const notificationsContainer = (this._notificationsContainer =\n win.document.createElement(\"div\")) as HTMLDivElement;\n notificationsContainer.className = \"abledom-notifications-container\";\n container.appendChild(notificationsContainer);\n\n const menuElement = (this._menuElement =\n win.document.createElement(\"div\")) as HTMLDivElement;\n\n menuElement.className = \"abledom-menu-container\";\n container.appendChild(menuElement);\n\n new DOMBuilder(menuElement)\n .openTag(\"div\", { class: \"abledom-menu\" })\n .openTag(\n \"span\",\n {\n class: \"notifications-count\",\n title: \"Number of notifications\",\n },\n (notificationCountElement) => {\n this._notificationCountElement = notificationCountElement;\n },\n )\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Show all notifications\",\n },\n (showAllButton) => {\n this._showAllButton = showAllButton;\n\n showAllButton.onclick = () => {\n this.showAll();\n };\n },\n )\n .element(svgShowAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Hide all notifications\",\n },\n (hideAllButton) => {\n this._hideAllButton = hideAllButton;\n\n hideAllButton.onclick = () => {\n this.hideAll();\n };\n },\n )\n .element(svgHideAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Mute newly appearing notifications\",\n },\n (muteButton) => {\n muteButton.onclick = () => {\n const isMuted = (this._isMuted =\n muteButton.classList.toggle(pressedClass));\n\n if (isMuted) {\n muteButton.setAttribute(\n \"title\",\n \"Unmute newly appearing notifications\",\n );\n } else {\n muteButton.setAttribute(\n \"title\",\n \"Mute newly appearing notifications\",\n );\n }\n };\n },\n )\n .element(svgMuteAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button align-button-first pressed\",\n title: \"Attach notifications to bottom left\",\n },\n (alignBottomLeftButton) => {\n this._alignBottomLeftButton = alignBottomLeftButton;\n\n alignBottomLeftButton.onclick = () => {\n this.setUIAlignment(UIAlignments.BottomLeft);\n };\n },\n )\n .element(svgAlignBottomLeft)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button\",\n title: \"Attach notifications to top left\",\n },\n (alignTopLeftButton) => {\n this._alignTopLeftButton = alignTopLeftButton;\n\n alignTopLeftButton.onclick = () => {\n this.setUIAlignment(UIAlignments.TopLeft);\n };\n },\n )\n .element(svgAlignTopLeft)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button\",\n title: \"Attach notifications to top right\",\n },\n (alignTopRightButton) => {\n this._alignTopRightButton = alignTopRightButton;\n\n alignTopRightButton.onclick = () => {\n this.setUIAlignment(UIAlignments.TopRight);\n };\n },\n )\n .element(svgAlignTopRight)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button align-button-last\",\n title: \"Attach notifications to bottom right\",\n },\n (alignBottomRightButton) => {\n this._alignBottomRightButton = alignBottomRightButton;\n\n alignBottomRightButton.onclick = () => {\n this.setUIAlignment(UIAlignments.BottomRight);\n };\n },\n )\n .element(svgAlignBottomRight)\n .closeTag()\n .closeTag();\n\n win.document.body.appendChild(container);\n }\n\n private setUIAlignment(alignment: UIAlignments) {\n this._alignBottomLeftButton?.classList.remove(pressedClass);\n this._alignBottomRightButton?.classList.remove(pressedClass);\n this._alignTopLeftButton?.classList.remove(pressedClass);\n this._alignTopRightButton?.classList.remove(pressedClass);\n\n this._container.classList.remove(\n \"abledom-align-left\",\n \"abledom-align-right\",\n \"abledom-align-top\",\n \"abledom-align-bottom\",\n );\n let containerClasses: string[] = [];\n let notificationsFirst = false;\n\n switch (alignment) {\n case UIAlignments.BottomLeft:\n containerClasses = [\"abledom-align-left\", \"abledom-align-bottom\"];\n notificationsFirst = true;\n this._alignBottomLeftButton?.classList.add(pressedClass);\n break;\n case UIAlignments.BottomRight:\n containerClasses = [\"abledom-align-right\", \"abledom-align-bottom\"];\n notificationsFirst = true;\n this._alignBottomRightButton?.classList.add(pressedClass);\n break;\n case UIAlignments.TopLeft:\n containerClasses = [\"abledom-align-left\", \"abledom-align-top\"];\n this._alignTopLeftButton?.classList.add(pressedClass);\n break;\n case UIAlignments.TopRight:\n containerClasses = [\"abledom-align-right\", \"abledom-align-top\"];\n this._alignTopRightButton?.classList.add(pressedClass);\n break;\n }\n\n this._container.classList.add(...containerClasses);\n this._container.insertBefore(\n this._notificationsContainer,\n notificationsFirst ? this._menuElement : null,\n );\n }\n\n private _setNotificationsCount(count: number) {\n const countElement = this._notificationCountElement;\n\n if (countElement && count > 0) {\n countElement.textContent = \"\";\n new DOMBuilder(countElement)\n .openTag(\"strong\")\n .text(`${count}`)\n .closeTag()\n .text(` notification${count > 1 ? \"s\" : \"\"}`);\n\n this._menuElement.style.display = \"block\";\n } else {\n this._menuElement.style.display = \"none\";\n }\n }\n\n private _setShowHideButtonsVisibility() {\n const showAllButton = this._showAllButton;\n const hideAllButton = this._hideAllButton;\n\n if (!showAllButton || !hideAllButton) {\n return;\n }\n\n let allHidden = true;\n let allVisible = true;\n\n for (let notification of this._notifications) {\n if (notification.isHidden) {\n allVisible = false;\n } else {\n allHidden = false;\n }\n\n if (!allHidden && !allVisible) {\n break;\n }\n }\n\n hideAllButton.style.display = allHidden ? \"none\" : \"block\";\n showAllButton.style.display = allVisible ? \"none\" : \"block\";\n }\n\n addNotification(notification: NotificationUI) {\n if (this._notifications.has(notification)) {\n return;\n }\n\n if (this._isMuted) {\n notification.toggle(false, true);\n }\n\n this._notifications.add(notification);\n this._notificationsContainer.appendChild(\n NotificationUI.getElement(notification),\n );\n\n NotificationUI.setOnToggle(notification, () => {\n this._setShowHideButtonsVisibility();\n });\n\n this._setNotificationsCount(this._notifications.size);\n this._setShowHideButtonsVisibility();\n }\n\n removeNotification(notification: NotificationUI) {\n if (!this._notifications.has(notification)) {\n return;\n }\n\n this._notifications.delete(notification);\n\n this._setNotificationsCount(this._notifications.size);\n this._setShowHideButtonsVisibility();\n }\n\n hideAll() {\n this._notifications.forEach((notification) => {\n notification.toggle(false);\n });\n this._setShowHideButtonsVisibility();\n }\n\n showAll() {\n this._notifications.forEach((notification) => {\n notification.toggle(true);\n });\n this._setShowHideButtonsVisibility();\n }\n}\n\nclass ElementHighlighter {\n private _window: Window;\n private _container: HTMLElement;\n\n constructor(win: Window) {\n this._window = win;\n\n const container = (this._container =\n win.document.createElement(\"div\")) as HTMLElementWithAbleDOMUIFlag;\n container.__abledomui = true;\n container.className = \"abledom-highlight\";\n }\n\n highlight(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n if (rect.width === 0 || rect.height === 0) {\n return;\n }\n\n const win = this._window;\n const container = this._container;\n const style = container.style;\n\n if (container.parentElement !== win.document.body) {\n win.document.body.appendChild(container);\n }\n\n style.width = `${rect.width}px`;\n style.height = `${rect.height}px`;\n style.top = `${rect.top}px`;\n style.left = `${rect.left}px`;\n\n container.style.display = \"block\";\n }\n\n hide() {\n this._container.style.display = \"none\";\n }\n}\n\nexport function isAbleDOMUIElement(element: HTMLElement): boolean {\n for (let el: HTMLElement | null = element; el; el = el.parentElement) {\n if ((el as HTMLElementWithAbleDOMUIFlag).__abledomui) {\n return true;\n }\n }\n\n return false;\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\ninterface ErrorWithStack extends ErrorConstructor {\n stackTraceLimit: number;\n}\n\nexport const focusableElementSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"*[tabindex]\",\n \"*[contenteditable]\",\n \"details > summary\",\n \"audio[controls]\",\n \"video[controls]\",\n].join(\", \");\n\nexport interface HTMLElementAttributes {\n readonly [name: string]: string;\n}\n\nexport const AccessibilityAffectingElements = {\n a: true,\n area: true,\n article: true,\n aside: true,\n body: true,\n button: true,\n datalist: true,\n details: true,\n dialog: true,\n dl: true,\n form: true,\n h1: true,\n h2: true,\n h3: true,\n h4: true,\n h5: true,\n h6: true,\n hr: true,\n iframe: true,\n img: true,\n input: true,\n li: true,\n link: true,\n main: true,\n menu: true,\n menuitem: true,\n meter: true,\n nav: true,\n object: true,\n ol: true,\n option: true,\n progress: true,\n section: true,\n select: true,\n tbody: true,\n textarea: true,\n tfoot: true,\n th: true,\n thead: true,\n ul: true,\n};\n\nexport const AccessibilityAttributes = {\n role: true,\n tabindex: true,\n disabled: true,\n required: true,\n readonly: true,\n hidden: true,\n \"aria-activedescendant\": true,\n \"aria-atomic\": true,\n \"aria-autocomplete\": true,\n \"aria-busy\": true,\n \"aria-checked\": true,\n \"aria-colcount\": true,\n \"aria-colindex\": true,\n \"aria-colspan\": true,\n \"aria-controls\": true,\n \"aria-current\": true,\n \"aria-describedby\": true,\n \"aria-details\": true,\n \"aria-disabled\": true,\n \"aria-dropeffect\": true,\n \"aria-errormessage\": true,\n \"aria-expanded\": true,\n \"aria-flowto\": true,\n \"aria-grabbed\": true,\n \"aria-haspopup\": true,\n \"aria-hidden\": true,\n \"aria-invalid\": true,\n \"aria-keyshortcuts\": true,\n \"aria-label\": true,\n \"aria-labelledby\": true,\n \"aria-level\": true,\n \"aria-live\": true,\n \"aria-modal\": true,\n \"aria-multiline\": true,\n \"aria-multiselectable\": true,\n \"aria-orientation\": true,\n \"aria-owns\": true,\n \"aria-placeholder\": true,\n \"aria-posinset\": true,\n \"aria-pressed\": true,\n \"aria-readonly\": true,\n \"aria-relevant\": true,\n \"aria-required\": true,\n \"aria-roledescription\": true,\n \"aria-rowcount\": true,\n \"aria-rowindex\": true,\n \"aria-rowspan\": true,\n \"aria-selected\": true,\n \"aria-setsize\": true,\n \"aria-sort\": true,\n \"aria-valuemax\": true,\n \"aria-valuemin\": true,\n \"aria-valuenow\": true,\n \"aria-valuetext\": true,\n};\n\nexport function isAccessibilityAffectingElement(element: HTMLElement): boolean {\n const tagName = element.tagName.toLowerCase();\n const attributes = getAttributes(element);\n\n return (\n tagName in AccessibilityAffectingElements ||\n hasAccessibilityAttribute(attributes)\n );\n}\n\nexport function hasAccessibilityAttribute(\n attributes: HTMLElementAttributes,\n): boolean {\n for (let attrName of Object.keys(attributes)) {\n if (\n attrName in AccessibilityAttributes &&\n !(\n attrName === \"role\" &&\n (attributes[attrName] === \"none\" ||\n attributes[attrName] === \"presentation\")\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getAttributes(element: HTMLElement): HTMLElementAttributes {\n const names = element.getAttributeNames();\n const attributes: { [name: string]: string } = {};\n\n for (let name of names) {\n attributes[name] = element.getAttribute(name) || \"\";\n }\n\n return attributes;\n}\n\nexport function matchesSelector(\n element: HTMLElement,\n selector: string,\n): boolean {\n interface HTMLElementWithMatches extends HTMLElement {\n matchesSelector?: typeof HTMLElement.prototype.matches;\n msMatchesSelector?: typeof HTMLElement.prototype.matches;\n }\n\n const matches =\n element.matches ||\n (element as HTMLElementWithMatches).matchesSelector ||\n (element as HTMLElementWithMatches).msMatchesSelector ||\n element.webkitMatchesSelector;\n\n return matches && matches.call(element, selector);\n}\n\nexport function isDisplayNone(element: HTMLElement): boolean {\n const elementDocument = element.ownerDocument;\n const computedStyle = elementDocument.defaultView?.getComputedStyle(element);\n\n // offsetParent is null for elements with display:none, display:fixed and for <body>.\n if (\n element.offsetParent === null &&\n elementDocument.body !== element &&\n computedStyle?.position !== \"fixed\"\n ) {\n return true;\n }\n\n // For our purposes of looking for focusable elements, visibility:hidden has the same\n // effect as display:none.\n if (computedStyle?.visibility === \"hidden\") {\n return true;\n }\n\n // if an element has display: fixed, we need to check if it is also hidden with CSS,\n // or within a parent hidden with CSS\n if (computedStyle?.position === \"fixed\") {\n if (computedStyle.display === \"none\") {\n return true;\n }\n\n if (\n element.parentElement?.offsetParent === null &&\n elementDocument.body !== element.parentElement\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isElementVisible(element: HTMLElement): boolean {\n if (!element.ownerDocument || element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n if (isDisplayNone(element)) {\n return false;\n }\n\n const rect = element.ownerDocument.body.getBoundingClientRect();\n\n if (rect.width === 0 && rect.height === 0) {\n // This might happen, for example, if our <body> is in hidden <iframe>.\n return false;\n }\n\n return true;\n}\n\nexport function getStackTrace(): string[] {\n const oldStackTraceLimit = (Error as ErrorWithStack).stackTraceLimit;\n\n try {\n (Error as ErrorWithStack).stackTraceLimit = 1000;\n\n throw new Error();\n } catch (e) {\n (Error as ErrorWithStack).stackTraceLimit = oldStackTraceLimit;\n\n return (\n (e as Error).stack\n ?.split(\"\\n\")\n .slice(1)\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"at \")) || []\n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n NotificationUI,\n HTMLElementWithAbleDOMUIFlag,\n isAbleDOMUIElement,\n} from \"./ui/ui\";\nimport { isAccessibilityAffectingElement } from \"./utils\";\nimport { ValidationRule, ValidationNotification } from \"./rules/base\";\n\ninterface HTMLElementWithAbleDOM extends HTMLElement {\n __abledom?: {\n notifications?: Map<ValidationRule, NotificationUI>;\n };\n}\n\nexport class AbleDOM {\n private _win: Window;\n private _observer: MutationObserver;\n private _clearValidationTimeout: (() => void) | undefined;\n private _elementsWithNotifications: Set<HTMLElementWithAbleDOM> = new Set();\n private _changedElementIds: Set<string> = new Set();\n private _elementsDependingOnId: Map<string, Set<HTMLElement>> = new Map();\n private _dependantIdsByElement: Map<HTMLElement, Set<string>> = new Map();\n private _idByElement: Map<HTMLElement, string> = new Map();\n private _rules: ValidationRule[] = [];\n private _startFunc: (() => void) | undefined;\n private _isStarted = false;\n\n constructor(win: Window) {\n this._win = win;\n\n const _elementsToValidate: Set<HTMLElementWithAbleDOM> = new Set();\n const _elementsToRemove: Set<HTMLElementWithAbleDOM> = new Set();\n\n win.document.addEventListener(\"focusin\", this._onFocusIn, true);\n win.document.addEventListener(\"focusout\", this._onFocusOut, true);\n\n this._observer = new MutationObserver((mutations) => {\n for (let mutation of mutations) {\n if ((mutation.target as HTMLElementWithAbleDOMUIFlag).__abledomui) {\n continue;\n }\n\n const added = mutation.addedNodes;\n const removed = mutation.removedNodes;\n const attributeName = mutation.attributeName;\n\n if (attributeName === \"id\") {\n // A bunch of aria attributes reference elements by id, so, we are handling it as special case.\n this._onElementId(mutation.target as HTMLElementWithAbleDOM, false);\n\n continue;\n }\n\n // Adding children should trigger revalidation of the parents (it could,\n // for example, be a text that of a parent button).\n lookUp(mutation.target);\n\n for (let i = 0; i < added.length; i++) {\n findTargets(added[i], false);\n }\n\n for (let i = 0; i < removed.length; i++) {\n findTargets(removed[i], true);\n }\n }\n\n this._clearValidationTimeout?.();\n\n const _validationTimeout: number | undefined = win.setTimeout(() => {\n delete this._clearValidationTimeout;\n\n this._remove(_elementsToRemove);\n this._validate(_elementsToValidate);\n\n _elementsToRemove.clear();\n _elementsToValidate.clear();\n this._changedElementIds.clear();\n }, 200); // Defer the validation a bit.\n\n this._clearValidationTimeout = () => {\n win.clearTimeout(_validationTimeout);\n delete this._clearValidationTimeout;\n };\n });\n\n this._startFunc = () => {\n delete this._startFunc;\n\n this._observer.observe(win.document, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n // Initial validation.\n findTargets(win.document.body, false);\n this._validate(_elementsToValidate);\n _elementsToValidate.clear();\n };\n\n const addTarget = (node: Node, removed: boolean): void => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n\n const id = (node as HTMLElement).id;\n\n if (id) {\n this._onElementId(node as HTMLElement, removed);\n }\n\n if (removed) {\n _elementsToRemove.add(node as HTMLElementWithAbleDOM);\n _elementsToValidate.delete(node as HTMLElementWithAbleDOM);\n } else {\n _elementsToValidate.add(node as HTMLElementWithAbleDOM);\n _elementsToRemove.delete(node as HTMLElementWithAbleDOM);\n }\n };\n\n function lookUp(node: Node): void {\n for (let n: Node | null = node; n; n = n.parentNode) {\n addTarget(n, _elementsToRemove.has(node as HTMLElementWithAbleDOM));\n }\n }\n\n function findTargets(node: Node, removed: boolean): void {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n\n addTarget(node as HTMLElement, removed);\n\n const walker = win.document.createTreeWalker(\n node,\n NodeFilter.SHOW_ELEMENT,\n (node: Node): number => {\n addTarget(node, removed);\n return NodeFilter.FILTER_SKIP;\n },\n );\n\n if (walker) {\n while (walker.nextNode()) {\n /* Iterating for the sake of going through all elements in the subtree. */\n }\n }\n }\n }\n\n private _onElementId(element: HTMLElement, removed: boolean) {\n const elementId = element.getAttribute(\"id\");\n const oldElementId = this._idByElement.get(element);\n\n if (oldElementId) {\n this._changedElementIds.add(oldElementId);\n\n const elements = this._elementsDependingOnId.get(oldElementId);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(oldElementId);\n }\n }\n }\n\n if (elementId) {\n this._changedElementIds.add(elementId);\n\n let elements = this._elementsDependingOnId.get(elementId);\n\n if (removed) {\n this._idByElement.delete(element);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(elementId);\n }\n }\n } else {\n this._idByElement.set(element, elementId);\n\n if (!elements) {\n elements = new Set();\n this._elementsDependingOnId.set(elementId, elements);\n }\n\n elements.add(element);\n }\n } else {\n this._idByElement.delete(element);\n }\n }\n\n private _addNotification(\n rule: ValidationRule,\n notification: ValidationNotification,\n ) {\n const element = notification?.element as HTMLElementWithAbleDOM | undefined;\n\n if (!notification) {\n this._removeNotification(element || this._win.document.body, rule);\n return;\n }\n\n let notificationUI: NotificationUI | undefined;\n\n if (rule.anchored && element) {\n let abledomOnElement = element.__abledom;\n\n if (!abledomOnElement) {\n abledomOnElement = element.__abledom = {};\n }\n\n let notifications = abledomOnElement.notifications;\n\n if (!notifications) {\n notifications = abledomOnElement.notifications = new Map();\n }\n\n notificationUI = notifications.get(rule);\n\n if (!notificationUI) {\n notificationUI = new NotificationUI(this._win, rule);\n notifications.set(rule, notificationUI);\n }\n\n this._elementsWithNotifications.add(element);\n } else {\n notificationUI = new NotificationUI(this._win, rule);\n }\n\n notificationUI.update(notification);\n }\n\n private _removeNotification(\n element: HTMLElementWithAbleDOM,\n rule: ValidationRule,\n ) {\n if (!rule.anchored) {\n return;\n }\n\n const notifications = element.__abledom?.notifications;\n\n if (!notifications) {\n return;\n }\n\n const notification = notifications.get(rule);\n\n if (notification) {\n notification.dispose();\n notifications.delete(rule);\n }\n\n if (notifications.size === 0) {\n this._elementsWithNotifications.delete(element);\n delete element.__abledom;\n }\n }\n\n private _validate(elements: Set<HTMLElementWithAbleDOM>) {\n for (const id of this._changedElementIds) {\n const dependingOnId = this._elementsDependingOnId.get(id);\n\n if (dependingOnId) {\n for (const element of dependingOnId) {\n elements.add(element);\n }\n }\n }\n\n elements.forEach((element) => {\n if (\n isAccessibilityAffectingElement(element) ||\n element.__abledom?.notifications\n ) {\n const dependsOnIds = new Set<string>();\n\n for (const rule of this._rules) {\n if (!rule.validate || rule.accept?.(element) === false) {\n continue;\n }\n\n if (ValidationRule.checkExceptions(rule, element)) {\n continue;\n }\n\n const validationResult = rule.validate?.(element);\n\n if (validationResult?.notification) {\n this._addNotification(rule, validationResult.notification);\n\n const ids = validationResult.dependsOnIds;\n\n if (ids) {\n for (const id of ids) {\n dependsOnIds.add(id);\n }\n }\n } else if (element.__abledom?.notifications?.has(rule)) {\n this._removeNotification(element, rule);\n }\n }\n\n this._processElementDependingOnIds(\n element,\n dependsOnIds.size === 0 ? null : dependsOnIds,\n );\n }\n });\n }\n\n private _processElementDependingOnIds(\n element: HTMLElement,\n ids: Set<string> | null,\n ): void {\n let dependsOnIds = this._dependantIdsByElement.get(element);\n\n if (!ids && !dependsOnIds) {\n return;\n }\n\n if (!dependsOnIds) {\n dependsOnIds = new Set();\n }\n\n if (!ids) {\n ids = new Set();\n }\n\n for (const id of dependsOnIds) {\n if (!ids.has(id)) {\n const elements = this._elementsDependingOnId.get(id);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(id);\n }\n }\n }\n }\n\n for (const id of ids) {\n if (!dependsOnIds.has(id)) {\n dependsOnIds.add(id);\n\n let elements = this._elementsDependingOnId.get(id);\n\n if (!elements) {\n elements = new Set();\n this._elementsDependingOnId.set(id, elements);\n }\n\n elements.add(element);\n }\n }\n\n if (dependsOnIds.size === 0) {\n this._dependantIdsByElement.delete(element);\n } else {\n this._dependantIdsByElement.set(element, dependsOnIds);\n }\n }\n\n private _remove(elements: Set<HTMLElementWithAbleDOM>) {\n elements.forEach((element) => {\n const rules = [...(element.__abledom?.notifications?.keys() || [])];\n rules.forEach((rule) => this._removeNotification(element, rule));\n });\n }\n\n private _onFocusIn = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n\n if (target && isAbleDOMUIElement(target)) {\n return;\n }\n\n for (const rule of this._rules) {\n const focusNotification = rule.focused?.(event);\n\n if (focusNotification) {\n this._addNotification(rule, focusNotification);\n }\n }\n };\n\n private _onFocusOut = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n\n if (target && isAbleDOMUIElement(target)) {\n return;\n }\n\n for (const rule of this._rules) {\n const blurNotification = rule.blurred?.(event);\n\n if (blurNotification) {\n this._addNotification(rule, blurNotification);\n }\n }\n };\n\n private _notifyAsync = (\n rule: ValidationRule,\n notification: ValidationNotification,\n ): void => {\n this._addNotification(rule, notification);\n };\n\n addRule(rule: ValidationRule): void {\n this._rules.push(rule);\n }\n\n removeRule(rule: ValidationRule): void {\n const index = this._rules.indexOf(rule);\n\n if (index >= 0) {\n const rule = this._rules[index];\n this._rules.splice(index, 1);\n rule.stop?.();\n }\n }\n\n start(): void {\n if (this._isStarted) {\n return;\n }\n\n this._isStarted = true;\n\n for (const rule of this._rules) {\n ValidationRule.init(rule, this._win, this._notifyAsync);\n rule.start?.();\n }\n\n this._startFunc?.();\n }\n\n dispose() {\n this._win.document.addEventListener(\"focusin\", this._onFocusIn, true);\n this._win.document.addEventListener(\"focusout\", this._onFocusOut, true);\n\n this._remove(this._elementsWithNotifications);\n this._elementsWithNotifications.clear();\n\n this._dependantIdsByElement.clear();\n this._elementsDependingOnId.clear();\n this._idByElement.clear();\n\n this._clearValidationTimeout?.();\n\n for (const rule of this._rules) {\n rule.stop?.();\n ValidationRule.dispose(rule);\n }\n\n this._rules = [];\n\n if (this._startFunc) {\n delete this._startFunc;\n } else {\n this._observer.disconnect();\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { focusableElementSelector, matchesSelector } from \"../utils\";\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class AtomicRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"atomic\";\n anchored = true;\n\n accept(element: HTMLElement): boolean {\n return matchesSelector(element, focusableElementSelector);\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n const parentAtomic = document\n .evaluate(\n `ancestor::*[\n @role = 'button' or \n @role = 'checkbox' or \n @role = 'link' or \n @role = 'menuitem' or \n @role = 'menuitemcheckbox' or \n @role = 'menuitemradio' or \n @role = 'option' or \n @role = 'radio' or \n @role = 'switch' or \n @role = 'tab' or \n @role = 'treeitem' or\n self::a or\n self::button or\n self::input or\n self::option or\n self::textarea \n ][1]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n )\n .snapshotItem(0);\n\n if (parentAtomic) {\n return {\n notification: {\n id: \"focusable-in-atomic\",\n message: \"Focusable element inside atomic focusable.\",\n element,\n rel: parentAtomic,\n },\n };\n }\n\n return null;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n matchesSelector,\n focusableElementSelector,\n isElementVisible,\n} from \"../utils\";\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nconst _keyboardEditableInputTypes = new Set([\n \"text\",\n \"password\",\n \"email\",\n \"search\",\n \"tel\",\n \"url\",\n \"number\",\n \"date\",\n \"month\",\n \"week\",\n \"time\",\n \"datetime-local\",\n]);\n\nexport class FocusableElementLabelRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"FocusableElementLabelRule\";\n anchored = true;\n\n private _isAriaHidden(element: HTMLElement): boolean {\n return document.evaluate(\n `ancestor-or-self::*[@aria-hidden = 'true' or @hidden]`,\n element,\n null,\n XPathResult.BOOLEAN_TYPE,\n null,\n ).booleanValue;\n }\n\n private _hasLabel(element: HTMLElement): boolean {\n const labels = (element as HTMLInputElement).labels;\n\n if (labels && labels.length > 0) {\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (label.innerText.trim()) {\n return true;\n }\n }\n }\n\n if (element.tagName === \"IMG\") {\n if ((element as HTMLImageElement).alt.trim()) {\n return true;\n }\n }\n\n const labelNodes = document.evaluate(\n `(\n .//@aria-label | \n .//text() | \n .//@title | \n .//img/@alt | \n .//input[@type = 'image']/@alt | \n .//input[@type != 'hidden'][@type = 'submit' or @type = 'reset' or @type = 'button']/@value\n )[not(ancestor-or-self::*[@aria-hidden = 'true' or @hidden])]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n );\n\n for (let i = 0; i < labelNodes.snapshotLength; i++) {\n const val = labelNodes.snapshotItem(i)?.nodeValue?.trim();\n\n if (val) {\n return true;\n }\n }\n\n return false;\n }\n\n accept(element: HTMLElement): boolean {\n return matchesSelector(element, focusableElementSelector);\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n if (element.tagName === \"INPUT\") {\n const type = (element as HTMLInputElement).type;\n\n if (type === \"hidden\") {\n return null;\n }\n\n if (_keyboardEditableInputTypes.has(type)) {\n return null;\n }\n\n if (type === \"image\") {\n if ((element as HTMLInputElement).alt.trim()) {\n return null;\n }\n }\n\n if (type === \"submit\" || type === \"reset\" || type === \"button\") {\n if ((element as HTMLInputElement).value.trim()) {\n return null;\n }\n }\n }\n\n if (this._isAriaHidden(element)) {\n return null;\n }\n\n if (this._hasLabel(element)) {\n return null;\n }\n\n const labelledByNodes = document.evaluate(\n `.//@aria-labelledby[not(ancestor-or-self::*[@aria-hidden = 'true' or @hidden])]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n );\n\n const labelledByValues: string[] = [];\n\n for (let i = 0; i < labelledByNodes.snapshotLength; i++) {\n const val = (labelledByNodes.snapshotItem(i) as Attr)?.value\n ?.trim()\n .split(\" \");\n\n if (val?.length) {\n labelledByValues.push(...val);\n }\n }\n\n for (const id of labelledByValues) {\n const labelElement = document.getElementById(id);\n\n if (labelElement && this._hasLabel(labelElement)) {\n return {\n dependsOnIds: new Set(labelledByValues),\n };\n }\n }\n\n return {\n notification: isElementVisible(element)\n ? {\n id: \"focusable-element-label\",\n message: \"Focusable element must have a non-empty text label.\",\n element,\n }\n : undefined,\n dependsOnIds: new Set(labelledByValues),\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class ExistingIdRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"existing-id\";\n anchored = true;\n\n accept(element: HTMLElement): boolean {\n return (\n element.hasAttribute(\"aria-labelledby\") ||\n element.hasAttribute(\"aria-describedby\") ||\n (element.tagName === \"LABEL\" && !!(element as HTMLLabelElement).htmlFor)\n );\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n const ids = [\n ...(element.getAttribute(\"aria-labelledby\")?.split(\" \") || []),\n ...(element.getAttribute(\"aria-describedby\")?.split(\" \") || []),\n ...(element.tagName === \"LABEL\"\n ? [(element as HTMLLabelElement).htmlFor]\n : []),\n ].filter((id) => !!id);\n\n if (ids.length === 0) {\n return null;\n }\n\n for (const id of ids) {\n if (document.getElementById(id)) {\n return {\n dependsOnIds: new Set(ids),\n };\n }\n }\n\n return {\n notification: {\n id: \"missing-id\",\n message: `Elements with referenced ids do not extist.`,\n element,\n },\n dependsOnIds: new Set(ids),\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { isElementVisible, getStackTrace } from \"../utils\";\nimport { BlurNotification, ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class FocusLostRule extends ValidationRule<BlurNotification> {\n type = ValidationRuleType.Error;\n name = \"focus-lost\";\n anchored = false;\n\n private _focusLostTimeout = 2000; // For now reporting lost focus after 2 seconds of it being lost.\n private _clearScheduledFocusLost: (() => void) | undefined;\n private _focusedElement: HTMLElement | undefined;\n private _focusedElementPosition: string[] | undefined;\n private _lastFocusStack: string[] | undefined;\n private _lastBlurStack: string[] | undefined;\n private _mouseEventTimer: number | undefined;\n private _releaseMouseEvent: (() => void) | undefined;\n\n private _serializeElementPosition(element: HTMLElement): string[] {\n const position: string[] = [];\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return position;\n }\n\n for (\n let el: HTMLElement | null = parentElement;\n el;\n el = el.parentElement\n ) {\n const tagName = el.tagName.toLowerCase();\n position.push(tagName);\n }\n\n return position;\n }\n\n focused(event: FocusEvent): null {\n const target = event.target as HTMLElement | null;\n\n this._clearScheduledFocusLost?.();\n\n if (target) {\n this._lastFocusStack = getStackTrace();\n\n this._focusedElement = target;\n this._focusedElementPosition = this._serializeElementPosition(target);\n }\n\n return null;\n }\n\n blurred(event: FocusEvent): null {\n const target = event.target as HTMLElement | null;\n const win = this.window;\n\n this._clearScheduledFocusLost?.();\n\n if (!target || !win || event.relatedTarget || this._mouseEventTimer) {\n return null;\n }\n\n const targetPosition =\n this._focusedElement === target\n ? this._focusedElementPosition\n : undefined;\n\n this._lastBlurStack = getStackTrace();\n\n // Make sure to not hold the reference once the element is not focused anymore.\n this._focusedElement = undefined;\n this._focusedElementPosition = undefined;\n\n const focusLostTimer = win.setTimeout(() => {\n delete this._clearScheduledFocusLost;\n\n if (\n win.document.body &&\n (!win.document.activeElement ||\n win.document.activeElement === win.document.body) &&\n (!win.document.body.contains(target) || !isElementVisible(target))\n ) {\n this.notify({\n element: target,\n id: \"focus-lost\",\n message: \"Focus lost.\",\n stack: this._lastBlurStack,\n relStack: this._lastFocusStack,\n position: targetPosition || [],\n });\n }\n }, this._focusLostTimeout);\n\n this._clearScheduledFocusLost = () => {\n delete this._clearScheduledFocusLost;\n win.clearTimeout(focusLostTimer);\n };\n\n return null;\n }\n\n start(): void {\n const win = this.window;\n\n if (!win) {\n return;\n }\n\n const onMouseEvent = () => {\n if (!this._mouseEventTimer) {\n this._mouseEventTimer = win.setTimeout(() => {\n this._mouseEventTimer = undefined;\n }, 0);\n }\n };\n\n win.addEventListener(\"mousedown\", onMouseEvent, true);\n win.addEventListener(\"mouseup\", onMouseEvent, true);\n win.addEventListener(\"mousemove\", onMouseEvent, true);\n\n this._releaseMouseEvent = () => {\n delete this._releaseMouseEvent;\n\n if (this._mouseEventTimer) {\n win.clearTimeout(this._mouseEventTimer);\n delete this._mouseEventTimer;\n }\n\n win.removeEventListener(\"mousedown\", onMouseEvent, true);\n win.removeEventListener(\"mouseup\", onMouseEvent, true);\n win.removeEventListener(\"mousemove\", onMouseEvent, true);\n };\n }\n\n stop(): void {\n this._releaseMouseEvent?.();\n this._clearScheduledFocusLost?.();\n this._focusedElement = undefined;\n this._focusedElementPosition = undefined;\n this._lastFocusStack = undefined;\n this._lastBlurStack = undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { isElementVisible, getStackTrace } from \"../utils\";\nimport { ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class BadFocusRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"bad-focus\";\n anchored = false;\n\n private _lastFocusStack: string[] | undefined;\n private _lastBlurStack: string[] | undefined;\n private _clearCheckTimer: (() => void) | undefined;\n\n focused(): null {\n this._lastFocusStack = getStackTrace();\n return null;\n }\n\n blurred(): null {\n const win = this.window;\n\n if (!win) {\n return null;\n }\n\n this._lastBlurStack = getStackTrace();\n\n this._clearCheckTimer?.();\n\n const checkTimer = win.setTimeout(() => {\n delete this._clearCheckTimer;\n\n if (\n document.activeElement &&\n !isElementVisible(document.activeElement as HTMLElement)\n ) {\n this.notify({\n id: \"bad-focus\",\n message: \"Focused stolen by invisible element.\",\n element: document.activeElement as HTMLElement,\n stack: this._lastBlurStack,\n relStack: this._lastFocusStack,\n });\n }\n }, 100);\n\n this._clearCheckTimer = () => {\n delete this._clearCheckTimer;\n win.clearTimeout(checkTimer);\n };\n\n return null;\n }\n\n stop(): void {\n this._clearCheckTimer?.();\n this._clearCheckTimer = undefined;\n this._lastFocusStack = undefined;\n this._lastBlurStack = undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class FindElementRule extends ValidationRule {\n type = ValidationRuleType.Warning;\n name = \"find-element\";\n anchored = true;\n\n private _conditions: { [name: string]: (element: HTMLElement) => boolean } =\n {};\n\n addCondition(\n name: string,\n condition: (element: HTMLElement) => boolean,\n ): void {\n this._conditions[name] = condition;\n }\n\n removeCondition(name: string): void {\n delete this._conditions[name];\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n for (const name of Object.keys(this._conditions)) {\n if (this._conditions[name](element)) {\n return {\n notification: {\n id: \"find-element\",\n message: `Element found: ${name}.`,\n element,\n },\n };\n }\n }\n\n return null;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class CustomNotifyRule extends ValidationRule {\n type = ValidationRuleType.Info;\n name = \"custom-notify\";\n anchored = false;\n\n customNotify(message: string, element?: HTMLElement): void {\n this.notify({\n id: \"custom-notify\",\n message,\n element,\n });\n }\n}\n"],"mappings":"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","names":["ValidationRuleType","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","_a","node","rule"]}
1
+ {"version":3,"sources":["../../src/rules/base.ts","inline-file:/Users/marata/Documents/Work/abledom/src/ui/ui.css","../../src/ui/domBuilder.ts","inline-file:/Users/marata/Documents/Work/abledom/src/ui/close.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/help.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/log.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/reveal.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/hideall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/muteall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/showall.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/aligntopleft.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/aligntopright.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/alignbottomright.svg","inline-file:/Users/marata/Documents/Work/abledom/src/ui/alignbottomleft.svg","../../src/ui/ui.ts","../../src/utils.ts","../../src/core.ts","../../src/rules/atomic.ts","../../src/rules/label.ts","../../src/rules/existingid.ts","../../src/rules/focuslost.ts","../../src/rules/badfocus.ts","../../src/rules/find.ts","../../src/rules/notify.ts"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport enum ValidationRuleType {\n Error = 1,\n Warning,\n Info,\n}\n\nexport interface ValidationNotification {\n id: string;\n message: string;\n element?: HTMLElement;\n rel?: Node;\n help?: string;\n stack?: string[];\n relStack?: string[];\n}\n\nexport interface ValidationResult {\n notification?: ValidationNotification;\n dependsOnIds?: Set<string>;\n}\n\nexport interface BlurNotification extends ValidationNotification {\n position?: string[];\n}\n\nexport abstract class ValidationRule<\n N extends ValidationNotification = ValidationNotification,\n> {\n abstract type: ValidationRuleType;\n abstract name: string;\n private _window?: Window;\n private _exceptions: ((element: HTMLElement) => boolean)[] = [];\n private _onNotification:\n | ((rult: ValidationRule<N>, notification: N) => void)\n | undefined;\n\n static init(\n instance: ValidationRule,\n window: Window,\n onNotification: (\n rule: ValidationRule,\n notification: ValidationNotification,\n ) => void,\n ): void {\n instance._window = window;\n instance._onNotification = onNotification;\n }\n\n static dispose(instance: ValidationRule): void {\n instance.dispose();\n }\n\n static checkExceptions(\n instance: ValidationRule,\n element: HTMLElement,\n ): boolean {\n for (const exception of instance._exceptions) {\n if (exception(element)) {\n return true;\n }\n }\n\n return false;\n }\n\n private dispose(): void {\n this._window = undefined;\n this._onNotification = undefined;\n this._exceptions = [];\n }\n\n addException(checkException: (element: HTMLElement) => boolean): void {\n this._exceptions?.push(checkException);\n }\n\n removeException(checkException: (element: HTMLElement) => boolean): void {\n const index = this._exceptions.indexOf(checkException);\n\n if (index >= 0) {\n this._exceptions.splice(index, 1);\n }\n }\n\n /**\n * If true, the rule violation will be anchored to the currently present\n * in DOM element it is applied to, otherwise the error message will show\n * till it is dismissed.\n */\n abstract anchored: boolean;\n\n /**\n * Window is set when the rule is added to the AbleDOM instance.\n */\n get window(): Window | undefined {\n return this._window;\n }\n\n // Called when the parent AbleDOM instance is started.\n start?(): void;\n // Called when the parent AbleDOM instance is stopped.\n stop?(): void;\n\n // Called before validation. If returns false, the rule will not be applied to\n // the element.\n accept?(element: HTMLElement): boolean;\n\n validate?(element: HTMLElement): ValidationResult | null;\n\n notify(notification: N): void {\n this._onNotification?.(this, notification);\n }\n\n focused?(event: FocusEvent): ValidationNotification | null;\n blurred?(event: FocusEvent): BlurNotification | null;\n}\n","export default \"#abledom-report {\\n bottom: 20px;\\n display: flex;\\n flex-direction: column;\\n left: 10px;\\n max-height: 80%;\\n max-width: 60%;\\n padding: 4px 8px;\\n position: absolute;\\n z-index: 100500;\\n}\\n\\n#abledom-report :focus-visible {\\n outline: 3px solid red;\\n mix-blend-mode: difference;\\n}\\n\\n#abledom-report.abledom-align-left {\\n left: 10px;\\n right: auto;\\n}\\n\\n#abledom-report.abledom-align-right {\\n left: auto;\\n right: 10px;\\n}\\n\\n#abledom-report.abledom-align-bottom {\\n bottom: 20px;\\n top: auto;\\n}\\n\\n#abledom-report.abledom-align-top {\\n /* flex-direction: column-reverse; */\\n bottom: auto;\\n top: 10px;\\n}\\n\\n.abledom-menu-container {\\n backdrop-filter: blur(3px);\\n border-radius: 8px;\\n box-shadow: 0px 0px 4px rgba(127, 127, 127, 0.5);\\n display: inline-block;\\n margin: 2px auto 2px 0;\\n}\\n\\n#abledom-report.abledom-align-right .abledom-menu-container {\\n margin: 2px 0 2px auto;\\n}\\n\\n.abledom-menu {\\n background-color: rgba(140, 10, 121, 0.7);\\n border-radius: 8px;\\n color: white;\\n display: inline flex;\\n font-family: Arial, Helvetica, sans-serif;\\n font-size: 16px;\\n line-height: 26px;\\n padding: 4px;\\n}\\n\\n.abledom-menu .notifications-count {\\n margin: 0 8px;\\n display: inline-block;\\n}\\n\\n.abledom-menu .button {\\n all: unset;\\n color: #000;\\n cursor: pointer;\\n background: linear-gradient(\\n 180deg,\\n rgba(255, 255, 255, 1) 0%,\\n rgba(200, 200, 200, 1) 100%\\n );\\n border-radius: 6px;\\n border: 1px solid rgba(255, 255, 255, 0.4);\\n box-sizing: border-box;\\n line-height: 0px;\\n margin-right: 4px;\\n max-height: 26px;\\n padding: 2px;\\n text-decoration: none;\\n}\\n\\n.abledom-menu .align-button {\\n border-right-color: rgba(0, 0, 0, 0.4);\\n border-radius: 0;\\n margin: 0;\\n}\\n\\n.abledom-menu .align-button:active,\\n#abledom-report .pressed {\\n background: linear-gradient(\\n 180deg,\\n rgba(130, 130, 130, 1) 0%,\\n rgba(180, 180, 180, 1) 100%\\n );\\n}\\n\\n.abledom-menu .align-button-first {\\n border-top-left-radius: 6px;\\n border-bottom-left-radius: 6px;\\n margin-left: 8px;\\n}\\n.abledom-menu .align-button-last {\\n border-top-right-radius: 6px;\\n border-bottom-right-radius: 6px;\\n border-right-color: rgba(255, 255, 255, 0.4);\\n}\\n\\n.abledom-notifications-container {\\n overflow: scroll;\\n max-height: calc(100vh - 100px);\\n}\\n\\n#abledom-report.abledom-align-right .abledom-notifications-container {\\n text-align: right;\\n}\\n\\n.abledom-notification-container {\\n backdrop-filter: blur(3px);\\n border-radius: 8px;\\n box-shadow: 0px 0px 4px rgba(127, 127, 127, 0.5);\\n display: inline-flex;\\n margin: 2px 0;\\n}\\n\\n.abledom-notification {\\n background-color: rgba(164, 2, 2, 0.7);\\n border-radius: 8px;\\n color: white;\\n display: inline flex;\\n font-family: Arial, Helvetica, sans-serif;\\n font-size: 16px;\\n line-height: 26px;\\n padding: 4px;\\n}\\n.abledom-notification_warning {\\n background-color: rgba(163, 82, 1, 0.7);\\n}\\n.abledom-notification_info {\\n background-color: rgba(0, 0, 255, 0.7);\\n}\\n\\n.abledom-notification .button {\\n all: unset;\\n color: #000;\\n cursor: pointer;\\n background: linear-gradient(\\n 180deg,\\n rgba(255, 255, 255, 1) 0%,\\n rgba(200, 200, 200, 1) 100%\\n );\\n border-radius: 6px;\\n border: 1px solid rgba(255, 255, 255, 0.4);\\n box-sizing: border-box;\\n line-height: 0px;\\n margin-right: 4px;\\n max-height: 26px;\\n padding: 2px;\\n text-decoration: none;\\n}\\n\\n.abledom-notification .button:hover {\\n opacity: 0.7;\\n}\\n\\n.abledom-notification .button.close {\\n background: none;\\n border-color: transparent;\\n color: #fff;\\n margin: 0;\\n}\\n\\n.abledom-highlight {\\n background-color: yellow;\\n border: 1px solid red;\\n box-sizing: border-box;\\n display: none;\\n opacity: 0.6;\\n position: absolute;\\n z-index: 100499;\\n}\\n\";","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport class DOMBuilder {\n private _doc: Document | undefined;\n private _stack: (HTMLElement | DocumentFragment)[];\n\n constructor(parent: HTMLElement | DocumentFragment) {\n this._doc = parent.ownerDocument;\n this._stack = [parent];\n }\n\n openTag(\n tagName: string,\n attributes?: Record<string, string>,\n callback?: (element: HTMLElement) => void,\n namespace?: string,\n ): DOMBuilder {\n const parent = this._stack[0];\n const element = (\n namespace\n ? this._doc?.createElementNS(namespace, tagName)\n : this._doc?.createElement(tagName)\n ) as HTMLElement;\n\n if (parent && element) {\n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n if (key === \"class\") {\n element.className = value;\n } else if (key === \"style\") {\n element.style.cssText = value;\n } else {\n element.setAttribute(key, value);\n }\n }\n }\n\n if (callback) {\n callback(element);\n }\n\n parent.appendChild(element);\n\n this._stack.unshift(element);\n }\n\n return this;\n }\n\n closeTag(): DOMBuilder {\n if (this._stack.length <= 1) {\n throw new Error(\"Nothing to close\");\n }\n\n this._stack.shift();\n\n return this;\n }\n\n text(text: string): DOMBuilder {\n this._stack[0]?.appendChild(document.createTextNode(text));\n return this;\n }\n\n element(\n callback: (element: HTMLElement | DocumentFragment) => void,\n ): DOMBuilder {\n callback(this._stack[0]);\n return this;\n }\n}\n","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M9.09 9a3 3 0 1 1 5.83 1c-.28 1.02-1.22 1.5-2.01 2.1-.76.58-1 1.1-1 2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"17\",\"r\":\"0.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"polyline\", {\"points\":\"4 7 9 12 4 17\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"11\",\"y1\":\"19\",\"x2\":\"20\",\"y2\":\"19\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"xmlns\":\"http://www.w3.org/2000/svg\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"6\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"22\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"6\",\"y2\":\"12\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"18\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"1.67\",\"y1\":\"1.67\",\"x2\":\"18.33\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"1.67\",\"y1\":\"1.67\",\"x2\":\"18.33\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"line\", {\"x1\":\"18.33\",\"y1\":\"1.67\",\"x2\":\"1.67\",\"y2\":\"18.33\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"path\", {\"d\":\"M11.44 17.5a1.67 1.67 0 0 1-2.89 0\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.openTag(\"path\", {\"d\":\"M15 6.67a5 5 0 0 0-10 0v4.17a1.67 1.67 0 0 1-.83 1.44L3.33 14.17h13.34l-0.83-1.89a1.67 1.67 0 0 1-.83-1.44V6.67z\",\"stroke-width\":\"1.5\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"3\",\"y\":\"3\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"11\",\"y\":\"3\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"11\",\"y\":\"11\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","import {DOMBuilder} from \"./domBuilder\"; export default (function buildSVG(parent) {\nconst builder = new DOMBuilder(parent);\nbuilder.openTag(\"svg\", {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"stroke\":\"currentColor\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.openTag(\"rect\", {\"x\":\"3\",\"y\":\"11\",\"width\":\"6\",\"height\":\"6\",\"stroke-width\":\"2\"}, undefined, \"http://www.w3.org/2000/svg\");\nbuilder.closeTag();\nbuilder.closeTag();\nreturn parent.firstElementChild; });;","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ValidationNotification,\n ValidationRule,\n ValidationRuleType,\n} from \"../rules/base\";\n\n// The imports below will become functions that use DOMBuilder to build SVG\n// unrolled by both Vite (in `npm run dev`) and TSUP (in `npm run build`).\n// @ts-expect-error parsed assets\nimport css from \"./ui.css?raw\";\n// @ts-expect-error parsed assets\nimport svgClose from \"./close.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgHelp from \"./help.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgLog from \"./log.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgReveal from \"./reveal.svg?raw\";\n\n// @ts-expect-error parsed assets\nimport svgHideAll from \"./hideall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgMuteAll from \"./muteall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgShowAll from \"./showall.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignTopLeft from \"./aligntopleft.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignTopRight from \"./aligntopright.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignBottomRight from \"./alignbottomright.svg?raw\";\n// @ts-expect-error parsed assets\nimport svgAlignBottomLeft from \"./alignbottomleft.svg?raw\";\n\nimport { DOMBuilder } from \"./domBuilder\";\n\nenum UIAlignments {\n BottomLeft = \"bottom-left\",\n BottomRight = \"bottom-right\",\n TopLeft = \"top-left\",\n TopRight = \"top-right\",\n}\n\nconst pressedClass = \"pressed\";\n\ninterface WindowWithAbleDOMDevtools extends Window {\n __ableDOMDevtools?: {\n revealElement?: (element: HTMLElement) => Promise<boolean>;\n };\n}\n\nexport interface HTMLElementWithAbleDOMUIFlag extends HTMLElement {\n // A flag to quickly test that the element should be ignored by the validator.\n __abledomui?: boolean;\n}\n\nexport class NotificationUI {\n private static _notificationsUI: NotificationsUI | undefined;\n\n static setOnToggle(\n instance: NotificationUI,\n onToggle: (notificationUI: NotificationUI, show: boolean) => void,\n ) {\n instance._onToggle = onToggle;\n }\n\n private static _highlight: ElementHighlighter;\n\n private _win: Window;\n private _wrapper: HTMLElementWithAbleDOMUIFlag;\n private _rule: ValidationRule;\n private _onToggle:\n | ((notificationUI: NotificationUI, show: boolean) => void)\n | undefined;\n\n static getElement(instance: NotificationUI): HTMLElement {\n return instance._wrapper;\n }\n\n isHidden = false;\n\n constructor(win: Window, rule: ValidationRule) {\n this._win = win;\n this._rule = rule;\n\n if (!NotificationUI._notificationsUI) {\n NotificationUI._notificationsUI = new NotificationsUI(this._win);\n }\n\n this._wrapper = win.document.createElement(\n \"div\",\n ) as HTMLElementWithAbleDOMUIFlag;\n\n if (!NotificationUI._highlight) {\n NotificationUI._highlight = new ElementHighlighter(win);\n }\n\n NotificationUI._notificationsUI.addNotification(this);\n }\n\n update(notification: ValidationNotification): void {\n const win = this._win;\n const rule = this._rule;\n const wrapper = this._wrapper;\n const element = notification.element;\n\n wrapper.__abledomui = true;\n wrapper.textContent = \"\";\n\n new DOMBuilder(wrapper)\n .openTag(\n \"div\",\n { class: \"abledom-notification-container\" },\n (container) => {\n container.onmouseover = () => {\n element && NotificationUI._highlight?.highlight(element);\n };\n\n container.onmouseout = () => {\n NotificationUI._highlight?.hide();\n };\n },\n )\n .openTag(\"div\", {\n class: `abledom-notification${\n rule.type === ValidationRuleType.Warning\n ? \" abledom-notification_warning\"\n : rule.type === ValidationRuleType.Info\n ? \" abledom-notification_info\"\n : \"\"\n }`,\n })\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Log to Console\",\n },\n (logButton) => {\n logButton.onclick = () => {\n console.error(\n \"AbleDOM: \",\n \"\\nmessage:\",\n notification.message,\n \"\\nelement:\",\n element,\n ...(notification.rel ? [\"\\nrelative:\", notification.rel] : []),\n \"\\nnotification:\",\n notification,\n );\n };\n },\n )\n .element(svgLog)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Reveal in Elements panel\",\n },\n (revealButton: HTMLElement) => {\n const hasDevTools =\n !!(win as WindowWithAbleDOMDevtools).__ableDOMDevtools\n ?.revealElement && false; // Temtorarily disabling the devtools plugin integration.\n if (hasDevTools && element && win.document.body.contains(element)) {\n revealButton.onclick = () => {\n const revealElement = (win as WindowWithAbleDOMDevtools)\n .__ableDOMDevtools?.revealElement;\n if (revealElement && win.document.body.contains(element)) {\n revealElement(element).then((revealed: boolean) => {\n if (!revealed) {\n // TODO\n }\n });\n }\n };\n } else {\n revealButton.style.display = \"none\";\n }\n },\n )\n .element(svgReveal)\n .closeTag()\n .text(notification.message)\n .openTag(\n \"a\",\n {\n class: \"button close\",\n href: notification.help || \"/\",\n title: \"Open help\",\n target: \"_blank\",\n },\n (help) => {\n if (!notification.help) {\n help.style.display = \"none\";\n }\n },\n )\n .element(svgHelp)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button close\",\n title: \"Hide\",\n },\n (closeButton) => {\n closeButton.onclick = () => {\n this.toggle(false);\n NotificationUI._highlight?.hide();\n };\n },\n )\n .element(svgClose)\n .closeTag()\n .closeTag()\n .closeTag();\n }\n\n toggle(show: boolean, initial = false) {\n this.isHidden = !show;\n\n if (!initial) {\n this._onToggle?.(this, show);\n\n if (!this._rule.anchored && !show) {\n this.dispose();\n }\n }\n\n this._wrapper.style.display = show ? \"block\" : \"none\";\n }\n\n dispose() {\n this._wrapper.remove();\n NotificationUI._notificationsUI?.removeNotification(this);\n }\n}\n\nexport class NotificationsUI {\n private _container: HTMLElement;\n private _notificationsContainer: HTMLElement;\n private _menuElement: HTMLElement;\n private _notificationCountElement: HTMLSpanElement | undefined;\n private _showAllButton: HTMLElement | undefined;\n private _hideAllButton: HTMLElement | undefined;\n private _alignBottomLeftButton: HTMLElement | undefined;\n private _alignTopLeftButton: HTMLElement | undefined;\n private _alignTopRightButton: HTMLElement | undefined;\n private _alignBottomRightButton: HTMLElement | undefined;\n\n private _isMuted = false;\n private _notifications: Set<NotificationUI> = new Set();\n\n constructor(win: Window) {\n const container = (this._container =\n win.document.createElement(\"div\")) as HTMLElementWithAbleDOMUIFlag;\n container.__abledomui = true;\n container.id = \"abledom-report\";\n\n const style = document.createElement(\"style\");\n style.type = \"text/css\";\n style.appendChild(document.createTextNode(css));\n container.appendChild(style);\n\n const notificationsContainer = (this._notificationsContainer =\n win.document.createElement(\"div\")) as HTMLDivElement;\n notificationsContainer.className = \"abledom-notifications-container\";\n container.appendChild(notificationsContainer);\n\n const menuElement = (this._menuElement =\n win.document.createElement(\"div\")) as HTMLDivElement;\n\n menuElement.className = \"abledom-menu-container\";\n container.appendChild(menuElement);\n\n new DOMBuilder(menuElement)\n .openTag(\"div\", { class: \"abledom-menu\" })\n .openTag(\n \"span\",\n {\n class: \"notifications-count\",\n title: \"Number of notifications\",\n },\n (notificationCountElement) => {\n this._notificationCountElement = notificationCountElement;\n },\n )\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Show all notifications\",\n },\n (showAllButton) => {\n this._showAllButton = showAllButton;\n\n showAllButton.onclick = () => {\n this.showAll();\n };\n },\n )\n .element(svgShowAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Hide all notifications\",\n },\n (hideAllButton) => {\n this._hideAllButton = hideAllButton;\n\n hideAllButton.onclick = () => {\n this.hideAll();\n };\n },\n )\n .element(svgHideAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button\",\n title: \"Mute newly appearing notifications\",\n },\n (muteButton) => {\n muteButton.onclick = () => {\n const isMuted = (this._isMuted =\n muteButton.classList.toggle(pressedClass));\n\n if (isMuted) {\n muteButton.setAttribute(\n \"title\",\n \"Unmute newly appearing notifications\",\n );\n } else {\n muteButton.setAttribute(\n \"title\",\n \"Mute newly appearing notifications\",\n );\n }\n };\n },\n )\n .element(svgMuteAll)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button align-button-first pressed\",\n title: \"Attach notifications to bottom left\",\n },\n (alignBottomLeftButton) => {\n this._alignBottomLeftButton = alignBottomLeftButton;\n\n alignBottomLeftButton.onclick = () => {\n this.setUIAlignment(UIAlignments.BottomLeft);\n };\n },\n )\n .element(svgAlignBottomLeft)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button\",\n title: \"Attach notifications to top left\",\n },\n (alignTopLeftButton) => {\n this._alignTopLeftButton = alignTopLeftButton;\n\n alignTopLeftButton.onclick = () => {\n this.setUIAlignment(UIAlignments.TopLeft);\n };\n },\n )\n .element(svgAlignTopLeft)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button\",\n title: \"Attach notifications to top right\",\n },\n (alignTopRightButton) => {\n this._alignTopRightButton = alignTopRightButton;\n\n alignTopRightButton.onclick = () => {\n this.setUIAlignment(UIAlignments.TopRight);\n };\n },\n )\n .element(svgAlignTopRight)\n .closeTag()\n .openTag(\n \"button\",\n {\n class: \"button align-button align-button-last\",\n title: \"Attach notifications to bottom right\",\n },\n (alignBottomRightButton) => {\n this._alignBottomRightButton = alignBottomRightButton;\n\n alignBottomRightButton.onclick = () => {\n this.setUIAlignment(UIAlignments.BottomRight);\n };\n },\n )\n .element(svgAlignBottomRight)\n .closeTag()\n .closeTag();\n\n win.document.body.appendChild(container);\n }\n\n private setUIAlignment(alignment: UIAlignments) {\n this._alignBottomLeftButton?.classList.remove(pressedClass);\n this._alignBottomRightButton?.classList.remove(pressedClass);\n this._alignTopLeftButton?.classList.remove(pressedClass);\n this._alignTopRightButton?.classList.remove(pressedClass);\n\n this._container.classList.remove(\n \"abledom-align-left\",\n \"abledom-align-right\",\n \"abledom-align-top\",\n \"abledom-align-bottom\",\n );\n let containerClasses: string[] = [];\n let notificationsFirst = false;\n\n switch (alignment) {\n case UIAlignments.BottomLeft:\n containerClasses = [\"abledom-align-left\", \"abledom-align-bottom\"];\n notificationsFirst = true;\n this._alignBottomLeftButton?.classList.add(pressedClass);\n break;\n case UIAlignments.BottomRight:\n containerClasses = [\"abledom-align-right\", \"abledom-align-bottom\"];\n notificationsFirst = true;\n this._alignBottomRightButton?.classList.add(pressedClass);\n break;\n case UIAlignments.TopLeft:\n containerClasses = [\"abledom-align-left\", \"abledom-align-top\"];\n this._alignTopLeftButton?.classList.add(pressedClass);\n break;\n case UIAlignments.TopRight:\n containerClasses = [\"abledom-align-right\", \"abledom-align-top\"];\n this._alignTopRightButton?.classList.add(pressedClass);\n break;\n }\n\n this._container.classList.add(...containerClasses);\n this._container.insertBefore(\n this._notificationsContainer,\n notificationsFirst ? this._menuElement : null,\n );\n }\n\n private _setNotificationsCount(count: number) {\n const countElement = this._notificationCountElement;\n\n if (countElement && count > 0) {\n countElement.textContent = \"\";\n new DOMBuilder(countElement)\n .openTag(\"strong\")\n .text(`${count}`)\n .closeTag()\n .text(` notification${count > 1 ? \"s\" : \"\"}`);\n\n this._menuElement.style.display = \"block\";\n } else {\n this._menuElement.style.display = \"none\";\n }\n }\n\n private _setShowHideButtonsVisibility() {\n const showAllButton = this._showAllButton;\n const hideAllButton = this._hideAllButton;\n\n if (!showAllButton || !hideAllButton) {\n return;\n }\n\n let allHidden = true;\n let allVisible = true;\n\n for (let notification of this._notifications) {\n if (notification.isHidden) {\n allVisible = false;\n } else {\n allHidden = false;\n }\n\n if (!allHidden && !allVisible) {\n break;\n }\n }\n\n hideAllButton.style.display = allHidden ? \"none\" : \"block\";\n showAllButton.style.display = allVisible ? \"none\" : \"block\";\n }\n\n addNotification(notification: NotificationUI) {\n if (this._notifications.has(notification)) {\n return;\n }\n\n if (this._isMuted) {\n notification.toggle(false, true);\n }\n\n this._notifications.add(notification);\n this._notificationsContainer.appendChild(\n NotificationUI.getElement(notification),\n );\n\n NotificationUI.setOnToggle(notification, () => {\n this._setShowHideButtonsVisibility();\n });\n\n this._setNotificationsCount(this._notifications.size);\n this._setShowHideButtonsVisibility();\n }\n\n removeNotification(notification: NotificationUI) {\n if (!this._notifications.has(notification)) {\n return;\n }\n\n this._notifications.delete(notification);\n\n this._setNotificationsCount(this._notifications.size);\n this._setShowHideButtonsVisibility();\n }\n\n hideAll() {\n this._notifications.forEach((notification) => {\n notification.toggle(false);\n });\n this._setShowHideButtonsVisibility();\n }\n\n showAll() {\n this._notifications.forEach((notification) => {\n notification.toggle(true);\n });\n this._setShowHideButtonsVisibility();\n }\n}\n\nclass ElementHighlighter {\n private _window: Window;\n private _container: HTMLElement;\n\n constructor(win: Window) {\n this._window = win;\n\n const container = (this._container =\n win.document.createElement(\"div\")) as HTMLElementWithAbleDOMUIFlag;\n container.__abledomui = true;\n container.className = \"abledom-highlight\";\n }\n\n highlight(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n if (rect.width === 0 || rect.height === 0) {\n return;\n }\n\n const win = this._window;\n const container = this._container;\n const style = container.style;\n\n if (container.parentElement !== win.document.body) {\n win.document.body.appendChild(container);\n }\n\n style.width = `${rect.width}px`;\n style.height = `${rect.height}px`;\n style.top = `${rect.top}px`;\n style.left = `${rect.left}px`;\n\n container.style.display = \"block\";\n }\n\n hide() {\n this._container.style.display = \"none\";\n }\n}\n\nexport function isAbleDOMUIElement(element: HTMLElement): boolean {\n for (let el: HTMLElement | null = element; el; el = el.parentElement) {\n if ((el as HTMLElementWithAbleDOMUIFlag).__abledomui) {\n return true;\n }\n }\n\n return false;\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\ninterface ErrorWithStack extends ErrorConstructor {\n stackTraceLimit: number;\n}\n\nexport const focusableElementSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"*[tabindex]\",\n \"*[contenteditable]\",\n \"details > summary\",\n \"audio[controls]\",\n \"video[controls]\",\n].join(\", \");\n\nexport interface HTMLElementAttributes {\n readonly [name: string]: string;\n}\n\nexport const AccessibilityAffectingElements = {\n a: true,\n area: true,\n article: true,\n aside: true,\n body: true,\n button: true,\n datalist: true,\n details: true,\n dialog: true,\n dl: true,\n form: true,\n h1: true,\n h2: true,\n h3: true,\n h4: true,\n h5: true,\n h6: true,\n hr: true,\n iframe: true,\n img: true,\n input: true,\n li: true,\n link: true,\n main: true,\n menu: true,\n menuitem: true,\n meter: true,\n nav: true,\n object: true,\n ol: true,\n option: true,\n progress: true,\n section: true,\n select: true,\n tbody: true,\n textarea: true,\n tfoot: true,\n th: true,\n thead: true,\n ul: true,\n};\n\nexport const AccessibilityAttributes = {\n role: true,\n tabindex: true,\n disabled: true,\n required: true,\n readonly: true,\n hidden: true,\n \"aria-activedescendant\": true,\n \"aria-atomic\": true,\n \"aria-autocomplete\": true,\n \"aria-busy\": true,\n \"aria-checked\": true,\n \"aria-colcount\": true,\n \"aria-colindex\": true,\n \"aria-colspan\": true,\n \"aria-controls\": true,\n \"aria-current\": true,\n \"aria-describedby\": true,\n \"aria-details\": true,\n \"aria-disabled\": true,\n \"aria-dropeffect\": true,\n \"aria-errormessage\": true,\n \"aria-expanded\": true,\n \"aria-flowto\": true,\n \"aria-grabbed\": true,\n \"aria-haspopup\": true,\n \"aria-hidden\": true,\n \"aria-invalid\": true,\n \"aria-keyshortcuts\": true,\n \"aria-label\": true,\n \"aria-labelledby\": true,\n \"aria-level\": true,\n \"aria-live\": true,\n \"aria-modal\": true,\n \"aria-multiline\": true,\n \"aria-multiselectable\": true,\n \"aria-orientation\": true,\n \"aria-owns\": true,\n \"aria-placeholder\": true,\n \"aria-posinset\": true,\n \"aria-pressed\": true,\n \"aria-readonly\": true,\n \"aria-relevant\": true,\n \"aria-required\": true,\n \"aria-roledescription\": true,\n \"aria-rowcount\": true,\n \"aria-rowindex\": true,\n \"aria-rowspan\": true,\n \"aria-selected\": true,\n \"aria-setsize\": true,\n \"aria-sort\": true,\n \"aria-valuemax\": true,\n \"aria-valuemin\": true,\n \"aria-valuenow\": true,\n \"aria-valuetext\": true,\n};\n\nexport function isAccessibilityAffectingElement(element: HTMLElement): boolean {\n const tagName = element.tagName.toLowerCase();\n const attributes = getAttributes(element);\n\n return (\n tagName in AccessibilityAffectingElements ||\n hasAccessibilityAttribute(attributes)\n );\n}\n\nexport function hasAccessibilityAttribute(\n attributes: HTMLElementAttributes,\n): boolean {\n for (let attrName of Object.keys(attributes)) {\n if (\n attrName in AccessibilityAttributes &&\n !(\n attrName === \"role\" &&\n (attributes[attrName] === \"none\" ||\n attributes[attrName] === \"presentation\")\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getAttributes(element: HTMLElement): HTMLElementAttributes {\n const names = element.getAttributeNames();\n const attributes: { [name: string]: string } = {};\n\n for (let name of names) {\n attributes[name] = element.getAttribute(name) || \"\";\n }\n\n return attributes;\n}\n\nexport function matchesSelector(\n element: HTMLElement,\n selector: string,\n): boolean {\n interface HTMLElementWithMatches extends HTMLElement {\n matchesSelector?: typeof HTMLElement.prototype.matches;\n msMatchesSelector?: typeof HTMLElement.prototype.matches;\n }\n\n const matches =\n element.matches ||\n (element as HTMLElementWithMatches).matchesSelector ||\n (element as HTMLElementWithMatches).msMatchesSelector ||\n element.webkitMatchesSelector;\n\n return matches && matches.call(element, selector);\n}\n\nexport function isDisplayNone(element: HTMLElement): boolean {\n const elementDocument = element.ownerDocument;\n const computedStyle = elementDocument.defaultView?.getComputedStyle(element);\n\n // offsetParent is null for elements with display:none, display:fixed and for <body>.\n if (\n element.offsetParent === null &&\n elementDocument.body !== element &&\n computedStyle?.position !== \"fixed\"\n ) {\n return true;\n }\n\n // For our purposes of looking for focusable elements, visibility:hidden has the same\n // effect as display:none.\n if (computedStyle?.visibility === \"hidden\") {\n return true;\n }\n\n // if an element has display: fixed, we need to check if it is also hidden with CSS,\n // or within a parent hidden with CSS\n if (computedStyle?.position === \"fixed\") {\n if (computedStyle.display === \"none\") {\n return true;\n }\n\n if (\n element.parentElement?.offsetParent === null &&\n elementDocument.body !== element.parentElement\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isElementVisible(element: HTMLElement): boolean {\n if (!element.ownerDocument || element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n if (isDisplayNone(element)) {\n return false;\n }\n\n const rect = element.ownerDocument.body.getBoundingClientRect();\n\n if (rect.width === 0 && rect.height === 0) {\n // This might happen, for example, if our <body> is in hidden <iframe>.\n return false;\n }\n\n return true;\n}\n\nexport function getStackTrace(): string[] {\n const oldStackTraceLimit = (Error as ErrorWithStack).stackTraceLimit;\n\n try {\n (Error as ErrorWithStack).stackTraceLimit = 1000;\n\n throw new Error();\n } catch (e) {\n (Error as ErrorWithStack).stackTraceLimit = oldStackTraceLimit;\n\n return (\n (e as Error).stack\n ?.split(\"\\n\")\n .slice(1)\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"at \")) || []\n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n NotificationUI,\n HTMLElementWithAbleDOMUIFlag,\n isAbleDOMUIElement,\n} from \"./ui/ui\";\nimport { isAccessibilityAffectingElement } from \"./utils\";\nimport { ValidationRule, ValidationNotification } from \"./rules/base\";\n\ninterface HTMLElementWithAbleDOM extends HTMLElement {\n __abledom?: {\n notifications?: Map<ValidationRule, NotificationUI>;\n };\n}\n\nexport class AbleDOM {\n private _win: Window;\n private _observer: MutationObserver;\n private _clearValidationTimeout: (() => void) | undefined;\n private _elementsWithNotifications: Set<HTMLElementWithAbleDOM> = new Set();\n private _changedElementIds: Set<string> = new Set();\n private _elementsDependingOnId: Map<string, Set<HTMLElement>> = new Map();\n private _dependantIdsByElement: Map<HTMLElement, Set<string>> = new Map();\n private _idByElement: Map<HTMLElement, string> = new Map();\n private _rules: ValidationRule[] = [];\n private _startFunc: (() => void) | undefined;\n private _isStarted = false;\n\n constructor(win: Window) {\n this._win = win;\n\n const _elementsToValidate: Set<HTMLElementWithAbleDOM> = new Set();\n const _elementsToRemove: Set<HTMLElementWithAbleDOM> = new Set();\n\n win.document.addEventListener(\"focusin\", this._onFocusIn, true);\n win.document.addEventListener(\"focusout\", this._onFocusOut, true);\n\n this._observer = new MutationObserver((mutations) => {\n for (let mutation of mutations) {\n if ((mutation.target as HTMLElementWithAbleDOMUIFlag).__abledomui) {\n continue;\n }\n\n const added = mutation.addedNodes;\n const removed = mutation.removedNodes;\n const attributeName = mutation.attributeName;\n\n if (attributeName === \"id\") {\n // A bunch of aria attributes reference elements by id, so, we are handling it as special case.\n this._onElementId(mutation.target as HTMLElementWithAbleDOM, false);\n\n continue;\n }\n\n // Adding children should trigger revalidation of the parents (it could,\n // for example, be a text that of a parent button).\n lookUp(mutation.target);\n\n for (let i = 0; i < added.length; i++) {\n findTargets(added[i], false);\n }\n\n for (let i = 0; i < removed.length; i++) {\n findTargets(removed[i], true);\n }\n }\n\n this._clearValidationTimeout?.();\n\n const _validationTimeout: number | undefined = win.setTimeout(() => {\n delete this._clearValidationTimeout;\n\n this._remove(_elementsToRemove);\n this._validate(_elementsToValidate);\n\n _elementsToRemove.clear();\n _elementsToValidate.clear();\n this._changedElementIds.clear();\n }, 200); // Defer the validation a bit.\n\n this._clearValidationTimeout = () => {\n win.clearTimeout(_validationTimeout);\n delete this._clearValidationTimeout;\n };\n });\n\n this._startFunc = () => {\n delete this._startFunc;\n\n this._observer.observe(win.document, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n // Initial validation.\n findTargets(win.document.body, false);\n this._validate(_elementsToValidate);\n _elementsToValidate.clear();\n };\n\n const addTarget = (node: Node, removed: boolean): void => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n\n const id = (node as HTMLElement).id;\n\n if (id) {\n this._onElementId(node as HTMLElement, removed);\n }\n\n if (removed) {\n _elementsToRemove.add(node as HTMLElementWithAbleDOM);\n _elementsToValidate.delete(node as HTMLElementWithAbleDOM);\n } else {\n _elementsToValidate.add(node as HTMLElementWithAbleDOM);\n _elementsToRemove.delete(node as HTMLElementWithAbleDOM);\n }\n };\n\n function lookUp(node: Node): void {\n for (let n: Node | null = node; n; n = n.parentNode) {\n addTarget(n, _elementsToRemove.has(node as HTMLElementWithAbleDOM));\n }\n }\n\n function findTargets(node: Node, removed: boolean): void {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n\n addTarget(node as HTMLElement, removed);\n\n const walker = win.document.createTreeWalker(\n node,\n NodeFilter.SHOW_ELEMENT,\n (node: Node): number => {\n addTarget(node, removed);\n return NodeFilter.FILTER_SKIP;\n },\n );\n\n if (walker) {\n while (walker.nextNode()) {\n /* Iterating for the sake of going through all elements in the subtree. */\n }\n }\n }\n }\n\n private _onElementId(element: HTMLElement, removed: boolean) {\n const elementId = element.getAttribute(\"id\");\n const oldElementId = this._idByElement.get(element);\n\n if (oldElementId) {\n this._changedElementIds.add(oldElementId);\n\n const elements = this._elementsDependingOnId.get(oldElementId);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(oldElementId);\n }\n }\n }\n\n if (elementId) {\n this._changedElementIds.add(elementId);\n\n let elements = this._elementsDependingOnId.get(elementId);\n\n if (removed) {\n this._idByElement.delete(element);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(elementId);\n }\n }\n } else {\n this._idByElement.set(element, elementId);\n\n if (!elements) {\n elements = new Set();\n this._elementsDependingOnId.set(elementId, elements);\n }\n\n elements.add(element);\n }\n } else {\n this._idByElement.delete(element);\n }\n }\n\n private _addNotification(\n rule: ValidationRule,\n notification: ValidationNotification,\n ) {\n const element = notification?.element as HTMLElementWithAbleDOM | undefined;\n\n if (!notification) {\n this._removeNotification(element || this._win.document.body, rule);\n return;\n }\n\n let notificationUI: NotificationUI | undefined;\n\n if (rule.anchored && element) {\n let abledomOnElement = element.__abledom;\n\n if (!abledomOnElement) {\n abledomOnElement = element.__abledom = {};\n }\n\n let notifications = abledomOnElement.notifications;\n\n if (!notifications) {\n notifications = abledomOnElement.notifications = new Map();\n }\n\n notificationUI = notifications.get(rule);\n\n if (!notificationUI) {\n notificationUI = new NotificationUI(this._win, rule);\n notifications.set(rule, notificationUI);\n }\n\n this._elementsWithNotifications.add(element);\n } else {\n notificationUI = new NotificationUI(this._win, rule);\n }\n\n notificationUI.update(notification);\n }\n\n private _removeNotification(\n element: HTMLElementWithAbleDOM,\n rule: ValidationRule,\n ) {\n if (!rule.anchored) {\n return;\n }\n\n const notifications = element.__abledom?.notifications;\n\n if (!notifications) {\n return;\n }\n\n const notification = notifications.get(rule);\n\n if (notification) {\n notification.dispose();\n notifications.delete(rule);\n }\n\n if (notifications.size === 0) {\n this._elementsWithNotifications.delete(element);\n delete element.__abledom;\n }\n }\n\n private _validate(elements: Set<HTMLElementWithAbleDOM>) {\n for (const id of this._changedElementIds) {\n const dependingOnId = this._elementsDependingOnId.get(id);\n\n if (dependingOnId) {\n for (const element of dependingOnId) {\n elements.add(element);\n }\n }\n }\n\n elements.forEach((element) => {\n if (\n isAccessibilityAffectingElement(element) ||\n element.__abledom?.notifications\n ) {\n const dependsOnIds = new Set<string>();\n\n for (const rule of this._rules) {\n if (!rule.validate || rule.accept?.(element) === false) {\n continue;\n }\n\n if (ValidationRule.checkExceptions(rule, element)) {\n continue;\n }\n\n const validationResult = rule.validate?.(element);\n\n if (validationResult?.notification) {\n this._addNotification(rule, validationResult.notification);\n\n const ids = validationResult.dependsOnIds;\n\n if (ids) {\n for (const id of ids) {\n dependsOnIds.add(id);\n }\n }\n } else if (element.__abledom?.notifications?.has(rule)) {\n this._removeNotification(element, rule);\n }\n }\n\n this._processElementDependingOnIds(\n element,\n dependsOnIds.size === 0 ? null : dependsOnIds,\n );\n }\n });\n }\n\n private _processElementDependingOnIds(\n element: HTMLElement,\n ids: Set<string> | null,\n ): void {\n let dependsOnIds = this._dependantIdsByElement.get(element);\n\n if (!ids && !dependsOnIds) {\n return;\n }\n\n if (!dependsOnIds) {\n dependsOnIds = new Set();\n }\n\n if (!ids) {\n ids = new Set();\n }\n\n for (const id of dependsOnIds) {\n if (!ids.has(id)) {\n const elements = this._elementsDependingOnId.get(id);\n\n if (elements) {\n elements.delete(element);\n\n if (elements.size === 0) {\n this._elementsDependingOnId.delete(id);\n }\n }\n }\n }\n\n for (const id of ids) {\n if (!dependsOnIds.has(id)) {\n dependsOnIds.add(id);\n\n let elements = this._elementsDependingOnId.get(id);\n\n if (!elements) {\n elements = new Set();\n this._elementsDependingOnId.set(id, elements);\n }\n\n elements.add(element);\n }\n }\n\n if (dependsOnIds.size === 0) {\n this._dependantIdsByElement.delete(element);\n } else {\n this._dependantIdsByElement.set(element, dependsOnIds);\n }\n }\n\n private _remove(elements: Set<HTMLElementWithAbleDOM>) {\n elements.forEach((element) => {\n const rules = [...(element.__abledom?.notifications?.keys() || [])];\n rules.forEach((rule) => this._removeNotification(element, rule));\n });\n }\n\n private _onFocusIn = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n\n if (target && isAbleDOMUIElement(target)) {\n return;\n }\n\n for (const rule of this._rules) {\n const focusNotification = rule.focused?.(event);\n\n if (focusNotification) {\n this._addNotification(rule, focusNotification);\n }\n }\n };\n\n private _onFocusOut = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n\n if (target && isAbleDOMUIElement(target)) {\n return;\n }\n\n for (const rule of this._rules) {\n const blurNotification = rule.blurred?.(event);\n\n if (blurNotification) {\n this._addNotification(rule, blurNotification);\n }\n }\n };\n\n private _notifyAsync = (\n rule: ValidationRule,\n notification: ValidationNotification,\n ): void => {\n this._addNotification(rule, notification);\n };\n\n addRule(rule: ValidationRule): void {\n this._rules.push(rule);\n }\n\n removeRule(rule: ValidationRule): void {\n const index = this._rules.indexOf(rule);\n\n if (index >= 0) {\n const rule = this._rules[index];\n this._rules.splice(index, 1);\n rule.stop?.();\n }\n }\n\n start(): void {\n if (this._isStarted) {\n return;\n }\n\n this._isStarted = true;\n\n for (const rule of this._rules) {\n ValidationRule.init(rule, this._win, this._notifyAsync);\n rule.start?.();\n }\n\n this._startFunc?.();\n }\n\n dispose() {\n this._win.document.addEventListener(\"focusin\", this._onFocusIn, true);\n this._win.document.addEventListener(\"focusout\", this._onFocusOut, true);\n\n this._remove(this._elementsWithNotifications);\n this._elementsWithNotifications.clear();\n\n this._dependantIdsByElement.clear();\n this._elementsDependingOnId.clear();\n this._idByElement.clear();\n\n this._clearValidationTimeout?.();\n\n for (const rule of this._rules) {\n rule.stop?.();\n ValidationRule.dispose(rule);\n }\n\n this._rules = [];\n\n if (this._startFunc) {\n delete this._startFunc;\n } else {\n this._observer.disconnect();\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { focusableElementSelector, matchesSelector } from \"../utils\";\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class AtomicRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"atomic\";\n anchored = true;\n\n accept(element: HTMLElement): boolean {\n return matchesSelector(element, focusableElementSelector);\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n const parentAtomic = document\n .evaluate(\n `ancestor::*[\n @role = 'button' or \n @role = 'checkbox' or \n @role = 'link' or \n @role = 'menuitem' or \n @role = 'menuitemcheckbox' or \n @role = 'menuitemradio' or \n @role = 'option' or \n @role = 'radio' or \n @role = 'switch' or \n @role = 'tab' or \n @role = 'treeitem' or\n self::a or\n self::button or\n self::input or\n self::option or\n self::textarea \n ][1]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n )\n .snapshotItem(0);\n\n if (parentAtomic) {\n return {\n notification: {\n id: \"focusable-in-atomic\",\n message: \"Focusable element inside atomic focusable.\",\n element,\n rel: parentAtomic,\n },\n };\n }\n\n return null;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n matchesSelector,\n focusableElementSelector,\n isElementVisible,\n} from \"../utils\";\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nconst _keyboardEditableInputTypes = new Set([\n \"text\",\n \"password\",\n \"email\",\n \"search\",\n \"tel\",\n \"url\",\n \"number\",\n \"date\",\n \"month\",\n \"week\",\n \"time\",\n \"datetime-local\",\n]);\n\nexport class FocusableElementLabelRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"FocusableElementLabelRule\";\n anchored = true;\n\n private _isAriaHidden(element: HTMLElement): boolean {\n return document.evaluate(\n `ancestor-or-self::*[@aria-hidden = 'true' or @hidden]`,\n element,\n null,\n XPathResult.BOOLEAN_TYPE,\n null,\n ).booleanValue;\n }\n\n private _hasLabel(element: HTMLElement): boolean {\n const labels = (element as HTMLInputElement).labels;\n\n if (labels && labels.length > 0) {\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (label.innerText.trim()) {\n return true;\n }\n }\n }\n\n if (element.tagName === \"IMG\") {\n if ((element as HTMLImageElement).alt.trim()) {\n return true;\n }\n }\n\n if (element.textContent?.trim()) {\n return true;\n }\n\n const labelNodes = document.evaluate(\n `(\n .//@aria-label | \n .//text() | \n .//@title | \n .//img/@alt | \n .//input[@type = 'image']/@alt | \n .//input[@type != 'hidden'][@type = 'submit' or @type = 'reset' or @type = 'button']/@value\n )[not(ancestor-or-self::*[@aria-hidden = 'true' or @hidden])]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n );\n\n for (let i = 0; i < labelNodes.snapshotLength; i++) {\n const val = labelNodes.snapshotItem(i)?.nodeValue?.trim();\n\n if (val) {\n return true;\n }\n }\n\n return false;\n }\n\n accept(element: HTMLElement): boolean {\n return matchesSelector(element, focusableElementSelector);\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n if (element.tagName === \"INPUT\") {\n const type = (element as HTMLInputElement).type;\n\n if (type === \"hidden\") {\n return null;\n }\n\n if (_keyboardEditableInputTypes.has(type)) {\n return null;\n }\n\n if (type === \"image\") {\n if ((element as HTMLInputElement).alt.trim()) {\n return null;\n }\n }\n\n if (type === \"submit\" || type === \"reset\" || type === \"button\") {\n if ((element as HTMLInputElement).value.trim()) {\n return null;\n }\n }\n }\n\n if (this._isAriaHidden(element)) {\n return null;\n }\n\n if (this._hasLabel(element)) {\n return null;\n }\n\n const labelledByNodes = document.evaluate(\n `.//@aria-labelledby[not(ancestor-or-self::*[@aria-hidden = 'true' or @hidden])]`,\n element,\n null,\n XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,\n null,\n );\n\n const labelledByValues: string[] = [];\n\n for (let i = 0; i < labelledByNodes.snapshotLength; i++) {\n const val = (labelledByNodes.snapshotItem(i) as Attr)?.value\n ?.trim()\n .split(\" \");\n\n if (val?.length) {\n labelledByValues.push(...val);\n }\n }\n\n for (const id of labelledByValues) {\n const labelElement = document.getElementById(id);\n\n if (labelElement && this._hasLabel(labelElement)) {\n return {\n dependsOnIds: new Set(labelledByValues),\n };\n }\n }\n\n return {\n notification: isElementVisible(element)\n ? {\n id: \"focusable-element-label\",\n message: \"Focusable element must have a non-empty text label.\",\n element,\n help: \"https://www.w3.org/WAI/tutorials/forms/labels/\",\n }\n : undefined,\n dependsOnIds: new Set(labelledByValues),\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class ExistingIdRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"existing-id\";\n anchored = true;\n\n accept(element: HTMLElement): boolean {\n return (\n element.hasAttribute(\"aria-labelledby\") ||\n element.hasAttribute(\"aria-describedby\") ||\n (element.tagName === \"LABEL\" && !!(element as HTMLLabelElement).htmlFor)\n );\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n const ids = [\n ...(element.getAttribute(\"aria-labelledby\")?.split(\" \") || []),\n ...(element.getAttribute(\"aria-describedby\")?.split(\" \") || []),\n ...(element.tagName === \"LABEL\"\n ? [(element as HTMLLabelElement).htmlFor]\n : []),\n ].filter((id) => !!id);\n\n if (ids.length === 0) {\n return null;\n }\n\n for (const id of ids) {\n if (document.getElementById(id)) {\n return {\n dependsOnIds: new Set(ids),\n };\n }\n }\n\n return {\n notification: {\n id: \"missing-id\",\n message: `Elements with referenced ids do not extist.`,\n element,\n },\n dependsOnIds: new Set(ids),\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { isElementVisible, getStackTrace } from \"../utils\";\nimport { BlurNotification, ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class FocusLostRule extends ValidationRule<BlurNotification> {\n type = ValidationRuleType.Error;\n name = \"focus-lost\";\n anchored = false;\n\n private _focusLostTimeout = 2000; // For now reporting lost focus after 2 seconds of it being lost.\n private _clearScheduledFocusLost: (() => void) | undefined;\n private _focusedElement: HTMLElement | undefined;\n private _focusedElementPosition: string[] | undefined;\n private _lastFocusStack: string[] | undefined;\n private _lastBlurStack: string[] | undefined;\n private _mouseEventTimer: number | undefined;\n private _releaseMouseEvent: (() => void) | undefined;\n\n private _serializeElementPosition(element: HTMLElement): string[] {\n const position: string[] = [];\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return position;\n }\n\n for (\n let el: HTMLElement | null = parentElement;\n el;\n el = el.parentElement\n ) {\n const tagName = el.tagName.toLowerCase();\n position.push(tagName);\n }\n\n return position;\n }\n\n focused(event: FocusEvent): null {\n const target = event.target as HTMLElement | null;\n\n this._clearScheduledFocusLost?.();\n\n if (target) {\n this._lastFocusStack = getStackTrace();\n\n this._focusedElement = target;\n this._focusedElementPosition = this._serializeElementPosition(target);\n }\n\n return null;\n }\n\n blurred(event: FocusEvent): null {\n const target = event.target as HTMLElement | null;\n const win = this.window;\n\n this._clearScheduledFocusLost?.();\n\n if (!target || !win || event.relatedTarget || this._mouseEventTimer) {\n return null;\n }\n\n const targetPosition =\n this._focusedElement === target\n ? this._focusedElementPosition\n : undefined;\n\n this._lastBlurStack = getStackTrace();\n\n // Make sure to not hold the reference once the element is not focused anymore.\n this._focusedElement = undefined;\n this._focusedElementPosition = undefined;\n\n const focusLostTimer = win.setTimeout(() => {\n delete this._clearScheduledFocusLost;\n\n if (\n win.document.body &&\n (!win.document.activeElement ||\n win.document.activeElement === win.document.body) &&\n (!win.document.body.contains(target) || !isElementVisible(target))\n ) {\n this.notify({\n element: target,\n id: \"focus-lost\",\n message: \"Focus lost.\",\n stack: this._lastBlurStack,\n relStack: this._lastFocusStack,\n position: targetPosition || [],\n });\n }\n }, this._focusLostTimeout);\n\n this._clearScheduledFocusLost = () => {\n delete this._clearScheduledFocusLost;\n win.clearTimeout(focusLostTimer);\n };\n\n return null;\n }\n\n start(): void {\n const win = this.window;\n\n if (!win) {\n return;\n }\n\n const onMouseEvent = () => {\n if (!this._mouseEventTimer) {\n this._mouseEventTimer = win.setTimeout(() => {\n this._mouseEventTimer = undefined;\n }, 0);\n }\n };\n\n win.addEventListener(\"mousedown\", onMouseEvent, true);\n win.addEventListener(\"mouseup\", onMouseEvent, true);\n win.addEventListener(\"mousemove\", onMouseEvent, true);\n\n this._releaseMouseEvent = () => {\n delete this._releaseMouseEvent;\n\n if (this._mouseEventTimer) {\n win.clearTimeout(this._mouseEventTimer);\n delete this._mouseEventTimer;\n }\n\n win.removeEventListener(\"mousedown\", onMouseEvent, true);\n win.removeEventListener(\"mouseup\", onMouseEvent, true);\n win.removeEventListener(\"mousemove\", onMouseEvent, true);\n };\n }\n\n stop(): void {\n this._releaseMouseEvent?.();\n this._clearScheduledFocusLost?.();\n this._focusedElement = undefined;\n this._focusedElementPosition = undefined;\n this._lastFocusStack = undefined;\n this._lastBlurStack = undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { isElementVisible, getStackTrace } from \"../utils\";\nimport { ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class BadFocusRule extends ValidationRule {\n type = ValidationRuleType.Error;\n name = \"bad-focus\";\n anchored = false;\n\n private _lastFocusStack: string[] | undefined;\n private _lastBlurStack: string[] | undefined;\n private _clearCheckTimer: (() => void) | undefined;\n\n focused(): null {\n this._lastFocusStack = getStackTrace();\n return null;\n }\n\n blurred(): null {\n const win = this.window;\n\n if (!win) {\n return null;\n }\n\n this._lastBlurStack = getStackTrace();\n\n this._clearCheckTimer?.();\n\n const checkTimer = win.setTimeout(() => {\n delete this._clearCheckTimer;\n\n if (\n document.activeElement &&\n !isElementVisible(document.activeElement as HTMLElement)\n ) {\n this.notify({\n id: \"bad-focus\",\n message: \"Focused stolen by invisible element.\",\n element: document.activeElement as HTMLElement,\n stack: this._lastBlurStack,\n relStack: this._lastFocusStack,\n });\n }\n }, 100);\n\n this._clearCheckTimer = () => {\n delete this._clearCheckTimer;\n win.clearTimeout(checkTimer);\n };\n\n return null;\n }\n\n stop(): void {\n this._clearCheckTimer?.();\n this._clearCheckTimer = undefined;\n this._lastFocusStack = undefined;\n this._lastBlurStack = undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { ValidationRule, ValidationResult, ValidationRuleType } from \"./base\";\n\nexport class FindElementRule extends ValidationRule {\n type = ValidationRuleType.Warning;\n name = \"find-element\";\n anchored = true;\n\n private _conditions: { [name: string]: (element: HTMLElement) => boolean } =\n {};\n\n addCondition(\n name: string,\n condition: (element: HTMLElement) => boolean,\n ): void {\n this._conditions[name] = condition;\n }\n\n removeCondition(name: string): void {\n delete this._conditions[name];\n }\n\n validate(element: HTMLElement): ValidationResult | null {\n for (const name of Object.keys(this._conditions)) {\n if (this._conditions[name](element)) {\n return {\n notification: {\n id: \"find-element\",\n message: `Element found: ${name}.`,\n element,\n },\n };\n }\n }\n\n return null;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { ValidationRule, ValidationRuleType } from \"./base\";\n\nexport class CustomNotifyRule extends ValidationRule {\n type = ValidationRuleType.Info;\n name = \"custom-notify\";\n anchored = false;\n\n customNotify(message: string, element?: HTMLElement): void {\n this.notify({\n id: \"custom-notify\",\n message,\n element,\n });\n }\n}\n"],"mappings":"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","names":["ValidationRuleType","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","buildSVG","_a","node","rule"]}
package/dist/index.d.cts CHANGED
@@ -12,7 +12,7 @@ interface ValidationNotification {
12
12
  message: string;
13
13
  element?: HTMLElement;
14
14
  rel?: Node;
15
- link?: string;
15
+ help?: string;
16
16
  stack?: string[];
17
17
  relStack?: string[];
18
18
  }