accented 0.0.0-20250424114613 → 0.0.0-20250701143712
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/README.md +44 -193
- package/dist/accented.d.ts +7 -7
- package/dist/accented.d.ts.map +1 -1
- package/dist/accented.js +30 -27
- package/dist/accented.js.map +1 -1
- package/dist/common/tokens.d.ts +2 -0
- package/dist/common/tokens.d.ts.map +1 -0
- package/dist/common/tokens.js +2 -0
- package/dist/common/tokens.js.map +1 -0
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/dom-updater.d.ts +1 -1
- package/dist/dom-updater.d.ts.map +1 -1
- package/dist/dom-updater.js +14 -13
- package/dist/dom-updater.js.map +1 -1
- package/dist/elements/accented-dialog.d.ts +2 -3
- package/dist/elements/accented-dialog.d.ts.map +1 -1
- package/dist/elements/accented-dialog.js +14 -8
- package/dist/elements/accented-dialog.js.map +1 -1
- package/dist/elements/accented-trigger.d.ts +3 -4
- package/dist/elements/accented-trigger.d.ts.map +1 -1
- package/dist/elements/accented-trigger.js +10 -10
- package/dist/elements/accented-trigger.js.map +1 -1
- package/dist/fullscreen-listener.d.ts +1 -1
- package/dist/fullscreen-listener.d.ts.map +1 -1
- package/dist/fullscreen-listener.js +3 -4
- package/dist/fullscreen-listener.js.map +1 -1
- package/dist/intersection-observer.d.ts +1 -1
- package/dist/intersection-observer.d.ts.map +1 -1
- package/dist/intersection-observer.js +12 -6
- package/dist/intersection-observer.js.map +1 -1
- package/dist/log-and-rethrow.d.ts +1 -1
- package/dist/log-and-rethrow.d.ts.map +1 -1
- package/dist/log-and-rethrow.js +2 -3
- package/dist/log-and-rethrow.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -2
- package/dist/logger.js.map +1 -1
- package/dist/register-elements.d.ts +1 -1
- package/dist/register-elements.d.ts.map +1 -1
- package/dist/register-elements.js +6 -7
- package/dist/register-elements.js.map +1 -1
- package/dist/resize-listener.d.ts +1 -1
- package/dist/resize-listener.d.ts.map +1 -1
- package/dist/resize-listener.js +3 -4
- package/dist/resize-listener.js.map +1 -1
- package/dist/scanner.d.ts +2 -2
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +36 -36
- package/dist/scanner.js.map +1 -1
- package/dist/scroll-listeners.d.ts +1 -1
- package/dist/scroll-listeners.d.ts.map +1 -1
- package/dist/scroll-listeners.js +3 -4
- package/dist/scroll-listeners.js.map +1 -1
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -5
- package/dist/state.js.map +1 -1
- package/dist/task-queue.d.ts +2 -2
- package/dist/task-queue.d.ts.map +1 -1
- package/dist/task-queue.js +1 -1
- package/dist/task-queue.js.map +1 -1
- package/dist/types.d.ts +102 -46
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/are-elements-with-issues-equal.d.ts +2 -2
- package/dist/utils/are-elements-with-issues-equal.d.ts.map +1 -1
- package/dist/utils/are-elements-with-issues-equal.js +3 -3
- package/dist/utils/are-elements-with-issues-equal.js.map +1 -1
- package/dist/utils/are-issue-sets-equal.d.ts +2 -2
- package/dist/utils/are-issue-sets-equal.d.ts.map +1 -1
- package/dist/utils/are-issue-sets-equal.js +3 -3
- package/dist/utils/are-issue-sets-equal.js.map +1 -1
- package/dist/utils/containing-blocks.d.ts.map +1 -1
- package/dist/utils/containing-blocks.js +1 -1
- package/dist/utils/containing-blocks.js.map +1 -1
- package/dist/utils/contains.d.ts +1 -1
- package/dist/utils/contains.d.ts.map +1 -1
- package/dist/utils/contains.js +1 -1
- package/dist/utils/contains.js.map +1 -1
- package/dist/utils/deduplicate-nodes.js +0 -1
- package/dist/utils/deduplicate-nodes.js.map +1 -1
- package/dist/utils/deep-merge.d.ts +1 -1
- package/dist/utils/deep-merge.d.ts.map +1 -1
- package/dist/utils/deep-merge.js +8 -5
- package/dist/utils/deep-merge.js.map +1 -1
- package/dist/utils/dom-helpers.d.ts.map +1 -1
- package/dist/utils/dom-helpers.js +4 -2
- package/dist/utils/dom-helpers.js.map +1 -1
- package/dist/utils/ensure-non-empty.d.ts +1 -1
- package/dist/utils/ensure-non-empty.d.ts.map +1 -1
- package/dist/utils/ensure-non-empty.js +2 -2
- package/dist/utils/ensure-non-empty.js.map +1 -1
- package/dist/utils/get-element-html.d.ts +1 -1
- package/dist/utils/get-element-html.d.ts.map +1 -1
- package/dist/utils/get-element-html.js +4 -2
- package/dist/utils/get-element-html.js.map +1 -1
- package/dist/utils/get-element-position.d.ts +2 -2
- package/dist/utils/get-element-position.d.ts.map +1 -1
- package/dist/utils/get-element-position.js +21 -25
- package/dist/utils/get-element-position.js.map +1 -1
- package/dist/utils/get-parent.d.ts +1 -1
- package/dist/utils/get-parent.d.ts.map +1 -1
- package/dist/utils/get-parent.js +1 -1
- package/dist/utils/get-parent.js.map +1 -1
- package/dist/utils/get-scan-context.d.ts +2 -2
- package/dist/utils/get-scan-context.d.ts.map +1 -1
- package/dist/utils/get-scan-context.js +9 -9
- package/dist/utils/get-scan-context.js.map +1 -1
- package/dist/utils/get-scrollable-ancestors.d.ts +1 -1
- package/dist/utils/get-scrollable-ancestors.d.ts.map +1 -1
- package/dist/utils/get-scrollable-ancestors.js +5 -5
- package/dist/utils/get-scrollable-ancestors.js.map +1 -1
- package/dist/utils/is-node-in-scan-context.d.ts +2 -2
- package/dist/utils/is-node-in-scan-context.d.ts.map +1 -1
- package/dist/utils/is-node-in-scan-context.js +5 -5
- package/dist/utils/is-node-in-scan-context.js.map +1 -1
- package/dist/utils/is-non-empty.d.ts +2 -0
- package/dist/utils/is-non-empty.d.ts.map +1 -0
- package/dist/utils/is-non-empty.js +4 -0
- package/dist/utils/is-non-empty.js.map +1 -0
- package/dist/utils/normalize-context.d.ts +2 -2
- package/dist/utils/normalize-context.d.ts.map +1 -1
- package/dist/utils/normalize-context.js +10 -8
- package/dist/utils/normalize-context.js.map +1 -1
- package/dist/utils/recalculate-positions.d.ts +1 -1
- package/dist/utils/recalculate-positions.d.ts.map +1 -1
- package/dist/utils/recalculate-positions.js +5 -5
- package/dist/utils/recalculate-positions.js.map +1 -1
- package/dist/utils/recalculate-scrollable-ancestors.d.ts +1 -1
- package/dist/utils/recalculate-scrollable-ancestors.d.ts.map +1 -1
- package/dist/utils/recalculate-scrollable-ancestors.js +4 -4
- package/dist/utils/recalculate-scrollable-ancestors.js.map +1 -1
- package/dist/utils/shadow-dom-aware-mutation-observer.d.ts +1 -1
- package/dist/utils/shadow-dom-aware-mutation-observer.d.ts.map +1 -1
- package/dist/utils/shadow-dom-aware-mutation-observer.js +19 -22
- package/dist/utils/shadow-dom-aware-mutation-observer.js.map +1 -1
- package/dist/utils/supports-anchor-positioning.d.ts +1 -1
- package/dist/utils/supports-anchor-positioning.d.ts.map +1 -1
- package/dist/utils/supports-anchor-positioning.js +1 -1
- package/dist/utils/supports-anchor-positioning.js.map +1 -1
- package/dist/utils/transform-violations.d.ts +2 -2
- package/dist/utils/transform-violations.d.ts.map +1 -1
- package/dist/utils/transform-violations.js +9 -9
- package/dist/utils/transform-violations.js.map +1 -1
- package/dist/utils/update-elements-with-issues.d.ts +3 -3
- package/dist/utils/update-elements-with-issues.d.ts.map +1 -1
- package/dist/utils/update-elements-with-issues.js +34 -29
- package/dist/utils/update-elements-with-issues.js.map +1 -1
- package/dist/validate-options.d.ts +2 -2
- package/dist/validate-options.d.ts.map +1 -1
- package/dist/validate-options.js +24 -23
- package/dist/validate-options.js.map +1 -1
- package/package.json +7 -4
- package/src/accented.test.ts +2 -2
- package/src/accented.ts +39 -32
- package/src/common/tokens.ts +1 -0
- package/src/constants.ts +1 -1
- package/src/dom-updater.ts +26 -19
- package/src/elements/accented-dialog.ts +69 -43
- package/src/elements/accented-trigger.ts +54 -43
- package/src/fullscreen-listener.ts +15 -11
- package/src/intersection-observer.ts +27 -16
- package/src/log-and-rethrow.ts +2 -3
- package/src/logger.ts +8 -6
- package/src/register-elements.ts +7 -7
- package/src/resize-listener.ts +15 -11
- package/src/scanner.ts +66 -50
- package/src/scroll-listeners.ts +27 -19
- package/src/state.ts +24 -21
- package/src/task-queue.test.ts +5 -4
- package/src/task-queue.ts +2 -2
- package/src/types.ts +151 -95
- package/src/utils/are-elements-with-issues-equal.ts +7 -5
- package/src/utils/are-issue-sets-equal.test.ts +10 -6
- package/src/utils/are-issue-sets-equal.ts +8 -6
- package/src/utils/containing-blocks.ts +6 -3
- package/src/utils/contains.test.ts +2 -2
- package/src/utils/contains.ts +1 -1
- package/src/utils/deduplicate-nodes.ts +1 -1
- package/src/utils/deep-merge.test.ts +8 -1
- package/src/utils/deep-merge.ts +14 -8
- package/src/utils/dom-helpers.ts +6 -2
- package/src/utils/ensure-non-empty.ts +2 -2
- package/src/utils/get-element-html.ts +4 -2
- package/src/utils/get-element-position.ts +37 -24
- package/src/utils/get-parent.ts +1 -1
- package/src/utils/get-scan-context.test.ts +14 -8
- package/src/utils/get-scan-context.ts +12 -15
- package/src/utils/get-scrollable-ancestors.ts +8 -5
- package/src/utils/is-node-in-scan-context.test.ts +3 -3
- package/src/utils/is-node-in-scan-context.ts +6 -6
- package/src/utils/is-non-empty.ts +3 -0
- package/src/utils/normalize-context.test.ts +9 -9
- package/src/utils/normalize-context.ts +17 -10
- package/src/utils/recalculate-positions.ts +5 -5
- package/src/utils/recalculate-scrollable-ancestors.ts +4 -4
- package/src/utils/shadow-dom-aware-mutation-observer.ts +21 -24
- package/src/utils/supports-anchor-positioning.ts +3 -3
- package/src/utils/transform-violations.test.ts +22 -20
- package/src/utils/transform-violations.ts +14 -10
- package/src/utils/update-elements-with-issues.test.ts +49 -49
- package/src/utils/update-elements-with-issues.ts +96 -71
- package/src/validate-options.ts +91 -38
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-dom-aware-mutation-observer.js","sourceRoot":"","sources":["../../src/utils/shadow-dom-aware-mutation-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"shadow-dom-aware-mutation-observer.js","sourceRoot":"","sources":["../../src/utils/shadow-dom-aware-mutation-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,oCAAoC,CAAC,IAAY,EAAE,QAA0B;IAC3F,MAAM,8BAA+B,SAAQ,gBAAgB;QAC3D,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAEzB,QAAQ,CAAmC;QAE3C,YAAY,QAA0B;YACpC,KAAK,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;gBAC5B,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBAEzF,MAAM,WAAW,GAAG,kBAAkB;qBACnC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;qBAC/C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAEjF,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAEtC,MAAM,eAAe,GAAG,kBAAkB;qBACvC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;qBACjD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAEjF,wEAAwE;gBACxE,6CAA6C;gBAC7C,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBAEzC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC;QAEQ,OAAO,CAAC,MAAY,EAAE,OAA8B;YAC3D,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC1B,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;QAEQ,UAAU;YACjB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC;QAED,mBAAmB,GAAG,CAAC,QAAsD,EAAE,EAAE;YAC/E,MAAM,WAAW,GAAG,QAAQ;iBACzB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;iBACxD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;iBACvC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAExC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAClC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,kBAAkB,GAAG,CAAC,QAAsD,EAAE,EAAE;YAC9E,MAAM,WAAW,GAAG,QAAQ;iBACzB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;iBACxD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;iBACvC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAExC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;KACH;IAED,OAAO,IAAI,8BAA8B,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type WindowWithCSS = Window & {
|
|
2
2
|
CSS: typeof CSS;
|
|
3
3
|
};
|
|
4
|
-
export
|
|
4
|
+
export declare function supportsAnchorPositioning(win: WindowWithCSS): boolean;
|
|
5
5
|
export {};
|
|
6
6
|
//# sourceMappingURL=supports-anchor-positioning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supports-anchor-positioning.d.ts","sourceRoot":"","sources":["../../src/utils/supports-anchor-positioning.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,MAAM,GAAG;IAC5B,GAAG,EAAE,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"supports-anchor-positioning.d.ts","sourceRoot":"","sources":["../../src/utils/supports-anchor-positioning.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,MAAM,GAAG;IAC5B,GAAG,EAAE,OAAO,GAAG,CAAC;CACjB,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,aAAa,WAE3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supports-anchor-positioning.js","sourceRoot":"","sources":["../../src/utils/supports-anchor-positioning.ts"],"names":[],"mappings":"AAIA,MAAM,
|
|
1
|
+
{"version":3,"file":"supports-anchor-positioning.js","sourceRoot":"","sources":["../../src/utils/supports-anchor-positioning.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CAAC,GAAkB;IAC1D,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AxeResults } from 'axe-core';
|
|
2
|
-
import type { ElementWithIssues } from '../types';
|
|
3
|
-
export
|
|
2
|
+
import type { ElementWithIssues } from '../types.ts';
|
|
3
|
+
export declare function transformViolations(violations: typeof AxeResults.violations, name: string): ElementWithIssues[];
|
|
4
4
|
//# sourceMappingURL=transform-violations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-violations.d.ts","sourceRoot":"","sources":["../../src/utils/transform-violations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"transform-violations.d.ts","sourceRoot":"","sources":["../../src/utils/transform-violations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAS,MAAM,aAAa,CAAC;AA0B5D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,OAAO,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,uBA8CzF"}
|
|
@@ -7,17 +7,17 @@ const violationsAffectedByAccentedTriggers = [
|
|
|
7
7
|
'label-content-name-mismatch',
|
|
8
8
|
'list',
|
|
9
9
|
'nested-interactive',
|
|
10
|
-
'scrollable-region-focusable' // The Accented trigger might make the content grow such that scrolling is required.
|
|
10
|
+
'scrollable-region-focusable', // The Accented trigger might make the content grow such that scrolling is required.
|
|
11
11
|
];
|
|
12
12
|
function maybeCausedByAccented(violationId, element, name) {
|
|
13
|
-
return violationsAffectedByAccentedTriggers.includes(violationId)
|
|
14
|
-
|
|
13
|
+
return (violationsAffectedByAccentedTriggers.includes(violationId) &&
|
|
14
|
+
Boolean(element.querySelector(`${name}-trigger`)));
|
|
15
15
|
}
|
|
16
16
|
function impactCompare(a, b) {
|
|
17
17
|
const impactOrder = [null, 'minor', 'moderate', 'serious', 'critical'];
|
|
18
18
|
return impactOrder.indexOf(a) - impactOrder.indexOf(b);
|
|
19
19
|
}
|
|
20
|
-
export
|
|
20
|
+
export function transformViolations(violations, name) {
|
|
21
21
|
const elementsWithIssues = [];
|
|
22
22
|
for (const violation of violations) {
|
|
23
23
|
for (const node of violation.nodes) {
|
|
@@ -35,18 +35,18 @@ export default function transformViolations(violations, name) {
|
|
|
35
35
|
title: violation.help,
|
|
36
36
|
description: node.failureSummary ?? violation.description,
|
|
37
37
|
url: violation.helpUrl,
|
|
38
|
-
impact: violation.impact ?? null
|
|
38
|
+
impact: violation.impact ?? null,
|
|
39
39
|
};
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
40
|
+
const existingElement = elementsWithIssues.find((elementWithIssues) => elementWithIssues.element === element);
|
|
41
|
+
if (existingElement === undefined) {
|
|
42
42
|
elementsWithIssues.push({
|
|
43
43
|
element,
|
|
44
44
|
rootNode: element.getRootNode(),
|
|
45
|
-
issues: [issue]
|
|
45
|
+
issues: [issue],
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
|
-
|
|
49
|
+
existingElement.issues.push(issue);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-violations.js","sourceRoot":"","sources":["../../src/utils/transform-violations.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,2FAA2F;AAC3F,MAAM,oCAAoC,GAAG;IAC3C,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,6BAA6B;IAC7B,MAAM;IACN,oBAAoB;IACpB,6BAA6B,
|
|
1
|
+
{"version":3,"file":"transform-violations.js","sourceRoot":"","sources":["../../src/utils/transform-violations.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,2FAA2F;AAC3F,MAAM,oCAAoC,GAAG;IAC3C,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,6BAA6B;IAC7B,MAAM;IACN,oBAAoB;IACpB,6BAA6B,EAAE,oFAAoF;CACpH,CAAC;AAEF,SAAS,qBAAqB,CAAC,WAAmB,EAAE,OAAoB,EAAE,IAAY;IACpF,OAAO,CACL,oCAAoC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,CAAc,EAAE,CAAc;IACnD,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAwC,EAAE,IAAY;IACxF,MAAM,kBAAkB,GAA6B,EAAE,CAAC;IAExD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAEjC,4EAA4E;YAC5E,8EAA8E;YAC9E,2CAA2C;YAC3C,mGAAmG;YACnG,yEAAyE;YACzE,sHAAsH;YACtH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAErC,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBAClF,MAAM,KAAK,GAAU;oBACnB,EAAE,EAAE,SAAS,CAAC,EAAE;oBAChB,KAAK,EAAE,SAAS,CAAC,IAAI;oBACrB,WAAW,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,WAAW;oBACzD,GAAG,EAAE,SAAS,CAAC,OAAO;oBACtB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;iBACjC,CAAC;gBACF,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAC7C,CAAC,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,KAAK,OAAO,CAC7D,CAAC;gBACF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;oBAClC,kBAAkB,CAAC,IAAI,CAAC;wBACtB,OAAO;wBACP,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE;wBAC/B,MAAM,EAAE,CAAC,KAAK,CAAC;qBAChB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;QACnD,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { AxeResults } from 'axe-core';
|
|
2
1
|
import type { Signal } from '@preact/signals-core';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
2
|
+
import type { AxeResults } from 'axe-core';
|
|
3
|
+
import type { ExtendedElementWithIssues, ScanContext } from '../types.ts';
|
|
4
|
+
export declare function updateElementsWithIssues({ extendedElementsWithIssues, scanContext, violations, win, name, }: {
|
|
5
5
|
extendedElementsWithIssues: Signal<Array<ExtendedElementWithIssues>>;
|
|
6
6
|
scanContext: ScanContext;
|
|
7
7
|
violations: typeof AxeResults.violations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-elements-with-issues.d.ts","sourceRoot":"","sources":["../../src/utils/update-elements-with-issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"update-elements-with-issues.d.ts","sourceRoot":"","sources":["../../src/utils/update-elements-with-issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA6B1E,wBAAgB,wBAAwB,CAAC,EACvC,0BAA0B,EAC1B,WAAW,EACX,UAAU,EACV,GAAG,EACH,IAAI,GACL,EAAE;IACD,0BAA0B,EAAE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACrE,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC;IACzC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,OAAO,GAAG,CAAA;KAAE,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd,QAiGA"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { batch, signal } from '@preact/signals-core';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import areIssueSetsEqual from './are-issue-sets-equal.js';
|
|
5
|
-
import isNodeInScanContext from './is-node-in-scan-context.js';
|
|
6
|
-
import getElementPosition from './get-element-position.js';
|
|
7
|
-
import getScrollableAncestors from './get-scrollable-ancestors.js';
|
|
8
|
-
import supportsAnchorPositioning from './supports-anchor-positioning.js';
|
|
2
|
+
import { areElementsWithIssuesEqual } from './are-elements-with-issues-equal.js';
|
|
3
|
+
import { areIssueSetsEqual } from './are-issue-sets-equal.js';
|
|
9
4
|
import { isSvgElement } from './dom-helpers.js';
|
|
10
|
-
import
|
|
5
|
+
import { getElementPosition } from './get-element-position.js';
|
|
6
|
+
import { getParent } from './get-parent.js';
|
|
7
|
+
import { getScrollableAncestors } from './get-scrollable-ancestors.js';
|
|
8
|
+
import { isNodeInScanContext } from './is-node-in-scan-context.js';
|
|
9
|
+
import { supportsAnchorPositioning } from './supports-anchor-positioning.js';
|
|
10
|
+
import { transformViolations } from './transform-violations.js';
|
|
11
11
|
function shouldSkipRender(element) {
|
|
12
12
|
// Skip rendering if the element is inside an SVG:
|
|
13
13
|
// https://github.com/pomerantsev/accented/issues/62
|
|
@@ -22,39 +22,42 @@ function shouldSkipRender(element) {
|
|
|
22
22
|
return isInsideSvg || isInsideHead;
|
|
23
23
|
}
|
|
24
24
|
let count = 0;
|
|
25
|
-
export
|
|
25
|
+
export function updateElementsWithIssues({ extendedElementsWithIssues, scanContext, violations, win, name, }) {
|
|
26
26
|
const updatedElementsWithIssues = transformViolations(violations, name);
|
|
27
27
|
batch(() => {
|
|
28
28
|
for (const updatedElementWithIssues of updatedElementsWithIssues) {
|
|
29
|
-
const existingElementIndex = extendedElementsWithIssues.value.findIndex(extendedElementWithIssues => areElementsWithIssuesEqual(extendedElementWithIssues, updatedElementWithIssues));
|
|
30
|
-
if (existingElementIndex > -1 &&
|
|
31
|
-
extendedElementsWithIssues.value[existingElementIndex]
|
|
29
|
+
const existingElementIndex = extendedElementsWithIssues.value.findIndex((extendedElementWithIssues) => areElementsWithIssuesEqual(extendedElementWithIssues, updatedElementWithIssues));
|
|
30
|
+
if (existingElementIndex > -1 &&
|
|
31
|
+
extendedElementsWithIssues.value[existingElementIndex] &&
|
|
32
|
+
!areIssueSetsEqual(extendedElementsWithIssues.value[existingElementIndex].issues.value, updatedElementWithIssues.issues)) {
|
|
33
|
+
extendedElementsWithIssues.value[existingElementIndex].issues.value =
|
|
34
|
+
updatedElementWithIssues.issues;
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
|
-
const addedElementsWithIssues = updatedElementsWithIssues.filter(updatedElementWithIssues => {
|
|
35
|
-
return !extendedElementsWithIssues.value.some(extendedElementWithIssues => areElementsWithIssuesEqual(extendedElementWithIssues, updatedElementWithIssues));
|
|
37
|
+
const addedElementsWithIssues = updatedElementsWithIssues.filter((updatedElementWithIssues) => {
|
|
38
|
+
return !extendedElementsWithIssues.value.some((extendedElementWithIssues) => areElementsWithIssuesEqual(extendedElementWithIssues, updatedElementWithIssues));
|
|
36
39
|
});
|
|
37
40
|
// Only consider an element to be removed in two cases:
|
|
38
41
|
// 1. It has been removed from the DOM.
|
|
39
42
|
// 2. It is within the scan context, but not among updatedElementsWithIssues.
|
|
40
|
-
const removedElementsWithIssues = extendedElementsWithIssues.value.filter(extendedElementWithIssues => {
|
|
43
|
+
const removedElementsWithIssues = extendedElementsWithIssues.value.filter((extendedElementWithIssues) => {
|
|
41
44
|
const isConnected = extendedElementWithIssues.element.isConnected;
|
|
42
|
-
const hasNoMoreIssues = isNodeInScanContext(extendedElementWithIssues.element, scanContext)
|
|
43
|
-
|
|
45
|
+
const hasNoMoreIssues = isNodeInScanContext(extendedElementWithIssues.element, scanContext) &&
|
|
46
|
+
!updatedElementsWithIssues.some((updatedElementWithIssues) => areElementsWithIssuesEqual(updatedElementWithIssues, extendedElementWithIssues));
|
|
44
47
|
return !isConnected || hasNoMoreIssues;
|
|
45
48
|
});
|
|
46
49
|
if (addedElementsWithIssues.length > 0 || removedElementsWithIssues.length > 0) {
|
|
47
50
|
extendedElementsWithIssues.value = [...extendedElementsWithIssues.value]
|
|
48
|
-
.filter(extendedElementWithIssues => {
|
|
49
|
-
return !removedElementsWithIssues.some(removedElementWithIssues => areElementsWithIssuesEqual(removedElementWithIssues, extendedElementWithIssues));
|
|
51
|
+
.filter((extendedElementWithIssues) => {
|
|
52
|
+
return !removedElementsWithIssues.some((removedElementWithIssues) => areElementsWithIssuesEqual(removedElementWithIssues, extendedElementWithIssues));
|
|
50
53
|
})
|
|
51
54
|
.concat(addedElementsWithIssues
|
|
52
|
-
.filter(addedElementWithIssues => addedElementWithIssues.element.isConnected)
|
|
53
|
-
.map(addedElementWithIssues => {
|
|
55
|
+
.filter((addedElementWithIssues) => addedElementWithIssues.element.isConnected)
|
|
56
|
+
.map((addedElementWithIssues) => {
|
|
54
57
|
const id = count++;
|
|
55
58
|
const trigger = win.document.createElement(`${name}-trigger`);
|
|
56
|
-
const elementZIndex = parseInt(win.getComputedStyle(addedElementWithIssues.element).zIndex, 10);
|
|
57
|
-
if (!isNaN(elementZIndex)) {
|
|
59
|
+
const elementZIndex = Number.parseInt(win.getComputedStyle(addedElementWithIssues.element).zIndex, 10);
|
|
60
|
+
if (!Number.isNaN(elementZIndex)) {
|
|
58
61
|
trigger.style.setProperty('z-index', (elementZIndex + 1).toString(), 'important');
|
|
59
62
|
}
|
|
60
63
|
trigger.style.setProperty('position-anchor', `--${name}-anchor-${id}`, 'important');
|
|
@@ -65,9 +68,9 @@ export default function updateElementsWithIssues({ extendedElementsWithIssues, s
|
|
|
65
68
|
trigger.position = signal(position);
|
|
66
69
|
trigger.visible = signal(true);
|
|
67
70
|
trigger.element = addedElementWithIssues.element;
|
|
68
|
-
const scrollableAncestors = supportsAnchorPositioning(win)
|
|
69
|
-
new Set()
|
|
70
|
-
getScrollableAncestors(addedElementWithIssues.element, win);
|
|
71
|
+
const scrollableAncestors = supportsAnchorPositioning(win)
|
|
72
|
+
? new Set()
|
|
73
|
+
: getScrollableAncestors(addedElementWithIssues.element, win);
|
|
71
74
|
const issues = signal(addedElementWithIssues.issues);
|
|
72
75
|
accentedDialog.issues = issues;
|
|
73
76
|
accentedDialog.element = addedElementWithIssues.element;
|
|
@@ -79,10 +82,12 @@ export default function updateElementsWithIssues({ extendedElementsWithIssues, s
|
|
|
79
82
|
visible: trigger.visible,
|
|
80
83
|
position: trigger.position,
|
|
81
84
|
scrollableAncestors: signal(scrollableAncestors),
|
|
82
|
-
anchorNameValue: addedElementWithIssues.element.style.getPropertyValue('anchor-name')
|
|
83
|
-
|
|
85
|
+
anchorNameValue: addedElementWithIssues.element.style.getPropertyValue('anchor-name') ||
|
|
86
|
+
win
|
|
87
|
+
.getComputedStyle(addedElementWithIssues.element)
|
|
88
|
+
.getPropertyValue('anchor-name'),
|
|
84
89
|
trigger,
|
|
85
|
-
issues
|
|
90
|
+
issues,
|
|
86
91
|
};
|
|
87
92
|
}));
|
|
88
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-elements-with-issues.js","sourceRoot":"","sources":["../../src/utils/update-elements-with-issues.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-elements-with-issues.js","sourceRoot":"","sources":["../../src/utils/update-elements-with-issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { AccentedOptions } from './types';
|
|
2
|
-
export
|
|
1
|
+
import type { AccentedOptions } from './types.ts';
|
|
2
|
+
export declare function validateOptions(options: AccentedOptions): void;
|
|
3
3
|
//# sourceMappingURL=validate-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-options.d.ts","sourceRoot":"","sources":["../src/validate-options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-options.d.ts","sourceRoot":"","sources":["../src/validate-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,YAAY,CAAC;AA+GpB,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,QAgEvD"}
|
package/dist/validate-options.js
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
import { allowedAxeOptions } from './types.js';
|
|
2
2
|
import { isNode, isNodeList } from './utils/dom-helpers.js';
|
|
3
3
|
function isSelector(contextFragment) {
|
|
4
|
-
return typeof contextFragment === 'string'
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
return (typeof contextFragment === 'string' ||
|
|
5
|
+
isNode(contextFragment) ||
|
|
6
|
+
'fromShadowDom' in contextFragment);
|
|
7
7
|
}
|
|
8
8
|
function validateSelector(selector) {
|
|
9
9
|
if (typeof selector === 'string') {
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
if (isNode(selector)) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
if (!Array.isArray(selector.fromShadowDom)
|
|
17
|
-
|
|
18
|
-
!selector.fromShadowDom.every(item => typeof item === 'string')) {
|
|
15
|
+
if ('fromShadowDom' in selector) {
|
|
16
|
+
if (!Array.isArray(selector.fromShadowDom) ||
|
|
17
|
+
selector.fromShadowDom.length < 2 ||
|
|
18
|
+
!selector.fromShadowDom.every((item) => typeof item === 'string')) {
|
|
19
19
|
throw new TypeError(`Accented: invalid argument. \`fromShadowDom\` must be an array of strings with at least 2 elements. It’s currently set to ${selector.fromShadowDom}.`);
|
|
20
20
|
}
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
throw new TypeError(`Accented: invalid argument. The selector must be one of: string, Node, or an object with a \`fromShadowDom\` property. It’s currently set to ${neverSelector}.`);
|
|
26
|
-
}
|
|
23
|
+
const neverSelector = selector;
|
|
24
|
+
throw new TypeError(`Accented: invalid argument. The selector must be one of: string, Node, or an object with a \`fromShadowDom\` property. It’s currently set to ${neverSelector}.`);
|
|
27
25
|
}
|
|
28
26
|
function isSelectorList(contextFragment) {
|
|
29
|
-
return (typeof contextFragment === 'object' && isNodeList(contextFragment))
|
|
30
|
-
|
|
27
|
+
return ((typeof contextFragment === 'object' && isNodeList(contextFragment)) ||
|
|
28
|
+
(Array.isArray(contextFragment) && contextFragment.every((item) => isSelector(item))));
|
|
31
29
|
}
|
|
32
30
|
function validateSelectorList(selectorList) {
|
|
33
31
|
if (isNodeList(selectorList)) {
|
|
34
32
|
return;
|
|
35
33
|
}
|
|
36
|
-
|
|
34
|
+
if (Array.isArray(selectorList)) {
|
|
37
35
|
for (const selector of selectorList) {
|
|
38
36
|
validateSelector(selector);
|
|
39
37
|
}
|
|
@@ -59,14 +57,15 @@ function validateContextProp(context) {
|
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
function isContextObject(contextFragment) {
|
|
62
|
-
return typeof contextFragment === 'object' &&
|
|
63
|
-
|
|
60
|
+
return (typeof contextFragment === 'object' &&
|
|
61
|
+
contextFragment !== null &&
|
|
62
|
+
('include' in contextFragment || 'exclude' in contextFragment));
|
|
64
63
|
}
|
|
65
64
|
function validateContextObject(contextObject) {
|
|
66
|
-
if ('include' in contextObject) {
|
|
65
|
+
if ('include' in contextObject && contextObject.include !== undefined) {
|
|
67
66
|
validateContextProp(contextObject.include);
|
|
68
67
|
}
|
|
69
|
-
if ('exclude' in contextObject) {
|
|
68
|
+
if ('exclude' in contextObject && contextObject.exclude !== undefined) {
|
|
70
69
|
validateContextProp(contextObject.exclude);
|
|
71
70
|
}
|
|
72
71
|
}
|
|
@@ -86,7 +85,7 @@ function validateContext(context) {
|
|
|
86
85
|
// but with Unicode it gets complicated quickly, so I'm sticking to only allowing
|
|
87
86
|
// lowercase alphanumeric names that possibly contain dashes that start with a letter.
|
|
88
87
|
const nameRegex = /^[a-z]([a-z0-9]|-)+$/;
|
|
89
|
-
export
|
|
88
|
+
export function validateOptions(options) {
|
|
90
89
|
if (typeof options !== 'object' || options === null) {
|
|
91
90
|
throw new TypeError(`Accented: invalid argument. The options parameter must be an object if provided. It’s currently set to ${options}.`);
|
|
92
91
|
}
|
|
@@ -94,7 +93,8 @@ export default function validateOptions(options) {
|
|
|
94
93
|
if (typeof options.throttle !== 'object' || options.throttle === null) {
|
|
95
94
|
throw new TypeError(`Accented: invalid argument. \`throttle\` option must be an object if provided. It’s currently set to ${options.throttle}.`);
|
|
96
95
|
}
|
|
97
|
-
if (options.throttle.wait !== undefined &&
|
|
96
|
+
if (options.throttle.wait !== undefined &&
|
|
97
|
+
(typeof options.throttle.wait !== 'number' || options.throttle.wait < 0)) {
|
|
98
98
|
throw new TypeError(`Accented: invalid argument. \`throttle.wait\` option must be a non-negative number if provided. It’s currently set to ${options.throttle.wait}.`);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -109,14 +109,15 @@ export default function validateOptions(options) {
|
|
|
109
109
|
if (options.callback !== undefined && typeof options.callback !== 'function') {
|
|
110
110
|
throw new TypeError(`Accented: invalid argument. \`callback\` option must be a function if provided. It’s currently set to ${options.callback}.`);
|
|
111
111
|
}
|
|
112
|
-
if (options.name !== undefined &&
|
|
112
|
+
if (options.name !== undefined &&
|
|
113
|
+
(typeof options.name !== 'string' || !options.name.match(nameRegex))) {
|
|
113
114
|
throw new TypeError(`Accented: invalid argument. \`name\` option must be a string that starts with a lowercase letter and only contains lowercase alphanumeric characters and dashes. It’s currently set to ${options.name}.`);
|
|
114
115
|
}
|
|
115
116
|
if (options.axeOptions !== undefined) {
|
|
116
117
|
if (typeof options.axeOptions !== 'object' || options.axeOptions === null) {
|
|
117
118
|
throw new TypeError(`Accented: invalid argument. \`axeOptions\` option must be an object if provided. It’s currently set to ${options.axeOptions}.`);
|
|
118
119
|
}
|
|
119
|
-
const unsupportedKeys = Object.keys(options.axeOptions).filter(key => !allowedAxeOptions.includes(key));
|
|
120
|
+
const unsupportedKeys = Object.keys(options.axeOptions).filter((key) => !allowedAxeOptions.includes(key));
|
|
120
121
|
if (unsupportedKeys.length > 0) {
|
|
121
122
|
throw new TypeError(`Accented: invalid argument. \`axeOptions\` contains the following unsupported keys: ${unsupportedKeys.join(', ')}. Valid options are: ${allowedAxeOptions.join(', ')}.`);
|
|
122
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-options.js","sourceRoot":"","sources":["../src/validate-options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-options.js","sourceRoot":"","sources":["../src/validate-options.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "accented",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-20250701143712",
|
|
4
4
|
"description": "Continuous accessibility testing and issue highlighting for web development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/accented.js",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"keywords": [
|
|
17
17
|
"accessibility",
|
|
18
18
|
"a11y",
|
|
19
|
+
"a11y-testing",
|
|
19
20
|
"axe",
|
|
20
21
|
"axe-core"
|
|
21
22
|
],
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"bugs": {
|
|
25
26
|
"url": "https://github.com/pomerantsev/accented/issues"
|
|
26
27
|
},
|
|
27
|
-
"homepage": "https://
|
|
28
|
+
"homepage": "https://www.accented.dev",
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"@preact/signals-core": "^1.8.0",
|
|
30
31
|
"axe-core": "^4.10.3"
|
|
@@ -34,11 +35,13 @@
|
|
|
34
35
|
"jsdom": "^26.0.0"
|
|
35
36
|
},
|
|
36
37
|
"scripts": {
|
|
37
|
-
"build": "tsc",
|
|
38
|
+
"build": "pnpm copyCommon && tsc",
|
|
39
|
+
"copyCommon": "node --import tsx ./scripts/copy-common.ts",
|
|
40
|
+
"watchCommon": "node --import tsx ./scripts/watch-common.ts",
|
|
38
41
|
"checkBuiltFiles": "node --import tsx ./scripts/check-built-files.ts",
|
|
39
42
|
"checkImportsInBuiltFiles": "node ./dist/accented.js",
|
|
40
43
|
"typecheckTests": "tsc -p ./tsconfig.test.json",
|
|
41
|
-
"watch": "tsc --watch",
|
|
44
|
+
"watch": "pnpm copyCommon && (pnpm watchCommon & tsc --watch)",
|
|
42
45
|
"test": "node --test --import tsx \"./**/*.test.ts\""
|
|
43
46
|
}
|
|
44
47
|
}
|
package/src/accented.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import assert from 'node:assert/strict';
|
|
2
|
-
import {suite, test} from 'node:test';
|
|
2
|
+
import { suite, test } from 'node:test';
|
|
3
3
|
import type { Mock } from 'node:test';
|
|
4
4
|
|
|
5
|
-
import accented from './accented
|
|
5
|
+
import { accented } from './accented';
|
|
6
6
|
|
|
7
7
|
suite('Accented', () => {
|
|
8
8
|
test('runs without errors in NodeJS and issues a warning and a trace (it’s meant to be a no-op on the server side)', (t) => {
|
package/src/accented.ts
CHANGED
|
@@ -1,28 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import setupResizeListener from './resize-listener.js';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
1
|
+
import { createDomUpdater } from './dom-updater.js';
|
|
2
|
+
import { setupResizeListener as setupFullscreenListener } from './fullscreen-listener.js';
|
|
3
|
+
import { setupIntersectionObserver } from './intersection-observer.js';
|
|
4
|
+
import { logAndRethrow } from './log-and-rethrow.js';
|
|
5
|
+
import { createLogger } from './logger.js';
|
|
6
|
+
import { registerElements } from './register-elements.js';
|
|
7
|
+
import { setupResizeListener } from './resize-listener.js';
|
|
8
|
+
import { createScanner } from './scanner.js';
|
|
9
|
+
import { setupScrollListeners } from './scroll-listeners.js';
|
|
10
10
|
import { enabled, extendedElementsWithIssues } from './state.js';
|
|
11
|
-
import
|
|
12
|
-
import type { AccentedOptions, DisableAccented } from './types';
|
|
13
|
-
import validateOptions from './validate-options.js';
|
|
14
|
-
import supportsAnchorPositioning from './utils/supports-anchor-positioning.js';
|
|
15
|
-
import logAndRethrow from './log-and-rethrow.js';
|
|
11
|
+
import type { AccentedOptions, DisableAccented } from './types.ts';
|
|
16
12
|
import { initializeContainingBlockSupportSet } from './utils/containing-blocks.js';
|
|
13
|
+
import { deepMerge } from './utils/deep-merge.js';
|
|
14
|
+
import { supportsAnchorPositioning } from './utils/supports-anchor-positioning.js';
|
|
15
|
+
import { validateOptions } from './validate-options.js';
|
|
17
16
|
|
|
18
17
|
export type { AccentedOptions, DisableAccented };
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
|
-
* Enables highlighting of
|
|
20
|
+
* Enables the continuous scanning and highlighting of accessibility issues on the page.
|
|
22
21
|
*
|
|
23
|
-
* @param {AccentedOptions} options - The options object.
|
|
22
|
+
* @param {AccentedOptions} options - The options object (optional).
|
|
24
23
|
*
|
|
25
|
-
* @returns A `disable` function that
|
|
24
|
+
* @returns A `disable` function that takes no parameters. When called, disables the scanning and highlighting, and cleans up any changes that Accented has made to the page.
|
|
26
25
|
*
|
|
27
26
|
* @example
|
|
28
27
|
* accented();
|
|
@@ -37,29 +36,30 @@ export type { AccentedOptions, DisableAccented };
|
|
|
37
36
|
* leading: false
|
|
38
37
|
* },
|
|
39
38
|
* callback: ({ elementsWithIssues, performance }) => {
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* console.log('Elements with issues:', elementsWithIssues);
|
|
40
|
+
* console.log('Total blocking time:', performance.totalBlockingTime);
|
|
42
41
|
* }
|
|
43
42
|
* });
|
|
44
43
|
*/
|
|
45
|
-
export
|
|
46
|
-
|
|
44
|
+
export function accented(options: AccentedOptions = {}): DisableAccented {
|
|
47
45
|
validateOptions(options);
|
|
48
46
|
|
|
49
47
|
try {
|
|
50
48
|
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
51
|
-
console.warn(
|
|
49
|
+
console.warn(
|
|
50
|
+
'Accented: this script can only run in the browser, and it’s likely running on the server now. Exiting.',
|
|
51
|
+
);
|
|
52
52
|
console.trace();
|
|
53
53
|
return () => {};
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
const defaultOutput: Required<AccentedOptions['output']> = {
|
|
57
|
-
console: true
|
|
57
|
+
console: true,
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
const defaultThrottle: Required<AccentedOptions['throttle']> = {
|
|
61
61
|
wait: 1000,
|
|
62
|
-
leading: true
|
|
62
|
+
leading: true,
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
// IMPORTANT: when changing any of the properties or values, also do the following:
|
|
@@ -73,16 +73,18 @@ export default function accented(options: AccentedOptions = {}): DisableAccented
|
|
|
73
73
|
name: 'accented',
|
|
74
74
|
output: defaultOutput,
|
|
75
75
|
throttle: defaultThrottle,
|
|
76
|
-
callback: () => {}
|
|
76
|
+
callback: () => {},
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
const {context, axeOptions, name, output, throttle, callback} = deepMerge(
|
|
79
|
+
const { context, axeOptions, name, output, throttle, callback } = deepMerge(
|
|
80
|
+
defaultOptions,
|
|
81
|
+
options,
|
|
82
|
+
);
|
|
80
83
|
|
|
81
84
|
if (enabled.value) {
|
|
82
85
|
// Add link to the recipes section of the docs (#56).
|
|
83
86
|
console.warn(
|
|
84
|
-
'You are trying to run the Accented library more than once.
|
|
85
|
-
'This will likely lead to errors.'
|
|
87
|
+
'You are trying to run the Accented library more than once, which may lead to errors.',
|
|
86
88
|
);
|
|
87
89
|
console.trace();
|
|
88
90
|
}
|
|
@@ -92,13 +94,18 @@ export default function accented(options: AccentedOptions = {}): DisableAccented
|
|
|
92
94
|
initializeContainingBlockSupportSet();
|
|
93
95
|
registerElements(name);
|
|
94
96
|
|
|
95
|
-
const {disconnect: cleanupIntersectionObserver, intersectionObserver } =
|
|
97
|
+
const { disconnect: cleanupIntersectionObserver, intersectionObserver } =
|
|
98
|
+
setupIntersectionObserver();
|
|
96
99
|
const cleanupScanner = createScanner(name, context, axeOptions, throttle, callback);
|
|
97
100
|
const cleanupDomUpdater = createDomUpdater(name, intersectionObserver);
|
|
98
101
|
const cleanupLogger = output.console ? createLogger() : () => {};
|
|
99
|
-
const cleanupScrollListeners =
|
|
100
|
-
const cleanupResizeListener = supportsAnchorPositioning(window)
|
|
101
|
-
|
|
102
|
+
const cleanupScrollListeners = setupScrollListeners();
|
|
103
|
+
const cleanupResizeListener = supportsAnchorPositioning(window)
|
|
104
|
+
? () => {}
|
|
105
|
+
: setupResizeListener();
|
|
106
|
+
const cleanupFullscreenListener = supportsAnchorPositioning(window)
|
|
107
|
+
? () => {}
|
|
108
|
+
: setupFullscreenListener();
|
|
102
109
|
|
|
103
110
|
return () => {
|
|
104
111
|
try {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const primaryColor = 'oklch(0.5 0.3 0)';
|