accented 0.0.0-20250303013509 → 0.0.0-20250424114613
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/NOTICE +14 -0
- package/README.md +10 -4
- package/dist/accented.d.ts +2 -2
- package/dist/accented.d.ts.map +1 -1
- package/dist/accented.js +10 -5
- package/dist/accented.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/dom-updater.d.ts.map +1 -1
- package/dist/dom-updater.js +66 -25
- package/dist/dom-updater.js.map +1 -1
- package/dist/elements/accented-dialog.d.ts +11 -7
- package/dist/elements/accented-dialog.d.ts.map +1 -1
- package/dist/elements/accented-dialog.js +85 -86
- package/dist/elements/accented-dialog.js.map +1 -1
- package/dist/elements/accented-trigger.d.ts +9 -5
- package/dist/elements/accented-trigger.d.ts.map +1 -1
- package/dist/elements/accented-trigger.js +35 -11
- package/dist/elements/accented-trigger.js.map +1 -1
- package/dist/fullscreen-listener.d.ts +2 -0
- package/dist/fullscreen-listener.d.ts.map +1 -0
- package/dist/fullscreen-listener.js +18 -0
- package/dist/fullscreen-listener.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +4 -1
- package/dist/logger.js.map +1 -1
- package/dist/scanner.d.ts +2 -2
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +33 -19
- package/dist/scanner.js.map +1 -1
- package/dist/state.d.ts +2 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +3 -0
- 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 +2 -1
- package/dist/task-queue.js.map +1 -1
- package/dist/types.d.ts +42 -8
- 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 +3 -0
- package/dist/utils/are-elements-with-issues-equal.d.ts.map +1 -0
- package/dist/utils/are-elements-with-issues-equal.js +5 -0
- package/dist/utils/are-elements-with-issues-equal.js.map +1 -0
- package/dist/utils/containing-blocks.d.ts +3 -0
- package/dist/utils/containing-blocks.d.ts.map +1 -0
- package/dist/utils/containing-blocks.js +46 -0
- package/dist/utils/containing-blocks.js.map +1 -0
- package/dist/utils/contains.d.ts +2 -0
- package/dist/utils/contains.d.ts.map +1 -0
- package/dist/utils/contains.js +19 -0
- package/dist/utils/contains.js.map +1 -0
- package/dist/utils/deduplicate-nodes.d.ts +2 -0
- package/dist/utils/deduplicate-nodes.d.ts.map +1 -0
- package/dist/utils/deduplicate-nodes.js +5 -0
- package/dist/utils/deduplicate-nodes.js.map +1 -0
- package/dist/utils/dom-helpers.d.ts +9 -0
- package/dist/utils/dom-helpers.d.ts.map +1 -0
- package/dist/utils/dom-helpers.js +32 -0
- package/dist/utils/dom-helpers.js.map +1 -0
- package/dist/utils/ensure-non-empty.d.ts +2 -0
- package/dist/utils/ensure-non-empty.d.ts.map +1 -0
- package/dist/utils/ensure-non-empty.js +7 -0
- package/dist/utils/ensure-non-empty.js.map +1 -0
- package/dist/utils/get-element-position.d.ts +8 -0
- package/dist/utils/get-element-position.d.ts.map +1 -1
- package/dist/utils/get-element-position.js +27 -11
- package/dist/utils/get-element-position.js.map +1 -1
- package/dist/utils/get-parent.d.ts +2 -0
- package/dist/utils/get-parent.d.ts.map +1 -0
- package/dist/utils/get-parent.js +12 -0
- package/dist/utils/get-parent.js.map +1 -0
- package/dist/utils/get-scan-context.d.ts +3 -0
- package/dist/utils/get-scan-context.d.ts.map +1 -0
- package/dist/utils/get-scan-context.js +28 -0
- package/dist/utils/get-scan-context.js.map +1 -0
- 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 +6 -2
- package/dist/utils/get-scrollable-ancestors.js.map +1 -1
- package/dist/utils/is-node-in-scan-context.d.ts +3 -0
- package/dist/utils/is-node-in-scan-context.d.ts.map +1 -0
- package/dist/utils/is-node-in-scan-context.js +26 -0
- package/dist/utils/is-node-in-scan-context.js.map +1 -0
- package/dist/utils/normalize-context.d.ts +3 -0
- package/dist/utils/normalize-context.d.ts.map +1 -0
- package/dist/utils/normalize-context.js +57 -0
- package/dist/utils/normalize-context.js.map +1 -0
- package/dist/utils/shadow-dom-aware-mutation-observer.d.ts +10 -0
- package/dist/utils/shadow-dom-aware-mutation-observer.d.ts.map +1 -0
- package/dist/utils/shadow-dom-aware-mutation-observer.js +64 -0
- package/dist/utils/shadow-dom-aware-mutation-observer.js.map +1 -0
- package/dist/utils/transform-violations.d.ts +1 -1
- package/dist/utils/transform-violations.d.ts.map +1 -1
- package/dist/utils/transform-violations.js +18 -5
- package/dist/utils/transform-violations.js.map +1 -1
- package/dist/utils/update-elements-with-issues.d.ts +10 -4
- package/dist/utils/update-elements-with-issues.d.ts.map +1 -1
- package/dist/utils/update-elements-with-issues.js +33 -6
- package/dist/utils/update-elements-with-issues.js.map +1 -1
- package/dist/validate-options.d.ts.map +1 -1
- package/dist/validate-options.js +86 -0
- package/dist/validate-options.js.map +1 -1
- package/package.json +8 -3
- package/src/accented.ts +10 -5
- package/src/constants.ts +1 -0
- package/src/dom-updater.ts +70 -24
- package/src/elements/accented-dialog.ts +88 -90
- package/src/elements/accented-trigger.ts +36 -12
- package/src/fullscreen-listener.ts +17 -0
- package/src/logger.ts +9 -1
- package/src/scanner.ts +37 -20
- package/src/state.ts +10 -2
- package/src/task-queue.ts +6 -4
- package/src/types.ts +55 -9
- package/src/utils/are-elements-with-issues-equal.ts +9 -0
- package/src/utils/containing-blocks.ts +57 -0
- package/src/utils/contains.test.ts +55 -0
- package/src/utils/contains.ts +19 -0
- package/src/utils/deduplicate-nodes.ts +3 -0
- package/src/utils/dom-helpers.ts +38 -0
- package/src/utils/ensure-non-empty.ts +6 -0
- package/src/utils/get-element-position.ts +28 -11
- package/src/utils/get-parent.ts +14 -0
- package/src/utils/get-scan-context.test.ts +79 -0
- package/src/utils/get-scan-context.ts +39 -0
- package/src/utils/get-scrollable-ancestors.ts +10 -5
- package/src/utils/is-node-in-scan-context.test.ts +70 -0
- package/src/utils/is-node-in-scan-context.ts +29 -0
- package/src/utils/normalize-context.test.ts +105 -0
- package/src/utils/normalize-context.ts +58 -0
- package/src/utils/shadow-dom-aware-mutation-observer.ts +78 -0
- package/src/utils/transform-violations.test.ts +10 -8
- package/src/utils/transform-violations.ts +20 -6
- package/src/utils/update-elements-with-issues.test.ts +102 -15
- package/src/utils/update-elements-with-issues.ts +51 -7
- package/src/validate-options.ts +88 -1
- package/dist/utils/is-html-element.d.ts +0 -2
- package/dist/utils/is-html-element.d.ts.map +0 -1
- package/dist/utils/is-html-element.js +0 -7
- package/dist/utils/is-html-element.js.map +0 -1
- package/src/utils/is-html-element.ts +0 -6
package/dist/scanner.js
CHANGED
|
@@ -5,12 +5,14 @@ import updateElementsWithIssues from './utils/update-elements-with-issues.js';
|
|
|
5
5
|
import recalculatePositions from './utils/recalculate-positions.js';
|
|
6
6
|
import recalculateScrollableAncestors from './utils/recalculate-scrollable-ancestors.js';
|
|
7
7
|
import supportsAnchorPositioning from './utils/supports-anchor-positioning.js';
|
|
8
|
-
import { issuesUrl } from './constants.js';
|
|
8
|
+
import { getAccentedElementNames, issuesUrl } from './constants.js';
|
|
9
9
|
import logAndRethrow from './log-and-rethrow.js';
|
|
10
|
-
|
|
10
|
+
import createShadowDOMAwareMutationObserver from './utils/shadow-dom-aware-mutation-observer.js';
|
|
11
|
+
import getScanContext from './utils/get-scan-context.js';
|
|
12
|
+
export default function createScanner(name, context, axeOptions, throttle, callback) {
|
|
11
13
|
const axeRunningWindowProp = `__${name}_axe_running__`;
|
|
12
14
|
const win = window;
|
|
13
|
-
const taskQueue = new TaskQueue(async () => {
|
|
15
|
+
const taskQueue = new TaskQueue(async (nodes) => {
|
|
14
16
|
// We may see errors coming from axe-core when Accented is toggled off and on in qiuck succession,
|
|
15
17
|
// which I've seen happen with hot reloading of a React application.
|
|
16
18
|
// This window property serves as a circuit breaker for that particular case.
|
|
@@ -18,13 +20,12 @@ export default function createScanner(name, axeContext, axeOptions, throttle, ca
|
|
|
18
20
|
return;
|
|
19
21
|
}
|
|
20
22
|
try {
|
|
21
|
-
performance.mark('
|
|
23
|
+
performance.mark('scan-start');
|
|
22
24
|
win[axeRunningWindowProp] = true;
|
|
25
|
+
const scanContext = getScanContext(nodes, context);
|
|
23
26
|
let result;
|
|
24
27
|
try {
|
|
25
|
-
|
|
26
|
-
// only run Axe on what's changed, not on the whole axeContext
|
|
27
|
-
result = await axe.run(axeContext, {
|
|
28
|
+
result = await axe.run(scanContext, {
|
|
28
29
|
elementRef: true,
|
|
29
30
|
// Although axe-core can perform iframe scanning, I haven't succeeded in it,
|
|
30
31
|
// and the docs suggest that the axe-core script should be explicitly included
|
|
@@ -44,14 +45,32 @@ export default function createScanner(name, axeContext, axeOptions, throttle, ca
|
|
|
44
45
|
result = { violations: [] };
|
|
45
46
|
}
|
|
46
47
|
win[axeRunningWindowProp] = false;
|
|
47
|
-
const
|
|
48
|
+
const scanMeasure = performance.measure('scan', 'scan-start');
|
|
49
|
+
const scanDuration = Math.round(scanMeasure.duration);
|
|
48
50
|
if (!enabled.value) {
|
|
49
51
|
return;
|
|
50
52
|
}
|
|
51
|
-
|
|
53
|
+
performance.mark('dom-update-start');
|
|
54
|
+
updateElementsWithIssues({
|
|
55
|
+
extendedElementsWithIssues,
|
|
56
|
+
scanContext,
|
|
57
|
+
violations: result.violations,
|
|
58
|
+
win: window,
|
|
59
|
+
name
|
|
60
|
+
});
|
|
61
|
+
const domUpdateMeasure = performance.measure('dom-update', 'dom-update-start');
|
|
62
|
+
const domUpdateDuration = Math.round(domUpdateMeasure.duration);
|
|
52
63
|
callback({
|
|
53
64
|
elementsWithIssues: elementsWithIssues.value,
|
|
54
|
-
|
|
65
|
+
performance: {
|
|
66
|
+
totalBlockingTime: scanDuration + domUpdateDuration,
|
|
67
|
+
scan: scanDuration,
|
|
68
|
+
domUpdate: domUpdateDuration,
|
|
69
|
+
// Assuming that the {include, exclude} shape of the context object will be used less often
|
|
70
|
+
// than other variants, we'll output just the `include` array in case nothing is excluded
|
|
71
|
+
// in the scan.
|
|
72
|
+
scanContext: scanContext.exclude.length > 0 ? scanContext : scanContext.include
|
|
73
|
+
}
|
|
55
74
|
});
|
|
56
75
|
}
|
|
57
76
|
catch (error) {
|
|
@@ -59,12 +78,9 @@ export default function createScanner(name, axeContext, axeOptions, throttle, ca
|
|
|
59
78
|
logAndRethrow(error);
|
|
60
79
|
}
|
|
61
80
|
}, throttle);
|
|
62
|
-
// TODO (https://github.com/pomerantsev/accented/issues/102):
|
|
63
|
-
// limit to what's in axeContext,
|
|
64
|
-
// if that's an element or array of elements (not a selector).
|
|
65
81
|
taskQueue.add(document);
|
|
66
|
-
const accentedElementNames =
|
|
67
|
-
const mutationObserver =
|
|
82
|
+
const accentedElementNames = getAccentedElementNames(name);
|
|
83
|
+
const mutationObserver = createShadowDOMAwareMutationObserver(name, mutationList => {
|
|
68
84
|
try {
|
|
69
85
|
// We're not interested in mutations that are caused exclusively by the custom elements
|
|
70
86
|
// introduced by Accented.
|
|
@@ -98,15 +114,13 @@ export default function createScanner(name, axeContext, axeOptions, throttle, ca
|
|
|
98
114
|
const filteredMutationList = listWithoutAccentedElements.filter(mutationRecord => {
|
|
99
115
|
return !elementsWithAccentedAttributeChanges.has(mutationRecord.target);
|
|
100
116
|
});
|
|
101
|
-
|
|
117
|
+
const nodes = filteredMutationList.map(mutationRecord => mutationRecord.target);
|
|
118
|
+
taskQueue.addMultiple(nodes);
|
|
102
119
|
}
|
|
103
120
|
catch (error) {
|
|
104
121
|
logAndRethrow(error);
|
|
105
122
|
}
|
|
106
123
|
});
|
|
107
|
-
// TODO (https://github.com/pomerantsev/accented/issues/102):
|
|
108
|
-
// possibly limit the observer to what's in axeContext,
|
|
109
|
-
// if that's an element or array of elements (not a selector).
|
|
110
124
|
mutationObserver.observe(document, {
|
|
111
125
|
subtree: true,
|
|
112
126
|
childList: true,
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAErF,OAAO,wBAAwB,MAAM,wCAAwC,CAAC;AAC9E,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AACpE,OAAO,8BAA8B,MAAM,6CAA6C,CAAC;AACzF,OAAO,yBAAyB,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import type { ElementWithIssues, ExtendedElementWithIssues } from './types';
|
|
|
2
2
|
export declare const enabled: import("@preact/signals-core").Signal<boolean>;
|
|
3
3
|
export declare const extendedElementsWithIssues: import("@preact/signals-core").Signal<ExtendedElementWithIssues[]>;
|
|
4
4
|
export declare const elementsWithIssues: import("@preact/signals-core").ReadonlySignal<ElementWithIssues[]>;
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const rootNodes: import("@preact/signals-core").ReadonlySignal<Set<Node>>;
|
|
6
|
+
export declare const scrollableAncestors: import("@preact/signals-core").ReadonlySignal<Set<Element>>;
|
|
6
7
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE5E,eAAO,MAAM,OAAO,gDAAgB,CAAC;AAErC,eAAO,MAAM,0BAA0B,oEAA+C,CAAC;AAEvF,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE5E,eAAO,MAAM,OAAO,gDAAgB,CAAC;AAErC,eAAO,MAAM,0BAA0B,oEAA+C,CAAC;AAEvF,eAAO,MAAM,kBAAkB,oEAI3B,CAAC;AAEL,eAAO,MAAM,SAAS,0DAKrB,CAAC;AAEF,eAAO,MAAM,mBAAmB,6DAU/B,CAAC"}
|
package/dist/state.js
CHANGED
|
@@ -3,8 +3,11 @@ export const enabled = signal(false);
|
|
|
3
3
|
export const extendedElementsWithIssues = signal([]);
|
|
4
4
|
export const elementsWithIssues = computed(() => extendedElementsWithIssues.value.map(extendedElementWithIssues => ({
|
|
5
5
|
element: extendedElementWithIssues.element,
|
|
6
|
+
rootNode: extendedElementWithIssues.rootNode,
|
|
6
7
|
issues: extendedElementWithIssues.issues.value
|
|
7
8
|
})));
|
|
9
|
+
export const rootNodes = computed(() => new Set((enabled.value ? [document] : [])
|
|
10
|
+
.concat(...(extendedElementsWithIssues.value.map(extendedElementWithIssues => extendedElementWithIssues.rootNode)))));
|
|
8
11
|
export const scrollableAncestors = computed(() => extendedElementsWithIssues.value.reduce((scrollableAncestors, extendedElementWithIssues) => {
|
|
9
12
|
for (const scrollableAncestor of extendedElementWithIssues.scrollableAncestors.value) {
|
|
10
13
|
scrollableAncestors.add(scrollableAncestor);
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIxD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAmC,EAAE,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAA2B,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC5I,OAAO,EAAE,yBAAyB,CAAC,OAAO;IAC1C,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK;CAC/C,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIxD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAmC,EAAE,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAA2B,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC5I,OAAO,EAAE,yBAAyB,CAAC,OAAO;IAC1C,QAAQ,EAAE,yBAAyB,CAAC,QAAQ;IAC5C,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC,KAAK;CAC/C,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAY,GAAG,EAAE,CAChD,IAAI,GAAG,CACL,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CACtH,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAe,GAAG,EAAE,CAC7D,0BAA0B,CAAC,KAAK,CAAC,MAAM,CACrC,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,EAAE;IACjD,KAAK,MAAM,kBAAkB,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACrF,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC,EACD,IAAI,GAAG,EAAW,CACnB,CACF,CAAC"}
|
package/dist/task-queue.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Throttle } from './types';
|
|
2
|
-
type TaskCallback = () => void;
|
|
2
|
+
type TaskCallback<T> = (items: Array<T>) => void;
|
|
3
3
|
export default class TaskQueue<T> {
|
|
4
4
|
#private;
|
|
5
|
-
constructor(asyncCallback: TaskCallback
|
|
5
|
+
constructor(asyncCallback: TaskCallback<T>, throttle: Required<Throttle>);
|
|
6
6
|
addMultiple(items: Array<T>): void;
|
|
7
7
|
add(item: T): void;
|
|
8
8
|
}
|
package/dist/task-queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../src/task-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../src/task-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC;;gBAOlB,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAqCxE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAS3B,GAAG,CAAC,IAAI,EAAE,CAAC;CAGZ"}
|
package/dist/task-queue.js
CHANGED
|
@@ -22,9 +22,10 @@ export default class TaskQueue {
|
|
|
22
22
|
this.#inRunLoop = false;
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
+
const items = Array.from(this.#items);
|
|
25
26
|
this.#items.clear();
|
|
26
27
|
if (this.#asyncCallback) {
|
|
27
|
-
await this.#asyncCallback();
|
|
28
|
+
await this.#asyncCallback(items);
|
|
28
29
|
}
|
|
29
30
|
await new Promise((resolve) => setTimeout(resolve, this.#throttle.wait));
|
|
30
31
|
await this.#run();
|
package/dist/task-queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../src/task-queue.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,SAAS,CAAW;IACpB,cAAc,
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../src/task-queue.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,SAAS,CAAW;IACpB,cAAc,GAA2B,IAAI,CAAC;IAE9C,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;IACtB,UAAU,GAAG,KAAK,CAAC;IAEnB,YAAY,aAA8B,EAAE,QAA4B;QACtE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,WAAW,CAAC,KAAe;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAO;QACT,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,7 +25,21 @@ export type Output = {
|
|
|
25
25
|
* */
|
|
26
26
|
console?: boolean;
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Model context type based on axe.ElementContext,
|
|
30
|
+
* excluding frame selectors (since we don't support scanning iframes).
|
|
31
|
+
*/
|
|
32
|
+
export type Selector = Exclude<axe.Selector, axe.LabelledFramesSelector>;
|
|
33
|
+
export type SelectorList = Array<Selector> | NodeList;
|
|
34
|
+
export type ContextProp = Selector | SelectorList;
|
|
35
|
+
export type ContextObject = {
|
|
36
|
+
include: ContextProp;
|
|
37
|
+
exclude?: ContextProp;
|
|
38
|
+
} | {
|
|
39
|
+
exclude: ContextProp;
|
|
40
|
+
include?: ContextProp;
|
|
41
|
+
};
|
|
42
|
+
export type Context = ContextProp | ContextObject;
|
|
29
43
|
export declare const allowedAxeOptions: readonly ["rules", "runOnly"];
|
|
30
44
|
export type AxeOptions = Pick<axe.RunOptions, typeof allowedAxeOptions[number]>;
|
|
31
45
|
type CallbackParams = {
|
|
@@ -34,9 +48,20 @@ type CallbackParams = {
|
|
|
34
48
|
* */
|
|
35
49
|
elementsWithIssues: Array<ElementWithIssues>;
|
|
36
50
|
/**
|
|
37
|
-
*
|
|
51
|
+
* * `performance`: runtime performance of the last scan. An object:
|
|
52
|
+
* * `totalBlockingTime`: how long the main thread was blocked by Accented during the last scan, in milliseconds.
|
|
53
|
+
* It’s further divided into the `scan` and `domUpdate` phases.
|
|
54
|
+
* * `scan`: how long the `scan` phase took, in milliseconds.
|
|
55
|
+
* * `domUpdate`: how long the `domUpdate` phase took, in milliseconds.
|
|
56
|
+
* * `scanContext`: nodes that got scanned. Either an array of nodes,
|
|
57
|
+
* or an object with `include` and `exclude` properties (if any nodes were excluded).
|
|
38
58
|
* */
|
|
39
|
-
|
|
59
|
+
performance: {
|
|
60
|
+
totalBlockingTime: number;
|
|
61
|
+
scan: number;
|
|
62
|
+
domUpdate: number;
|
|
63
|
+
scanContext: ScanContext | Array<Node>;
|
|
64
|
+
};
|
|
40
65
|
};
|
|
41
66
|
export type Callback = (params: CallbackParams) => void;
|
|
42
67
|
export type AccentedOptions = {
|
|
@@ -56,7 +81,7 @@ export type AccentedOptions = {
|
|
|
56
81
|
*
|
|
57
82
|
* Default: `document`.
|
|
58
83
|
*/
|
|
59
|
-
|
|
84
|
+
context?: Context;
|
|
60
85
|
/**
|
|
61
86
|
* The `options` parameter for `axe.run()`.
|
|
62
87
|
*
|
|
@@ -121,17 +146,26 @@ export type Issue = {
|
|
|
121
146
|
url: string;
|
|
122
147
|
impact: axe.ImpactValue;
|
|
123
148
|
};
|
|
124
|
-
export type
|
|
125
|
-
element: HTMLElement;
|
|
149
|
+
export type BaseElementWithIssues = {
|
|
150
|
+
element: HTMLElement | SVGElement;
|
|
151
|
+
rootNode: Node;
|
|
152
|
+
};
|
|
153
|
+
export type ElementWithIssues = BaseElementWithIssues & {
|
|
126
154
|
issues: Array<Issue>;
|
|
127
155
|
};
|
|
128
|
-
export type ExtendedElementWithIssues =
|
|
156
|
+
export type ExtendedElementWithIssues = BaseElementWithIssues & {
|
|
129
157
|
issues: Signal<ElementWithIssues['issues']>;
|
|
130
158
|
visible: Signal<boolean>;
|
|
131
159
|
trigger: AccentedTrigger;
|
|
132
160
|
position: Signal<Position>;
|
|
133
|
-
|
|
161
|
+
skipRender: boolean;
|
|
162
|
+
anchorNameValue: string;
|
|
163
|
+
scrollableAncestors: Signal<Set<Element>>;
|
|
134
164
|
id: number;
|
|
135
165
|
};
|
|
166
|
+
export type ScanContext = {
|
|
167
|
+
include: Array<Node>;
|
|
168
|
+
exclude: Array<Node>;
|
|
169
|
+
};
|
|
136
170
|
export {};
|
|
137
171
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG;IACrB;;;;SAIK;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;SAMK;IACL,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB;;;;SAIK;IACL,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG;IACrB;;;;SAIK;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;SAMK;IACL,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB;;;;SAIK;IACL,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAIzE,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAGtD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,GAAG;IACF,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC;AAIlD,eAAO,MAAM,iBAAiB,+BAAgC,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,KAAK,cAAc,GAAG;IACpB;;SAEK;IACL,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE7C;;;;;;;;SAQK;IACL,WAAW,EAAE;QACX,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;KACvC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG;IAE5B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;SAEK;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;SAEK;IACL,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;SAIK;IACL,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC,WAAW,CAAA;CACxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,WAAW,GAAG,UAAU,CAAC;IAClC,QAAQ,EAAE,IAAI,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,GAAG;IACtD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CACrB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAAG;IAC9D,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IACzC,EAAE,EAAE,MAAM,CAAA;CACX,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;CACrB,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyDA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,SAAS,CAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"are-elements-with-issues-equal.d.ts","sourceRoot":"","sources":["../../src/utils/are-elements-with-issues-equal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,kBAAkB,EAAE,qBAAqB,EACzC,kBAAkB,EAAE,qBAAqB,WAI1C"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export default function areElementsWithIssuesEqual(elementWithIssues1, elementWithIssues2) {
|
|
2
|
+
return elementWithIssues1.element === elementWithIssues2.element
|
|
3
|
+
&& elementWithIssues1.rootNode === elementWithIssues2.rootNode;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=are-elements-with-issues-equal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"are-elements-with-issues-equal.js","sourceRoot":"","sources":["../../src/utils/are-elements-with-issues-equal.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,kBAAyC,EACzC,kBAAyC;IAEzC,OAAO,kBAAkB,CAAC,OAAO,KAAK,kBAAkB,CAAC,OAAO;WAC3D,kBAAkB,CAAC,QAAQ,KAAK,kBAAkB,CAAC,QAAQ,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containing-blocks.d.ts","sourceRoot":"","sources":["../../src/utils/containing-blocks.ts"],"names":[],"mappings":"AAoCA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,mBAAmB,WAErE;AAED,wBAAgB,mCAAmC,SAgBlD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests whether a particular combination of CSS property and value on an element
|
|
3
|
+
* makes that element a containing block.
|
|
4
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Containing_block
|
|
5
|
+
*
|
|
6
|
+
* The function is meant to be run with properties that behave inconsistently across browsers.
|
|
7
|
+
*
|
|
8
|
+
* It's only meant to be used during initialization.
|
|
9
|
+
*/
|
|
10
|
+
function testContainingBlockCreation(prop, value) {
|
|
11
|
+
const container = document.createElement('div');
|
|
12
|
+
container.style[prop] = value;
|
|
13
|
+
container.style.position = 'fixed';
|
|
14
|
+
container.style.insetInlineStart = '10px';
|
|
15
|
+
container.style.insetBlockStart = '10px';
|
|
16
|
+
const element = document.createElement('div');
|
|
17
|
+
element.style.position = 'fixed';
|
|
18
|
+
element.style.insetInlineStart = '0';
|
|
19
|
+
element.style.insetBlockStart = '0';
|
|
20
|
+
container.appendChild(element);
|
|
21
|
+
document.body.appendChild(container);
|
|
22
|
+
const containerRect = container.getBoundingClientRect();
|
|
23
|
+
const elementRect = element.getBoundingClientRect();
|
|
24
|
+
container.remove();
|
|
25
|
+
return containerRect.top === elementRect.top && containerRect.left === elementRect.left;
|
|
26
|
+
}
|
|
27
|
+
// This is the set we'll use to store the properties that _may_ create containing blocks
|
|
28
|
+
// (the behavior of the ones that we'll be checking is inconsistent across browsers
|
|
29
|
+
// at the time of writing this comment).
|
|
30
|
+
const propsAffectingContainingBlocks = new Set();
|
|
31
|
+
export function createsContainingBlock(prop) {
|
|
32
|
+
return propsAffectingContainingBlocks.has(prop);
|
|
33
|
+
}
|
|
34
|
+
export function initializeContainingBlockSupportSet() {
|
|
35
|
+
const propsToTest = [
|
|
36
|
+
{ prop: 'filter', value: 'blur(1px)' },
|
|
37
|
+
{ prop: 'backdropFilter', value: 'blur(1px)' },
|
|
38
|
+
{ prop: 'containerType', value: 'size' }
|
|
39
|
+
];
|
|
40
|
+
for (const { prop, value } of propsToTest) {
|
|
41
|
+
if (testContainingBlockCreation(prop, value)) {
|
|
42
|
+
propsAffectingContainingBlocks.add(prop);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=containing-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containing-blocks.js","sourceRoot":"","sources":["../../src/utils/containing-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,SAAS,2BAA2B,CAAsC,IAAO,EAAE,KAA6B;IAC9G,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC;IAC1C,SAAS,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC;IAEzC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC;IAEpC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAEpD,SAAS,CAAC,MAAM,EAAE,CAAC;IAEnB,OAAO,aAAa,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,IAAI,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED,wFAAwF;AACxF,mFAAmF;AACnF,wCAAwC;AACxC,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE5E,MAAM,UAAU,sBAAsB,CAAC,IAA+B;IACpE,OAAO,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mCAAmC;IAKjD,MAAM,WAAW,GAAqE;QACpF,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE;QACtC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE;QAC9C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;KACzC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC;QAC1C,IAAI,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7C,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.d.ts","sourceRoot":"","sources":["../../src/utils/contains.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAG,OAAO,CAgB1E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isDocumentFragment, isShadowRoot } from './dom-helpers.js';
|
|
2
|
+
export default function contains(ancestor, descendant) {
|
|
3
|
+
if (ancestor.contains(descendant)) {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
let rootNode = descendant.getRootNode();
|
|
7
|
+
while (rootNode) {
|
|
8
|
+
if (!(isDocumentFragment(rootNode) && isShadowRoot(rootNode))) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const host = rootNode.host;
|
|
12
|
+
if (ancestor.contains(host)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
rootNode = host.getRootNode();
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=contains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.js","sourceRoot":"","sources":["../../src/utils/contains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,QAAc,EAAE,UAAgB;IAC/D,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicate-nodes.d.ts","sourceRoot":"","sources":["../../src/utils/deduplicate-nodes.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAEhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicate-nodes.js","sourceRoot":"","sources":["../../src/utils/deduplicate-nodes.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAAA,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function isNode(obj: object): obj is Node;
|
|
2
|
+
export declare function isNodeList(obj: object): obj is NodeList;
|
|
3
|
+
export declare function isElement(node: Node): node is Element;
|
|
4
|
+
export declare function isDocument(node: Node): node is Document;
|
|
5
|
+
export declare function isDocumentFragment(node: Node): node is DocumentFragment;
|
|
6
|
+
export declare function isShadowRoot(documentFragment: DocumentFragment): documentFragment is ShadowRoot;
|
|
7
|
+
export declare function isHtmlElement(element: Element): element is HTMLElement;
|
|
8
|
+
export declare function isSvgElement(element: Element): element is SVGElement;
|
|
9
|
+
//# sourceMappingURL=dom-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/dom-helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,IAAI,CAG/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,QAAQ,CAEvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAErD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEvE;AAED,wBAAgB,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,gBAAgB,IAAI,UAAU,CAE/F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,WAAW,CAKtE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAKpE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function isNode(obj) {
|
|
2
|
+
return 'nodeType' in obj && typeof obj.nodeType === 'number' &&
|
|
3
|
+
'nodeName' in obj && typeof obj.nodeName === 'string';
|
|
4
|
+
}
|
|
5
|
+
export function isNodeList(obj) {
|
|
6
|
+
return Object.prototype.toString.call(obj) === '[object NodeList]';
|
|
7
|
+
}
|
|
8
|
+
export function isElement(node) {
|
|
9
|
+
return typeof Node !== 'undefined' && node.nodeType === Node.ELEMENT_NODE;
|
|
10
|
+
}
|
|
11
|
+
export function isDocument(node) {
|
|
12
|
+
return typeof Node !== 'undefined' && node.nodeType === Node.DOCUMENT_NODE;
|
|
13
|
+
}
|
|
14
|
+
export function isDocumentFragment(node) {
|
|
15
|
+
return typeof Node !== 'undefined' && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
|
|
16
|
+
}
|
|
17
|
+
export function isShadowRoot(documentFragment) {
|
|
18
|
+
return 'host' in documentFragment;
|
|
19
|
+
}
|
|
20
|
+
export function isHtmlElement(element) {
|
|
21
|
+
// We can't use instanceof because it may not work across contexts
|
|
22
|
+
// (such as when an element is moved from an iframe).
|
|
23
|
+
// This heuristic seems to be the most robust and fastest that I could think of.
|
|
24
|
+
return element.constructor.name.startsWith('HTML');
|
|
25
|
+
}
|
|
26
|
+
export function isSvgElement(element) {
|
|
27
|
+
// We can't use instanceof because it may not work across contexts
|
|
28
|
+
// (such as when an element is moved from an iframe).
|
|
29
|
+
// This heuristic seems to be the most robust and fastest that I could think of.
|
|
30
|
+
return element.constructor.name.startsWith('SVG');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=dom-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-helpers.js","sourceRoot":"","sources":["../../src/utils/dom-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,UAAU,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAC1D,UAAU,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,mBAAmB,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,OAAO,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAU;IAC3C,OAAO,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,sBAAsB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,gBAAkC;IAC7D,OAAO,MAAM,IAAI,gBAAgB,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,kEAAkE;IAClE,qDAAqD;IACrD,gFAAgF;IAChF,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,kEAAkE;IAClE,qDAAqD;IACrD,gFAAgF;IAChF,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-non-empty.d.ts","sourceRoot":"","sources":["../../src/utils/ensure-non-empty.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAK/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-non-empty.js","sourceRoot":"","sources":["../../src/utils/ensure-non-empty.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAI,GAAQ;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,GAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { Position } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* https://github.com/pomerantsev/accented/issues/116
|
|
4
|
+
*
|
|
5
|
+
* This calculation leads to incorrectly positioned Accented triggers when all of the following are true:
|
|
6
|
+
* * The element is an SVG element.
|
|
7
|
+
* * The element itself, or one of the element's ancestors has a scale or rotate transform.
|
|
8
|
+
* * The browser doesn't support anchor positioning.
|
|
9
|
+
*/
|
|
2
10
|
export default function getElementPosition(element: Element, win: Window): Position;
|
|
3
11
|
//# sourceMappingURL=get-element-position.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-element-position.d.ts","sourceRoot":"","sources":["../../src/utils/get-element-position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"get-element-position.d.ts","sourceRoot":"","sources":["../../src/utils/get-element-position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAiCzC;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAkClF"}
|
|
@@ -1,27 +1,45 @@
|
|
|
1
|
-
import isHtmlElement from './
|
|
1
|
+
import { isHtmlElement } from './dom-helpers.js';
|
|
2
|
+
import getParent from './get-parent.js';
|
|
3
|
+
import { createsContainingBlock } from './containing-blocks.js';
|
|
2
4
|
// https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Containing_block#identifying_the_containing_block
|
|
3
5
|
function isContainingBlock(element, win) {
|
|
4
6
|
const style = win.getComputedStyle(element);
|
|
5
|
-
const { transform, perspective } = style;
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
const { transform, perspective, contain, contentVisibility, containerType, filter, backdropFilter, willChange } = style;
|
|
8
|
+
const containItems = contain.split(' ');
|
|
9
|
+
const willChangeItems = willChange.split(/\s*,\s*/);
|
|
8
10
|
return transform !== 'none'
|
|
9
|
-
|| perspective !== 'none'
|
|
11
|
+
|| perspective !== 'none'
|
|
12
|
+
|| containItems.some((item) => ['layout', 'paint', 'strict', 'content'].includes(item))
|
|
13
|
+
|| contentVisibility === 'auto'
|
|
14
|
+
|| (createsContainingBlock('containerType') && containerType !== 'normal')
|
|
15
|
+
|| (createsContainingBlock('filter') && filter !== 'none')
|
|
16
|
+
|| (createsContainingBlock('backdropFilter') && backdropFilter !== 'none')
|
|
17
|
+
|| willChangeItems.some((item) => ['transform', 'perspective', 'contain', 'filter', 'backdrop-filter'].includes(item));
|
|
10
18
|
}
|
|
11
19
|
function getNonInitialContainingBlock(element, win) {
|
|
12
20
|
let currentElement = element;
|
|
13
|
-
while (currentElement
|
|
14
|
-
currentElement = currentElement
|
|
15
|
-
if (isContainingBlock(currentElement, win)) {
|
|
21
|
+
while (currentElement) {
|
|
22
|
+
currentElement = getParent(currentElement);
|
|
23
|
+
if (currentElement && isContainingBlock(currentElement, win)) {
|
|
16
24
|
return currentElement;
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
return null;
|
|
20
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* https://github.com/pomerantsev/accented/issues/116
|
|
31
|
+
*
|
|
32
|
+
* This calculation leads to incorrectly positioned Accented triggers when all of the following are true:
|
|
33
|
+
* * The element is an SVG element.
|
|
34
|
+
* * The element itself, or one of the element's ancestors has a scale or rotate transform.
|
|
35
|
+
* * The browser doesn't support anchor positioning.
|
|
36
|
+
*/
|
|
21
37
|
export default function getElementPosition(element, win) {
|
|
22
38
|
const nonInitialContainingBlock = getNonInitialContainingBlock(element, win);
|
|
23
|
-
// If an element has
|
|
39
|
+
// If an element has a containing block as an ancestor,
|
|
40
|
+
// and that containing block is not the <html> element (the initial containing block),
|
|
24
41
|
// fixed positioning works differently.
|
|
42
|
+
// https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Containing_block#effects_of_the_containing_block
|
|
25
43
|
// https://achrafkassioui.com/blog/position-fixed-and-CSS-transforms/
|
|
26
44
|
if (nonInitialContainingBlock) {
|
|
27
45
|
if (isHtmlElement(element)) {
|
|
@@ -39,8 +57,6 @@ export default function getElementPosition(element, win) {
|
|
|
39
57
|
return { top, left, width, height };
|
|
40
58
|
}
|
|
41
59
|
else {
|
|
42
|
-
// TODO: https://github.com/pomerantsev/accented/issues/116
|
|
43
|
-
// This is half-baked. It works incorrectly with scaled / rotated elements with issues.
|
|
44
60
|
const elementRect = element.getBoundingClientRect();
|
|
45
61
|
const nonInitialContainingBlockRect = nonInitialContainingBlock.getBoundingClientRect();
|
|
46
62
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-element-position.js","sourceRoot":"","sources":["../../src/utils/get-element-position.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-element-position.js","sourceRoot":"","sources":["../../src/utils/get-element-position.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,iHAAiH;AACjH,SAAS,iBAAiB,CAAC,OAAgB,EAAE,GAAW;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACxH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEpD,OAAO,SAAS,KAAK,MAAM;WACtB,WAAW,KAAK,MAAM;WACtB,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;WACpF,iBAAiB,KAAK,MAAM;WAC5B,CAAC,sBAAsB,CAAC,eAAe,CAAC,IAAI,aAAa,KAAK,QAAQ,CAAC;WACvE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC;WACvD,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,IAAI,cAAc,KAAK,MAAM,CAAC;WACvE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3H,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAgB,EAAE,GAAW;IACjE,IAAI,cAAc,GAAmB,OAAO,CAAC;IAC7C,OAAO,cAAc,EAAE,CAAC;QACtB,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,cAAc,IAAI,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,OAAgB,EAAE,GAAW;IACtE,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7E,uDAAuD;IACvD,sFAAsF;IACtF,uCAAuC;IACvC,gHAAgH;IAChH,qEAAqE;IACrE,IAAI,yBAAyB,EAAE,CAAC;QAC9B,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YACpC,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;YAC9B,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;YAC5B,IAAI,cAAc,GAAG,OAAO,CAAC,YAAkC,CAAC;YAChE,iGAAiG;YACjG,OAAO,cAAc,IAAI,cAAc,KAAK,yBAAyB,EAAE,CAAC;gBACtE,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC;gBAClC,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC;gBAChC,cAAc,GAAG,cAAc,CAAC,YAAkC,CAAC;YACrE,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACpD,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,qBAAqB,EAAE,CAAC;YACxF,OAAO;gBACL,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,6BAA6B,CAAC,GAAG;gBACxD,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,6BAA6B,CAAC,IAAI;gBAC3D,KAAK,EAAE,WAAW,CAAC,KAAK;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACzC,CAAC;AACH,CAAC"}
|