accented 0.0.1-dev.3 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +214 -0
  2. package/dist/accented.d.ts +28 -7
  3. package/dist/accented.d.ts.map +1 -1
  4. package/dist/accented.js +100 -42
  5. package/dist/accented.js.map +1 -1
  6. package/dist/constants.d.ts +3 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +3 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/dom-updater.d.ts +1 -6
  11. package/dist/dom-updater.d.ts.map +1 -1
  12. package/dist/dom-updater.js +94 -20
  13. package/dist/dom-updater.js.map +1 -1
  14. package/dist/elements/accented-dialog.d.ts +356 -0
  15. package/dist/elements/accented-dialog.d.ts.map +1 -0
  16. package/dist/elements/accented-dialog.js +361 -0
  17. package/dist/elements/accented-dialog.js.map +1 -0
  18. package/dist/elements/accented-trigger.d.ts +359 -0
  19. package/dist/elements/accented-trigger.d.ts.map +1 -0
  20. package/dist/elements/accented-trigger.js +159 -0
  21. package/dist/elements/accented-trigger.js.map +1 -0
  22. package/dist/intersection-observer.d.ts +5 -0
  23. package/dist/intersection-observer.d.ts.map +1 -0
  24. package/dist/intersection-observer.js +28 -0
  25. package/dist/intersection-observer.js.map +1 -0
  26. package/dist/log-and-rethrow.d.ts +2 -0
  27. package/dist/log-and-rethrow.d.ts.map +1 -0
  28. package/dist/log-and-rethrow.js +7 -0
  29. package/dist/log-and-rethrow.js.map +1 -0
  30. package/dist/logger.d.ts +2 -0
  31. package/dist/logger.d.ts.map +1 -0
  32. package/dist/logger.js +25 -0
  33. package/dist/logger.js.map +1 -0
  34. package/dist/register-elements.d.ts +2 -0
  35. package/dist/register-elements.d.ts.map +1 -0
  36. package/dist/register-elements.js +21 -0
  37. package/dist/register-elements.js.map +1 -0
  38. package/dist/resize-listener.d.ts +2 -0
  39. package/dist/resize-listener.d.ts.map +1 -0
  40. package/dist/resize-listener.js +18 -0
  41. package/dist/resize-listener.js.map +1 -0
  42. package/dist/scanner.d.ts +3 -0
  43. package/dist/scanner.d.ts.map +1 -0
  44. package/dist/scanner.js +120 -0
  45. package/dist/scanner.js.map +1 -0
  46. package/dist/scroll-listeners.d.ts +2 -0
  47. package/dist/scroll-listeners.d.ts.map +1 -0
  48. package/dist/scroll-listeners.js +38 -0
  49. package/dist/scroll-listeners.js.map +1 -0
  50. package/dist/state.d.ts +6 -0
  51. package/dist/state.d.ts.map +1 -0
  52. package/dist/state.js +14 -0
  53. package/dist/state.js.map +1 -0
  54. package/dist/task-queue.d.ts +3 -4
  55. package/dist/task-queue.d.ts.map +1 -1
  56. package/dist/task-queue.js +27 -23
  57. package/dist/task-queue.js.map +1 -1
  58. package/dist/types.d.ts +136 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils/are-issue-sets-equal.d.ts +3 -0
  63. package/dist/utils/are-issue-sets-equal.d.ts.map +1 -0
  64. package/dist/utils/are-issue-sets-equal.js +6 -0
  65. package/dist/utils/are-issue-sets-equal.js.map +1 -0
  66. package/dist/utils/deep-merge.d.ts +4 -0
  67. package/dist/utils/deep-merge.d.ts.map +1 -0
  68. package/dist/utils/deep-merge.js +18 -0
  69. package/dist/utils/deep-merge.js.map +1 -0
  70. package/dist/utils/get-element-html.d.ts +2 -0
  71. package/dist/utils/get-element-html.d.ts.map +1 -0
  72. package/dist/utils/get-element-html.js +14 -0
  73. package/dist/utils/get-element-html.js.map +1 -0
  74. package/dist/utils/get-element-position.d.ts +3 -0
  75. package/dist/utils/get-element-position.d.ts.map +1 -0
  76. package/dist/utils/get-element-position.js +22 -0
  77. package/dist/utils/get-element-position.js.map +1 -0
  78. package/dist/utils/get-scrollable-ancestors.d.ts +2 -0
  79. package/dist/utils/get-scrollable-ancestors.d.ts.map +1 -0
  80. package/dist/utils/get-scrollable-ancestors.js +15 -0
  81. package/dist/utils/get-scrollable-ancestors.js.map +1 -0
  82. package/dist/utils/recalculate-positions.d.ts +2 -0
  83. package/dist/utils/recalculate-positions.d.ts.map +1 -0
  84. package/dist/utils/recalculate-positions.js +27 -0
  85. package/dist/utils/recalculate-positions.js.map +1 -0
  86. package/dist/utils/recalculate-scrollable-ancestors.d.ts +2 -0
  87. package/dist/utils/recalculate-scrollable-ancestors.d.ts.map +1 -0
  88. package/dist/utils/recalculate-scrollable-ancestors.js +13 -0
  89. package/dist/utils/recalculate-scrollable-ancestors.js.map +1 -0
  90. package/dist/utils/supports-anchor-positioning.d.ts +6 -0
  91. package/dist/utils/supports-anchor-positioning.d.ts.map +1 -0
  92. package/dist/utils/supports-anchor-positioning.js +4 -0
  93. package/dist/utils/supports-anchor-positioning.js.map +1 -0
  94. package/dist/utils/transform-violations.d.ts +4 -0
  95. package/dist/utils/transform-violations.d.ts.map +1 -0
  96. package/dist/utils/transform-violations.js +48 -0
  97. package/dist/utils/transform-violations.js.map +1 -0
  98. package/dist/utils/update-elements-with-issues.d.ts +7 -0
  99. package/dist/utils/update-elements-with-issues.d.ts.map +1 -0
  100. package/dist/utils/update-elements-with-issues.js +64 -0
  101. package/dist/utils/update-elements-with-issues.js.map +1 -0
  102. package/dist/validate-options.d.ts +3 -0
  103. package/dist/validate-options.d.ts.map +1 -0
  104. package/dist/validate-options.js +42 -0
  105. package/dist/validate-options.js.map +1 -0
  106. package/package.json +8 -3
  107. package/src/accented.test.ts +24 -0
  108. package/src/accented.ts +119 -0
  109. package/src/constants.ts +2 -0
  110. package/src/dom-updater.ts +112 -0
  111. package/src/elements/accented-dialog.ts +384 -0
  112. package/src/elements/accented-trigger.ts +179 -0
  113. package/src/intersection-observer.ts +28 -0
  114. package/src/log-and-rethrow.ts +9 -0
  115. package/src/logger.ts +26 -0
  116. package/src/register-elements.ts +21 -0
  117. package/src/resize-listener.ts +17 -0
  118. package/src/scanner.ts +139 -0
  119. package/src/scroll-listeners.ts +37 -0
  120. package/src/state.ts +24 -0
  121. package/src/task-queue.test.ts +135 -0
  122. package/src/task-queue.ts +59 -0
  123. package/src/types.ts +155 -0
  124. package/src/utils/are-issue-sets-equal.test.ts +49 -0
  125. package/src/utils/are-issue-sets-equal.ts +10 -0
  126. package/src/utils/deep-merge.test.ts +34 -0
  127. package/src/utils/deep-merge.ts +18 -0
  128. package/src/utils/get-element-html.ts +13 -0
  129. package/src/utils/get-element-position.ts +21 -0
  130. package/src/utils/get-scrollable-ancestors.ts +14 -0
  131. package/src/utils/recalculate-positions.ts +27 -0
  132. package/src/utils/recalculate-scrollable-ancestors.ts +13 -0
  133. package/src/utils/supports-anchor-positioning.ts +7 -0
  134. package/src/utils/transform-violations.test.ts +124 -0
  135. package/src/utils/transform-violations.ts +56 -0
  136. package/src/utils/update-elements-with-issues.test.ts +283 -0
  137. package/src/utils/update-elements-with-issues.ts +75 -0
  138. package/src/validate-options.ts +44 -0
  139. package/dist/utils/issuesToElements.d.ts +0 -3
  140. package/dist/utils/issuesToElements.d.ts.map +0 -1
  141. package/dist/utils/issuesToElements.js +0 -16
  142. package/dist/utils/issuesToElements.js.map +0 -1
  143. package/dist/whatever.d.ts +0 -2
  144. package/dist/whatever.d.ts.map +0 -1
  145. package/dist/whatever.js +0 -2
  146. package/dist/whatever.js.map +0 -1
@@ -0,0 +1,359 @@
1
+ import type { AccentedDialog } from './accented-dialog';
2
+ import type { Position } from '../types';
3
+ import type { Signal } from '@preact/signals-core';
4
+ export interface AccentedTrigger extends HTMLElement {
5
+ element: Element | undefined;
6
+ dialog: AccentedDialog | undefined;
7
+ position: Signal<Position> | undefined;
8
+ visible: Signal<boolean> | undefined;
9
+ }
10
+ declare const _default: (name: string) => {
11
+ new (): {
12
+ "__#2@#abortController": AbortController | undefined;
13
+ "__#2@#dialogCloseAbortController": AbortController | undefined;
14
+ "__#2@#disposeOfPositionEffect": (() => void) | undefined;
15
+ "__#2@#disposeOfVisibilityEffect": (() => void) | undefined;
16
+ element: Element | undefined;
17
+ dialog: AccentedDialog | undefined;
18
+ position: Signal<Position> | undefined;
19
+ visible: Signal<boolean> | undefined;
20
+ connectedCallback(): void;
21
+ disconnectedCallback(): void;
22
+ accessKey: string;
23
+ readonly accessKeyLabel: string;
24
+ autocapitalize: string;
25
+ dir: string;
26
+ draggable: boolean;
27
+ hidden: boolean;
28
+ inert: boolean;
29
+ innerText: string;
30
+ lang: string;
31
+ readonly offsetHeight: number;
32
+ readonly offsetLeft: number;
33
+ readonly offsetParent: Element | null;
34
+ readonly offsetTop: number;
35
+ readonly offsetWidth: number;
36
+ outerText: string;
37
+ popover: string | null;
38
+ spellcheck: boolean;
39
+ title: string;
40
+ translate: boolean;
41
+ writingSuggestions: string;
42
+ attachInternals(): ElementInternals;
43
+ click(): void;
44
+ hidePopover(): void;
45
+ showPopover(): void;
46
+ togglePopover(force?: boolean): boolean;
47
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
48
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
49
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
50
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
51
+ readonly attributes: NamedNodeMap;
52
+ readonly classList: DOMTokenList;
53
+ className: string;
54
+ readonly clientHeight: number;
55
+ readonly clientLeft: number;
56
+ readonly clientTop: number;
57
+ readonly clientWidth: number;
58
+ readonly currentCSSZoom: number;
59
+ id: string;
60
+ innerHTML: string;
61
+ readonly localName: string;
62
+ readonly namespaceURI: string | null;
63
+ onfullscreenchange: ((this: Element, ev: Event) => any) | null;
64
+ onfullscreenerror: ((this: Element, ev: Event) => any) | null;
65
+ outerHTML: string;
66
+ readonly ownerDocument: Document;
67
+ readonly part: DOMTokenList;
68
+ readonly prefix: string | null;
69
+ readonly scrollHeight: number;
70
+ scrollLeft: number;
71
+ scrollTop: number;
72
+ readonly scrollWidth: number;
73
+ readonly shadowRoot: ShadowRoot | null;
74
+ slot: string;
75
+ readonly tagName: string;
76
+ attachShadow(init: ShadowRootInit): ShadowRoot;
77
+ checkVisibility(options?: CheckVisibilityOptions): boolean;
78
+ closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;
79
+ closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;
80
+ closest<K extends keyof MathMLElementTagNameMap>(selector: K): MathMLElementTagNameMap[K] | null;
81
+ closest<E extends Element = Element>(selectors: string): E | null;
82
+ computedStyleMap(): StylePropertyMapReadOnly;
83
+ getAttribute(qualifiedName: string): string | null;
84
+ getAttributeNS(namespace: string | null, localName: string): string | null;
85
+ getAttributeNames(): string[];
86
+ getAttributeNode(qualifiedName: string): Attr | null;
87
+ getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;
88
+ getBoundingClientRect(): DOMRect;
89
+ getClientRects(): DOMRectList;
90
+ getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
91
+ getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;
92
+ getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;
93
+ getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;
94
+ getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;
95
+ getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
96
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
97
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
98
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf<MathMLElement>;
99
+ getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
100
+ getHTML(options?: GetHTMLOptions): string;
101
+ hasAttribute(qualifiedName: string): boolean;
102
+ hasAttributeNS(namespace: string | null, localName: string): boolean;
103
+ hasAttributes(): boolean;
104
+ hasPointerCapture(pointerId: number): boolean;
105
+ insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
106
+ insertAdjacentHTML(position: InsertPosition, string: string): void;
107
+ insertAdjacentText(where: InsertPosition, data: string): void;
108
+ matches(selectors: string): boolean;
109
+ releasePointerCapture(pointerId: number): void;
110
+ removeAttribute(qualifiedName: string): void;
111
+ removeAttributeNS(namespace: string | null, localName: string): void;
112
+ removeAttributeNode(attr: Attr): Attr;
113
+ requestFullscreen(options?: FullscreenOptions): Promise<void>;
114
+ requestPointerLock(options?: PointerLockOptions): Promise<void>;
115
+ scroll(options?: ScrollToOptions): void;
116
+ scroll(x: number, y: number): void;
117
+ scrollBy(options?: ScrollToOptions): void;
118
+ scrollBy(x: number, y: number): void;
119
+ scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;
120
+ scrollTo(options?: ScrollToOptions): void;
121
+ scrollTo(x: number, y: number): void;
122
+ setAttribute(qualifiedName: string, value: string): void;
123
+ setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
124
+ setAttributeNode(attr: Attr): Attr | null;
125
+ setAttributeNodeNS(attr: Attr): Attr | null;
126
+ setHTMLUnsafe(html: string): void;
127
+ setPointerCapture(pointerId: number): void;
128
+ toggleAttribute(qualifiedName: string, force?: boolean): boolean;
129
+ webkitMatchesSelector(selectors: string): boolean;
130
+ readonly baseURI: string;
131
+ readonly childNodes: NodeListOf<ChildNode>;
132
+ readonly firstChild: ChildNode | null;
133
+ readonly isConnected: boolean;
134
+ readonly lastChild: ChildNode | null;
135
+ readonly nextSibling: ChildNode | null;
136
+ readonly nodeName: string;
137
+ readonly nodeType: number;
138
+ nodeValue: string | null;
139
+ readonly parentElement: HTMLElement | null;
140
+ readonly parentNode: ParentNode | null;
141
+ readonly previousSibling: ChildNode | null;
142
+ textContent: string | null;
143
+ appendChild<T extends Node>(node: T): T;
144
+ cloneNode(deep?: boolean): Node;
145
+ compareDocumentPosition(other: Node): number;
146
+ contains(other: Node | null): boolean;
147
+ getRootNode(options?: GetRootNodeOptions): Node;
148
+ hasChildNodes(): boolean;
149
+ insertBefore<T extends Node>(node: T, child: Node | null): T;
150
+ isDefaultNamespace(namespace: string | null): boolean;
151
+ isEqualNode(otherNode: Node | null): boolean;
152
+ isSameNode(otherNode: Node | null): boolean;
153
+ lookupNamespaceURI(prefix: string | null): string | null;
154
+ lookupPrefix(namespace: string | null): string | null;
155
+ normalize(): void;
156
+ removeChild<T extends Node>(child: T): T;
157
+ replaceChild<T extends Node>(node: Node, child: T): T;
158
+ readonly ELEMENT_NODE: 1;
159
+ readonly ATTRIBUTE_NODE: 2;
160
+ readonly TEXT_NODE: 3;
161
+ readonly CDATA_SECTION_NODE: 4;
162
+ readonly ENTITY_REFERENCE_NODE: 5;
163
+ readonly ENTITY_NODE: 6;
164
+ readonly PROCESSING_INSTRUCTION_NODE: 7;
165
+ readonly COMMENT_NODE: 8;
166
+ readonly DOCUMENT_NODE: 9;
167
+ readonly DOCUMENT_TYPE_NODE: 10;
168
+ readonly DOCUMENT_FRAGMENT_NODE: 11;
169
+ readonly NOTATION_NODE: 12;
170
+ readonly DOCUMENT_POSITION_DISCONNECTED: 1;
171
+ readonly DOCUMENT_POSITION_PRECEDING: 2;
172
+ readonly DOCUMENT_POSITION_FOLLOWING: 4;
173
+ readonly DOCUMENT_POSITION_CONTAINS: 8;
174
+ readonly DOCUMENT_POSITION_CONTAINED_BY: 16;
175
+ readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32;
176
+ dispatchEvent(event: Event): boolean;
177
+ ariaAtomic: string | null;
178
+ ariaAutoComplete: string | null;
179
+ ariaBrailleLabel: string | null;
180
+ ariaBrailleRoleDescription: string | null;
181
+ ariaBusy: string | null;
182
+ ariaChecked: string | null;
183
+ ariaColCount: string | null;
184
+ ariaColIndex: string | null;
185
+ ariaColIndexText: string | null;
186
+ ariaColSpan: string | null;
187
+ ariaCurrent: string | null;
188
+ ariaDescription: string | null;
189
+ ariaDisabled: string | null;
190
+ ariaExpanded: string | null;
191
+ ariaHasPopup: string | null;
192
+ ariaHidden: string | null;
193
+ ariaInvalid: string | null;
194
+ ariaKeyShortcuts: string | null;
195
+ ariaLabel: string | null;
196
+ ariaLevel: string | null;
197
+ ariaLive: string | null;
198
+ ariaModal: string | null;
199
+ ariaMultiLine: string | null;
200
+ ariaMultiSelectable: string | null;
201
+ ariaOrientation: string | null;
202
+ ariaPlaceholder: string | null;
203
+ ariaPosInSet: string | null;
204
+ ariaPressed: string | null;
205
+ ariaReadOnly: string | null;
206
+ ariaRequired: string | null;
207
+ ariaRoleDescription: string | null;
208
+ ariaRowCount: string | null;
209
+ ariaRowIndex: string | null;
210
+ ariaRowIndexText: string | null;
211
+ ariaRowSpan: string | null;
212
+ ariaSelected: string | null;
213
+ ariaSetSize: string | null;
214
+ ariaSort: string | null;
215
+ ariaValueMax: string | null;
216
+ ariaValueMin: string | null;
217
+ ariaValueNow: string | null;
218
+ ariaValueText: string | null;
219
+ role: string | null;
220
+ animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;
221
+ getAnimations(options?: GetAnimationsOptions): Animation[];
222
+ after(...nodes: (Node | string)[]): void;
223
+ before(...nodes: (Node | string)[]): void;
224
+ remove(): void;
225
+ replaceWith(...nodes: (Node | string)[]): void;
226
+ readonly nextElementSibling: Element | null;
227
+ readonly previousElementSibling: Element | null;
228
+ readonly childElementCount: number;
229
+ readonly children: HTMLCollection;
230
+ readonly firstElementChild: Element | null;
231
+ readonly lastElementChild: Element | null;
232
+ append(...nodes: (Node | string)[]): void;
233
+ prepend(...nodes: (Node | string)[]): void;
234
+ querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;
235
+ querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;
236
+ querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;
237
+ querySelector<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): HTMLElementDeprecatedTagNameMap[K] | null;
238
+ querySelector<E extends Element = Element>(selectors: string): E | null;
239
+ querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
240
+ querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
241
+ querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
242
+ querySelectorAll<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): NodeListOf<HTMLElementDeprecatedTagNameMap[K]>;
243
+ querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
244
+ replaceChildren(...nodes: (Node | string)[]): void;
245
+ readonly assignedSlot: HTMLSlotElement | null;
246
+ readonly attributeStyleMap: StylePropertyMap;
247
+ readonly style: CSSStyleDeclaration;
248
+ contentEditable: string;
249
+ enterKeyHint: string;
250
+ inputMode: string;
251
+ readonly isContentEditable: boolean;
252
+ onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
253
+ onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
254
+ onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
255
+ onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
256
+ onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
257
+ onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
258
+ onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;
259
+ onbeforetoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;
260
+ onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
261
+ oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;
262
+ oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
263
+ oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;
264
+ onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
265
+ onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
266
+ onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;
267
+ oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null;
268
+ oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
269
+ oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null;
270
+ oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
271
+ oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
272
+ oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
273
+ ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
274
+ ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
275
+ ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
276
+ ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
277
+ ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
278
+ ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
279
+ ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
280
+ ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
281
+ ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
282
+ onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;
283
+ onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;
284
+ onerror: OnErrorEventHandler;
285
+ onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
286
+ onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
287
+ ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
288
+ oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
289
+ oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
290
+ onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
291
+ onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
292
+ onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
293
+ onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;
294
+ onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
295
+ onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
296
+ onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
297
+ onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
298
+ onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
299
+ onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
300
+ onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
301
+ onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
302
+ onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
303
+ onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
304
+ onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
305
+ onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
306
+ onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;
307
+ onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
308
+ onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;
309
+ onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
310
+ onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
311
+ onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
312
+ onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
313
+ onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
314
+ onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
315
+ onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
316
+ onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
317
+ onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;
318
+ onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
319
+ onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;
320
+ onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
321
+ onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
322
+ onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
323
+ onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;
324
+ onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;
325
+ onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;
326
+ onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;
327
+ onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
328
+ onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
329
+ onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
330
+ onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;
331
+ onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;
332
+ onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
333
+ ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
334
+ ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;
335
+ ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
336
+ ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
337
+ ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
338
+ ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
339
+ ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
340
+ ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
341
+ ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
342
+ ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
343
+ onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
344
+ onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
345
+ onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
346
+ onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
347
+ onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
348
+ onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
349
+ onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
350
+ autofocus: boolean;
351
+ readonly dataset: DOMStringMap;
352
+ nonce?: string;
353
+ tabIndex: number;
354
+ blur(): void;
355
+ focus(options?: FocusOptions): void;
356
+ };
357
+ };
358
+ export default _default;
359
+ //# sourceMappingURL=accented-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accented-trigger.d.ts","sourceRoot":"","sources":["../../src/elements/accented-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;CACtC;+BAMqB,MAAM;;iCAmDN,eAAe,GAAG,SAAS;4CAEhB,eAAe,GAAG,SAAS;yCAE9B,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;2CAEtB,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;iBAE3C,OAAO,GAAG,SAAS;gBAEpB,cAAc,GAAG,SAAS;kBAExB,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;iBAE7B,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjExC,wBAgKE"}
@@ -0,0 +1,159 @@
1
+ import { effect } from '@preact/signals-core';
2
+ import supportsAnchorPositioning from '../utils/supports-anchor-positioning.js';
3
+ import logAndRethrow from '../log-and-rethrow.js';
4
+ const triggerSize = 'max(32px, 2rem)';
5
+ // We want Accented to not throw an error in Node, and use static imports,
6
+ // so we can't export `class extends HTMLElement` because HTMLElement is not available in Node.
7
+ export default (name) => {
8
+ const template = document.createElement('template');
9
+ // I initially tried creating a CSSStyelSheet object with styles instead of having a <style> element in the template,
10
+ // but that led to a hard-to-catch layout bug in Safari in CI that caused a test to fail.
11
+ // It seems that when using adoptedStyleSheets, the styles may be applied asynchronously,
12
+ // which may have caused the layout bug.
13
+ // Using a <style> element does not seem to lead to any performance issues, so I'm keeping it this way.
14
+ template.innerHTML = `
15
+ <style>
16
+ :host {
17
+ position: fixed !important;
18
+ inset-inline-end: anchor(self-end) !important;
19
+ inset-block-start: anchor(self-start) !important;
20
+
21
+ position-visibility: anchors-visible !important;
22
+
23
+ /* Revert potential effects of white-space: pre; set on a trigger's ancestor. */
24
+ white-space: normal !important;
25
+ }
26
+
27
+ #trigger {
28
+ box-sizing: border-box;
29
+ font-size: 1rem;
30
+ inline-size: ${triggerSize};
31
+ block-size: ${triggerSize};
32
+
33
+ /* Make it look better in forced-colors mode. */
34
+ border: 2px solid transparent;
35
+
36
+ background-color: var(--${name}-primary-color);
37
+ color: var(--${name}-secondary-color);
38
+
39
+ outline-offset: -4px;
40
+ outline-color: currentColor;
41
+ outline-width: 2px;
42
+ outline-style: none;
43
+
44
+ &:focus-visible {
45
+ outline-style: solid;
46
+ }
47
+
48
+ &:hover:not(:focus-visible) {
49
+ outline-style: dashed;
50
+ }
51
+ }
52
+ </style>
53
+ <button id="trigger" lang="en">⚠</button>
54
+ `;
55
+ return class extends HTMLElement {
56
+ #abortController;
57
+ #dialogCloseAbortController;
58
+ #disposeOfPositionEffect;
59
+ #disposeOfVisibilityEffect;
60
+ element;
61
+ dialog;
62
+ position;
63
+ visible;
64
+ constructor() {
65
+ try {
66
+ super();
67
+ this.attachShadow({ mode: 'open' });
68
+ const content = template.content.cloneNode(true);
69
+ if (this.shadowRoot) {
70
+ this.shadowRoot.append(content);
71
+ }
72
+ }
73
+ catch (error) {
74
+ logAndRethrow(error);
75
+ }
76
+ }
77
+ connectedCallback() {
78
+ try {
79
+ if (this.shadowRoot) {
80
+ const { shadowRoot } = this;
81
+ const trigger = shadowRoot.getElementById('trigger');
82
+ if (trigger && this.element) {
83
+ trigger.ariaLabel = `Accessibility issues in ${this.element.nodeName.toLowerCase()}`;
84
+ }
85
+ this.#abortController = new AbortController();
86
+ trigger?.addEventListener('click', (event) => {
87
+ try {
88
+ event.preventDefault();
89
+ // We append the dialog when the button is clicked,
90
+ // and remove it from the DOM when the dialog is closed.
91
+ // This gives us a performance improvement since Axe
92
+ // scan time seems to depend on the number of elements in the DOM.
93
+ if (this.dialog) {
94
+ this.#dialogCloseAbortController = new AbortController();
95
+ document.body.append(this.dialog);
96
+ this.dialog.showModal();
97
+ this.dialog.addEventListener('close', () => {
98
+ try {
99
+ this.dialog?.remove();
100
+ this.#dialogCloseAbortController?.abort();
101
+ }
102
+ catch (error) {
103
+ logAndRethrow(error);
104
+ }
105
+ }, { signal: this.#dialogCloseAbortController.signal });
106
+ }
107
+ }
108
+ catch (error) {
109
+ logAndRethrow(error);
110
+ }
111
+ }, { signal: this.#abortController.signal });
112
+ if (!supportsAnchorPositioning(window)) {
113
+ this.#disposeOfPositionEffect = effect(() => {
114
+ if (this.position && trigger) {
115
+ const position = this.position.value;
116
+ this.style.setProperty('top', `${position.blockStartTop}px`, 'important');
117
+ if (position.direction === 'ltr') {
118
+ this.style.setProperty('left', `calc(${position.inlineEndLeft}px - ${triggerSize})`, 'important');
119
+ }
120
+ else if (this.position.value.direction === 'rtl') {
121
+ this.style.setProperty('left', `${position.inlineEndLeft}px`, 'important');
122
+ }
123
+ }
124
+ });
125
+ this.#disposeOfVisibilityEffect = effect(() => {
126
+ this.style.setProperty('visibility', this.visible?.value ? 'visible' : 'hidden', 'important');
127
+ });
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ logAndRethrow(error);
133
+ }
134
+ }
135
+ disconnectedCallback() {
136
+ try {
137
+ if (this.#abortController) {
138
+ this.#abortController.abort();
139
+ }
140
+ if (this.#dialogCloseAbortController) {
141
+ this.#dialogCloseAbortController.abort();
142
+ this.dialog?.remove();
143
+ }
144
+ if (this.#disposeOfPositionEffect) {
145
+ this.#disposeOfPositionEffect();
146
+ this.#disposeOfPositionEffect = undefined;
147
+ }
148
+ if (this.#disposeOfVisibilityEffect) {
149
+ this.#disposeOfVisibilityEffect();
150
+ this.#disposeOfVisibilityEffect = undefined;
151
+ }
152
+ }
153
+ catch (error) {
154
+ logAndRethrow(error);
155
+ }
156
+ }
157
+ };
158
+ };
159
+ //# sourceMappingURL=accented-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accented-trigger.js","sourceRoot":"","sources":["../../src/elements/accented-trigger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,yBAAyB,MAAM,yCAAyC,CAAC;AAChF,OAAO,aAAa,MAAM,uBAAuB,CAAC;AASlD,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,0EAA0E;AAC1E,+FAA+F;AAC/F,eAAe,CAAC,IAAY,EAAE,EAAE;IAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAEpD,qHAAqH;IACrH,yFAAyF;IACzF,yFAAyF;IACzF,wCAAwC;IACxC,uGAAuG;IACvG,QAAQ,CAAC,SAAS,GAAG;;;;;;;;;;;;;;;;uBAgBA,WAAW;sBACZ,WAAW;;;;;kCAKC,IAAI;uBACf,IAAI;;;;;;;;;;;;;;;;;GAiBxB,CAAC;IAEF,OAAO,KAAM,SAAQ,WAAW;QAC9B,gBAAgB,CAA8B;QAE9C,2BAA2B,CAA8B;QAEzD,wBAAwB,CAA2B;QAEnD,0BAA0B,CAA2B;QAErD,OAAO,CAAsB;QAE7B,MAAM,CAA6B;QAEnC,QAAQ,CAA+B;QAEvC,OAAO,CAA8B;QAErC;YACE,IAAI,CAAC;gBACH,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,iBAAiB;YACf,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;oBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC5B,OAAO,CAAC,SAAS,GAAG,2BAA2B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvF,CAAC;oBACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;oBAC9C,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC3C,IAAI,CAAC;4BACH,KAAK,CAAC,cAAc,EAAE,CAAC;4BAEvB,mDAAmD;4BACnD,wDAAwD;4BACxD,oDAAoD;4BACpD,kEAAkE;4BAClE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gCAChB,IAAI,CAAC,2BAA2B,GAAG,IAAI,eAAe,EAAE,CAAC;gCACzD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAClC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gCACxB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oCACzC,IAAI,CAAC;wCACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;wCACtB,IAAI,CAAC,2BAA2B,EAAE,KAAK,EAAE,CAAC;oCAC5C,CAAC;oCAAC,OAAO,KAAK,EAAE,CAAC;wCACf,aAAa,CAAC,KAAK,CAAC,CAAC;oCACvB,CAAC;gCACH,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,CAAC,CAAC;4BAC1D,CAAC;wBACH,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,aAAa,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;oBACH,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;oBAE7C,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvC,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,GAAG,EAAE;4BAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;gCAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gCACrC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,WAAW,CAAC,CAAC;gCAC1E,IAAI,QAAQ,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oCACjC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,QAAQ,CAAC,aAAa,QAAQ,WAAW,GAAG,EAAE,WAAW,CAAC,CAAC;gCACpG,CAAC;qCAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oCACnD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,WAAW,CAAC,CAAC;gCAC7E,CAAC;4BACH,CAAC;wBACH,CAAC,CAAC,CAAC;wBAEH,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,GAAG,EAAE;4BAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAChG,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,oBAAoB;YAClB,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAChC,CAAC;gBACD,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBACrC,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;oBACzC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACxB,CAAC;gBACD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAClC,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAChC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;gBAC5C,CAAC;gBACD,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBACpC,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBAClC,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;gBAC9C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export default function setupIntersectionObserver(): {
2
+ intersectionObserver: IntersectionObserver;
3
+ disconnect: () => void;
4
+ };
5
+ //# sourceMappingURL=intersection-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intersection-observer.d.ts","sourceRoot":"","sources":["../src/intersection-observer.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,yBAAyB;;;EAuBhD"}
@@ -0,0 +1,28 @@
1
+ import logAndRethrow from './log-and-rethrow.js';
2
+ import { extendedElementsWithIssues } from './state.js';
3
+ import getElementPosition from './utils/get-element-position.js';
4
+ export default function setupIntersectionObserver() {
5
+ const intersectionObserver = new IntersectionObserver((entries) => {
6
+ try {
7
+ for (const entry of entries) {
8
+ const extendedElementWithIssues = extendedElementsWithIssues.value.find(el => el.element === entry.target);
9
+ if (extendedElementWithIssues) {
10
+ extendedElementWithIssues.visible.value = entry.isIntersecting;
11
+ if (entry.isIntersecting) {
12
+ extendedElementWithIssues.position.value = getElementPosition(entry.target, window);
13
+ }
14
+ }
15
+ }
16
+ }
17
+ catch (error) {
18
+ logAndRethrow(error);
19
+ }
20
+ }, { threshold: 0 });
21
+ return {
22
+ intersectionObserver,
23
+ disconnect: () => {
24
+ intersectionObserver.disconnect();
25
+ }
26
+ };
27
+ }
28
+ //# sourceMappingURL=intersection-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intersection-observer.js","sourceRoot":"","sources":["../src/intersection-observer.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,yBAAyB;IAC/C,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,yBAAyB,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3G,IAAI,yBAAyB,EAAE,CAAC;oBAC9B,yBAAyB,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;oBAC/D,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBACzB,yBAAyB,CAAC,QAAQ,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACtF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAErB,OAAO;QACL,oBAAoB;QACpB,UAAU,EAAE,GAAG,EAAE;YACf,oBAAoB,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function logAndRethrow(error: unknown): void;
2
+ //# sourceMappingURL=log-and-rethrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-and-rethrow.d.ts","sourceRoot":"","sources":["../src/log-and-rethrow.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,OAAO,QAMnD"}
@@ -0,0 +1,7 @@
1
+ import { issuesUrl } from './constants.js';
2
+ export default function logAndRethrow(error) {
3
+ console.error(`Accented threw an error (see below). Try updating your browser to the latest version. ` +
4
+ `If you’re still seeing the error, file an issue at ${issuesUrl}.`);
5
+ throw error;
6
+ }
7
+ //# sourceMappingURL=log-and-rethrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-and-rethrow.js","sourceRoot":"","sources":["../src/log-and-rethrow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAc;IAClD,OAAO,CAAC,KAAK,CACX,wFAAwF;QACtF,sDAAsD,SAAS,GAAG,CACrE,CAAC;IACF,MAAM,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function createLogger(): () => void;
2
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,YAAY,eAqBnC"}
package/dist/logger.js ADDED
@@ -0,0 +1,25 @@
1
+ import { effect } from '@preact/signals-core';
2
+ import { elementsWithIssues, enabled } from './state.js';
3
+ import { accentedUrl } from './constants.js';
4
+ export default function createLogger() {
5
+ let firstRun = true;
6
+ return effect(() => {
7
+ if (!enabled.value) {
8
+ return;
9
+ }
10
+ const elementCount = elementsWithIssues.value.length;
11
+ if (elementCount > 0) {
12
+ const issueCount = elementsWithIssues.value.reduce((acc, { issues }) => acc + issues.length, 0);
13
+ console.log(`${issueCount} accessibility issue${issueCount === 1 ? '' : 's'} found in ${elementCount} element${issueCount === 1 ? '' : 's'} (Accented, ${accentedUrl}):\n`, elementsWithIssues.value);
14
+ }
15
+ else {
16
+ if (firstRun) {
17
+ firstRun = false;
18
+ }
19
+ else {
20
+ console.log(`No accessibility issues found (Accented, ${accentedUrl}).`);
21
+ }
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,YAAY;IAElC,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,OAAO,MAAM,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;QACrD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,uBAAuB,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,YAAY,WAAW,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,WAAW,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxM,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,WAAW,IAAI,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function registerElements(name: string): void;
2
+ //# sourceMappingURL=register-elements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-elements.d.ts","sourceRoot":"","sources":["../src/register-elements.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAiB3D"}