accented 0.0.1-dev.4 → 1.0.0

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 (217) hide show
  1. package/NOTICE +14 -0
  2. package/README.md +71 -0
  3. package/dist/accented.d.ts +28 -7
  4. package/dist/accented.d.ts.map +1 -1
  5. package/dist/accented.js +107 -42
  6. package/dist/accented.js.map +1 -1
  7. package/dist/common/tokens.d.ts +7 -0
  8. package/dist/common/tokens.d.ts.map +1 -0
  9. package/dist/common/tokens.js +8 -0
  10. package/dist/common/tokens.js.map +1 -0
  11. package/dist/constants.d.ts +4 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +4 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/dom-updater.d.ts +1 -6
  16. package/dist/dom-updater.d.ts.map +1 -1
  17. package/dist/dom-updater.js +136 -20
  18. package/dist/dom-updater.js.map +1 -1
  19. package/dist/elements/accented-dialog.d.ts +359 -0
  20. package/dist/elements/accented-dialog.d.ts.map +1 -0
  21. package/dist/elements/accented-dialog.js +377 -0
  22. package/dist/elements/accented-dialog.js.map +1 -0
  23. package/dist/elements/accented-trigger.d.ts +364 -0
  24. package/dist/elements/accented-trigger.d.ts.map +1 -0
  25. package/dist/elements/accented-trigger.js +214 -0
  26. package/dist/elements/accented-trigger.js.map +1 -0
  27. package/dist/fullscreen-listener.d.ts +2 -0
  28. package/dist/fullscreen-listener.d.ts.map +1 -0
  29. package/dist/fullscreen-listener.js +17 -0
  30. package/dist/fullscreen-listener.js.map +1 -0
  31. package/dist/intersection-observer.d.ts +5 -0
  32. package/dist/intersection-observer.d.ts.map +1 -0
  33. package/dist/intersection-observer.js +34 -0
  34. package/dist/intersection-observer.js.map +1 -0
  35. package/dist/log-and-rethrow.d.ts +2 -0
  36. package/dist/log-and-rethrow.d.ts.map +1 -0
  37. package/dist/log-and-rethrow.js +6 -0
  38. package/dist/log-and-rethrow.js.map +1 -0
  39. package/dist/logger.d.ts +2 -0
  40. package/dist/logger.d.ts.map +1 -0
  41. package/dist/logger.js +28 -0
  42. package/dist/logger.js.map +1 -0
  43. package/dist/register-elements.d.ts +2 -0
  44. package/dist/register-elements.d.ts.map +1 -0
  45. package/dist/register-elements.js +20 -0
  46. package/dist/register-elements.js.map +1 -0
  47. package/dist/resize-listener.d.ts +2 -0
  48. package/dist/resize-listener.d.ts.map +1 -0
  49. package/dist/resize-listener.js +17 -0
  50. package/dist/resize-listener.js.map +1 -0
  51. package/dist/scanner.d.ts +3 -0
  52. package/dist/scanner.d.ts.map +1 -0
  53. package/dist/scanner.js +153 -0
  54. package/dist/scanner.js.map +1 -0
  55. package/dist/scroll-listeners.d.ts +2 -0
  56. package/dist/scroll-listeners.d.ts.map +1 -0
  57. package/dist/scroll-listeners.js +37 -0
  58. package/dist/scroll-listeners.js.map +1 -0
  59. package/dist/state.d.ts +7 -0
  60. package/dist/state.d.ts.map +1 -0
  61. package/dist/state.js +16 -0
  62. package/dist/state.js.map +1 -0
  63. package/dist/task-queue.d.ts +5 -6
  64. package/dist/task-queue.d.ts.map +1 -1
  65. package/dist/task-queue.js +30 -25
  66. package/dist/task-queue.js.map +1 -1
  67. package/dist/types.d.ts +227 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +2 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/utils/are-elements-with-issues-equal.d.ts +3 -0
  72. package/dist/utils/are-elements-with-issues-equal.d.ts.map +1 -0
  73. package/dist/utils/are-elements-with-issues-equal.js +5 -0
  74. package/dist/utils/are-elements-with-issues-equal.js.map +1 -0
  75. package/dist/utils/are-issue-sets-equal.d.ts +3 -0
  76. package/dist/utils/are-issue-sets-equal.d.ts.map +1 -0
  77. package/dist/utils/are-issue-sets-equal.js +6 -0
  78. package/dist/utils/are-issue-sets-equal.js.map +1 -0
  79. package/dist/utils/containing-blocks.d.ts +3 -0
  80. package/dist/utils/containing-blocks.d.ts.map +1 -0
  81. package/dist/utils/containing-blocks.js +46 -0
  82. package/dist/utils/containing-blocks.js.map +1 -0
  83. package/dist/utils/contains.d.ts +2 -0
  84. package/dist/utils/contains.d.ts.map +1 -0
  85. package/dist/utils/contains.js +19 -0
  86. package/dist/utils/contains.js.map +1 -0
  87. package/dist/utils/deduplicate-nodes.d.ts +2 -0
  88. package/dist/utils/deduplicate-nodes.d.ts.map +1 -0
  89. package/dist/utils/deduplicate-nodes.js +4 -0
  90. package/dist/utils/deduplicate-nodes.js.map +1 -0
  91. package/dist/utils/deep-merge.d.ts +4 -0
  92. package/dist/utils/deep-merge.d.ts.map +1 -0
  93. package/dist/utils/deep-merge.js +21 -0
  94. package/dist/utils/deep-merge.js.map +1 -0
  95. package/dist/utils/dom-helpers.d.ts +9 -0
  96. package/dist/utils/dom-helpers.d.ts.map +1 -0
  97. package/dist/utils/dom-helpers.js +34 -0
  98. package/dist/utils/dom-helpers.js.map +1 -0
  99. package/dist/utils/ensure-non-empty.d.ts +2 -0
  100. package/dist/utils/ensure-non-empty.d.ts.map +1 -0
  101. package/dist/utils/ensure-non-empty.js +7 -0
  102. package/dist/utils/ensure-non-empty.js.map +1 -0
  103. package/dist/utils/get-element-html.d.ts +2 -0
  104. package/dist/utils/get-element-html.d.ts.map +1 -0
  105. package/dist/utils/get-element-html.js +16 -0
  106. package/dist/utils/get-element-html.js.map +1 -0
  107. package/dist/utils/get-element-position.d.ts +11 -0
  108. package/dist/utils/get-element-position.d.ts.map +1 -0
  109. package/dist/utils/get-element-position.js +70 -0
  110. package/dist/utils/get-element-position.js.map +1 -0
  111. package/dist/utils/get-parent.d.ts +2 -0
  112. package/dist/utils/get-parent.d.ts.map +1 -0
  113. package/dist/utils/get-parent.js +12 -0
  114. package/dist/utils/get-parent.js.map +1 -0
  115. package/dist/utils/get-scan-context.d.ts +3 -0
  116. package/dist/utils/get-scan-context.d.ts.map +1 -0
  117. package/dist/utils/get-scan-context.js +28 -0
  118. package/dist/utils/get-scan-context.js.map +1 -0
  119. package/dist/utils/get-scrollable-ancestors.d.ts +2 -0
  120. package/dist/utils/get-scrollable-ancestors.d.ts.map +1 -0
  121. package/dist/utils/get-scrollable-ancestors.js +19 -0
  122. package/dist/utils/get-scrollable-ancestors.js.map +1 -0
  123. package/dist/utils/is-node-in-scan-context.d.ts +3 -0
  124. package/dist/utils/is-node-in-scan-context.d.ts.map +1 -0
  125. package/dist/utils/is-node-in-scan-context.js +26 -0
  126. package/dist/utils/is-node-in-scan-context.js.map +1 -0
  127. package/dist/utils/is-non-empty.d.ts +2 -0
  128. package/dist/utils/is-non-empty.d.ts.map +1 -0
  129. package/dist/utils/is-non-empty.js +4 -0
  130. package/dist/utils/is-non-empty.js.map +1 -0
  131. package/dist/utils/normalize-context.d.ts +3 -0
  132. package/dist/utils/normalize-context.d.ts.map +1 -0
  133. package/dist/utils/normalize-context.js +59 -0
  134. package/dist/utils/normalize-context.js.map +1 -0
  135. package/dist/utils/recalculate-positions.d.ts +2 -0
  136. package/dist/utils/recalculate-positions.d.ts.map +1 -0
  137. package/dist/utils/recalculate-positions.js +27 -0
  138. package/dist/utils/recalculate-positions.js.map +1 -0
  139. package/dist/utils/recalculate-scrollable-ancestors.d.ts +2 -0
  140. package/dist/utils/recalculate-scrollable-ancestors.d.ts.map +1 -0
  141. package/dist/utils/recalculate-scrollable-ancestors.js +13 -0
  142. package/dist/utils/recalculate-scrollable-ancestors.js.map +1 -0
  143. package/dist/utils/shadow-dom-aware-mutation-observer.d.ts +10 -0
  144. package/dist/utils/shadow-dom-aware-mutation-observer.d.ts.map +1 -0
  145. package/dist/utils/shadow-dom-aware-mutation-observer.js +61 -0
  146. package/dist/utils/shadow-dom-aware-mutation-observer.js.map +1 -0
  147. package/dist/utils/supports-anchor-positioning.d.ts +6 -0
  148. package/dist/utils/supports-anchor-positioning.d.ts.map +1 -0
  149. package/dist/utils/supports-anchor-positioning.js +4 -0
  150. package/dist/utils/supports-anchor-positioning.js.map +1 -0
  151. package/dist/utils/transform-violations.d.ts +4 -0
  152. package/dist/utils/transform-violations.d.ts.map +1 -0
  153. package/dist/utils/transform-violations.js +61 -0
  154. package/dist/utils/transform-violations.js.map +1 -0
  155. package/dist/utils/update-elements-with-issues.d.ts +13 -0
  156. package/dist/utils/update-elements-with-issues.d.ts.map +1 -0
  157. package/dist/utils/update-elements-with-issues.js +96 -0
  158. package/dist/utils/update-elements-with-issues.js.map +1 -0
  159. package/dist/validate-options.d.ts +3 -0
  160. package/dist/validate-options.d.ts.map +1 -0
  161. package/dist/validate-options.js +129 -0
  162. package/dist/validate-options.js.map +1 -0
  163. package/package.json +21 -8
  164. package/src/accented.test.ts +24 -0
  165. package/src/accented.ts +130 -0
  166. package/src/common/tokens.ts +10 -0
  167. package/src/constants.ts +3 -0
  168. package/src/dom-updater.ts +165 -0
  169. package/src/elements/accented-dialog.ts +419 -0
  170. package/src/elements/accented-trigger.ts +251 -0
  171. package/src/fullscreen-listener.ts +21 -0
  172. package/src/intersection-observer.ts +39 -0
  173. package/src/log-and-rethrow.ts +8 -0
  174. package/src/logger.ts +36 -0
  175. package/src/register-elements.ts +21 -0
  176. package/src/resize-listener.ts +21 -0
  177. package/src/scanner.ts +195 -0
  178. package/src/scroll-listeners.ts +45 -0
  179. package/src/state.ts +35 -0
  180. package/src/task-queue.test.ts +136 -0
  181. package/src/task-queue.ts +61 -0
  182. package/src/types.ts +258 -0
  183. package/src/utils/are-elements-with-issues-equal.ts +11 -0
  184. package/src/utils/are-issue-sets-equal.test.ts +53 -0
  185. package/src/utils/are-issue-sets-equal.ts +12 -0
  186. package/src/utils/containing-blocks.ts +60 -0
  187. package/src/utils/contains.test.ts +54 -0
  188. package/src/utils/contains.ts +19 -0
  189. package/src/utils/deduplicate-nodes.ts +3 -0
  190. package/src/utils/deep-merge.test.ts +41 -0
  191. package/src/utils/deep-merge.ts +24 -0
  192. package/src/utils/dom-helpers.ts +42 -0
  193. package/src/utils/ensure-non-empty.ts +6 -0
  194. package/src/utils/get-element-html.ts +15 -0
  195. package/src/utils/get-element-position.ts +89 -0
  196. package/src/utils/get-parent.ts +14 -0
  197. package/src/utils/get-scan-context.test.ts +85 -0
  198. package/src/utils/get-scan-context.ts +36 -0
  199. package/src/utils/get-scrollable-ancestors.ts +22 -0
  200. package/src/utils/is-node-in-scan-context.test.ts +70 -0
  201. package/src/utils/is-node-in-scan-context.ts +29 -0
  202. package/src/utils/is-non-empty.ts +3 -0
  203. package/src/utils/normalize-context.test.ts +105 -0
  204. package/src/utils/normalize-context.ts +65 -0
  205. package/src/utils/recalculate-positions.ts +27 -0
  206. package/src/utils/recalculate-scrollable-ancestors.ts +13 -0
  207. package/src/utils/shadow-dom-aware-mutation-observer.ts +75 -0
  208. package/src/utils/supports-anchor-positioning.ts +7 -0
  209. package/src/utils/transform-violations.test.ts +128 -0
  210. package/src/utils/transform-violations.ts +74 -0
  211. package/src/utils/update-elements-with-issues.test.ts +371 -0
  212. package/src/utils/update-elements-with-issues.ts +144 -0
  213. package/src/validate-options.ts +184 -0
  214. package/dist/utils/issuesToElements.d.ts +0 -3
  215. package/dist/utils/issuesToElements.d.ts.map +0 -1
  216. package/dist/utils/issuesToElements.js +0 -16
  217. package/dist/utils/issuesToElements.js.map +0 -1
@@ -0,0 +1,377 @@
1
+ import { colorDark, colorLight, fontSystemMono, fontSystemSans } from '../common/tokens.js';
2
+ import { accentedUrl } from '../constants.js';
3
+ import { logAndRethrow } from '../log-and-rethrow.js';
4
+ import { getElementHtml } from '../utils/get-element-html.js';
5
+ import { isNonEmpty } from '../utils/is-non-empty.js';
6
+ // We want Accented to not throw an error in Node, and use static imports,
7
+ // so we can't export `class extends HTMLElement` because HTMLElement is not available in Node.
8
+ export const getAccentedDialog = () => {
9
+ const dialogTemplate = document.createElement('template');
10
+ dialogTemplate.innerHTML = `
11
+ <dialog dir="ltr" lang="en" aria-labelledby="title">
12
+ <div id="button-container">
13
+ <button id="close" aria-label="Close">✕</button>
14
+ </div>
15
+ <h2 id="title">Accessibility issues</h2>
16
+ <section id="element-html-container" aria-label="Element">
17
+ <code id="element-html"></code>
18
+ </section>
19
+ <ul id="issues"></ul>
20
+ <section id="footer">
21
+ <p>
22
+ Powered by
23
+ <a href="${accentedUrl}" target="_blank" aria-description="Opens in new tab">Accented</a>
24
+ and
25
+ <a href="https://github.com/dequelabs/axe-core" target="_blank" aria-description="Opens in new tab">axe-core</a>.
26
+ </p>
27
+ </section>
28
+ </dialog>
29
+ `;
30
+ const issueTemplate = document.createElement('template');
31
+ issueTemplate.innerHTML = `
32
+ <li>
33
+ <a target="_blank" aria-description="Opens in new tab"></a>
34
+ <div class="impact"></div>
35
+ <div class="description"></div>
36
+ </li>
37
+ `;
38
+ const descriptionTemplate = document.createElement('template');
39
+ descriptionTemplate.innerHTML = `
40
+ <span></span>
41
+ <ul></ul>
42
+ `;
43
+ const stylesheet = new CSSStyleSheet();
44
+ stylesheet.replaceSync(`
45
+ :host {
46
+ all: initial !important;
47
+
48
+ /* OKLCH stuff: https://oklch.com/ */
49
+ --light-color: ${colorLight};
50
+ --dark-color: ${colorDark};
51
+
52
+ --background-color: light-dark(var(--light-color), var(--dark-color));
53
+ --text-color: light-dark(var(--dark-color), var(--light-color));
54
+
55
+ --impact-lightness: 0.80;
56
+ --focus-lightness: 0.45;
57
+ @media (prefers-color-scheme: dark) {
58
+ --impact-lightness: 0.45;
59
+ --focus-lightness: 0.80;
60
+ }
61
+
62
+ --blue-hue: 230;
63
+ --gold-hue: 90;
64
+ --red-hue: 0;
65
+
66
+ /* Contrasts with background. */
67
+ --focus-color: oklch(var(--focus-lightness) 0.25 var(--blue-hue));
68
+
69
+ --impact-chroma: 0.16;
70
+
71
+ --impact-moderate-hue: var(--blue-hue);
72
+ --impact-serious-hue: var(--gold-hue);
73
+ --impact-critical-hue: var(--red-hue);
74
+
75
+ --impact-minor-color: oklch(var(--impact-lightness) 0 0);
76
+ --impact-moderate-color: oklch(var(--impact-lightness) var(--impact-chroma) var(--impact-moderate-hue));
77
+ --impact-serious-color: oklch(var(--impact-lightness) var(--impact-chroma) var(--impact-serious-hue));
78
+ --impact-critical-color: oklch(var(--impact-lightness) var(--impact-chroma) var(--impact-critical-hue));
79
+
80
+ --base-size: max(1rem, 16px);
81
+
82
+ /* Spacing and typography custom props, inspired by https://utopia.fyi (simplified). */
83
+
84
+ /* @link https://utopia.fyi/type/calculator?c=320,16,1.2,1240,16,1.2,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 */
85
+ --ratio: 1.2;
86
+ --step-0: var(--base-size);
87
+ --step-1: calc(var(--step-0) * var(--ratio));
88
+ --step-2: calc(var(--step-1) * var(--ratio));
89
+ --step-3: calc(var(--step-2) * var(--ratio));
90
+ --step-4: calc(var(--step-3) * var(--ratio));
91
+ --step--1: calc(var(--step-0) / var(--ratio));
92
+
93
+ /* @link https://utopia.fyi/space/calculator?c=320,16,1.2,1240,16,1.2,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 */
94
+ --space-3xs: calc(0.25 * var(--base-size));
95
+ --space-2xs: calc(0.5 * var(--base-size));
96
+ --space-xs: calc(0.75 * var(--base-size));
97
+ --space-s: var(--base-size);
98
+ --space-m: calc(1.5 * var(--base-size));
99
+ --space-l: calc(2 * var(--base-size));
100
+ --space-xl: calc(3 * var(--base-size));
101
+ --space-2xl: calc(4 * var(--base-size));
102
+ --space-3xl: calc(6 * var(--base-size));
103
+ }
104
+
105
+ a[href], button {
106
+ outline-offset: 2px;
107
+ outline-color: var(--focus-color);
108
+ outline-width: 2px;
109
+ outline-style: none;
110
+
111
+ &:focus-visible {
112
+ outline-style: solid;
113
+ }
114
+
115
+ /* We should probably be comfortable with showing these styles on non-hover devices. */
116
+ &:hover:not(:focus-visible) {
117
+ outline-style: dashed;
118
+ }
119
+ }
120
+
121
+ a[href] {
122
+ color: currentColor;
123
+ }
124
+
125
+ a[href][target="_blank"]::after {
126
+ content: " ↗";
127
+ }
128
+
129
+ dialog {
130
+ box-sizing: border-box;
131
+ overflow-wrap: break-word;
132
+ font-family: ${fontSystemSans};
133
+ line-height: 1.5;
134
+ text-wrap: pretty;
135
+ background-color: var(--background-color);
136
+ color: var(--text-color);
137
+ border: 2px solid currentColor;
138
+ padding: var(--space-l);
139
+ inline-size: min(90ch, calc(100% - var(--space-s)* 2));
140
+ max-block-size: calc(100% - var(--space-s) * 2);
141
+
142
+ color-scheme: light dark;
143
+ }
144
+
145
+ #button-container {
146
+ text-align: end;
147
+ }
148
+
149
+ #close {
150
+ background-color: var(--background-color);
151
+ color: var(--text-color);
152
+ border: 2px solid currentColor;
153
+ padding-inline: var(--space-2xs);
154
+ aspect-ratio: 1 / 1;
155
+ font-size: var(--step-0);
156
+ }
157
+
158
+ h2 {
159
+ font-size: var(--step-4);
160
+ line-height: 1.2;
161
+ margin-block-start: var(--space-s);
162
+ margin-block-end: 0;
163
+ }
164
+
165
+ #element-html-container {
166
+ padding: var(--space-xs);
167
+ border: 2px solid currentColor;
168
+ margin-block-start: var(--space-l);
169
+ }
170
+
171
+ code {
172
+ font-family: ${fontSystemMono};
173
+ font-size: var(--step--1);
174
+ }
175
+
176
+ #issues {
177
+ font-size: var(--step-1);
178
+ margin-block-start: var(--space-l);
179
+ padding-inline: 0;
180
+ list-style: none;
181
+
182
+ & > li:not(:first-child) {
183
+ margin-block-start: var(--space-m);
184
+ }
185
+
186
+ a {
187
+ font-weight: 500;
188
+ }
189
+ }
190
+
191
+ .impact {
192
+ margin-block-start: var(--space-2xs);
193
+ font-size: var(--step--1);
194
+
195
+ inline-size: fit-content;
196
+ padding-inline: var(--space-3xs);
197
+
198
+ &[data-impact="minor"] {
199
+ background-color: var(--impact-minor-color);
200
+ }
201
+ &[data-impact="moderate"] {
202
+ background-color: var(--impact-moderate-color);
203
+ }
204
+ &[data-impact="serious"] {
205
+ background-color: var(--impact-serious-color);
206
+ }
207
+ &[data-impact="critical"] {
208
+ background-color: var(--impact-critical-color);
209
+ }
210
+ }
211
+
212
+ .description {
213
+ margin-block-start: var(--space-2xs);
214
+ font-size: var(--step--1);
215
+
216
+ li {
217
+ list-style-type: disc;
218
+ }
219
+ }
220
+
221
+ #footer {
222
+ margin-block-start: var(--space-l);
223
+ font-size: var(--step--1);
224
+
225
+ p {
226
+ margin: 0;
227
+ text-align: end;
228
+ }
229
+ }
230
+ `);
231
+ return class extends HTMLElement {
232
+ #abortController;
233
+ issues;
234
+ element;
235
+ open = false;
236
+ constructor() {
237
+ super();
238
+ try {
239
+ this.attachShadow({ mode: 'open' });
240
+ const content = dialogTemplate.content.cloneNode(true);
241
+ if (this.shadowRoot) {
242
+ this.shadowRoot.adoptedStyleSheets.push(stylesheet);
243
+ this.shadowRoot.append(content);
244
+ }
245
+ }
246
+ catch (error) {
247
+ logAndRethrow(error);
248
+ }
249
+ }
250
+ connectedCallback() {
251
+ try {
252
+ if (this.shadowRoot) {
253
+ const { shadowRoot } = this;
254
+ const dialog = shadowRoot.querySelector('dialog');
255
+ const closeButton = shadowRoot.querySelector('#close');
256
+ this.#abortController = new AbortController();
257
+ closeButton?.addEventListener('click', () => {
258
+ try {
259
+ dialog?.close();
260
+ }
261
+ catch (error) {
262
+ logAndRethrow(error);
263
+ }
264
+ }, { signal: this.#abortController.signal });
265
+ dialog?.addEventListener('click', (event) => {
266
+ try {
267
+ this.#onDialogClick(event);
268
+ }
269
+ catch (error) {
270
+ logAndRethrow(error);
271
+ }
272
+ }, { signal: this.#abortController.signal });
273
+ dialog?.addEventListener('keydown', (event) => {
274
+ try {
275
+ if (event.key === 'Escape') {
276
+ event.stopPropagation();
277
+ }
278
+ }
279
+ catch (error) {
280
+ logAndRethrow(error);
281
+ }
282
+ }, { signal: this.#abortController.signal });
283
+ if (this.issues) {
284
+ const issues = this.issues.value;
285
+ const issuesList = shadowRoot.getElementById('issues');
286
+ if (issuesList) {
287
+ issuesList.innerHTML = '';
288
+ for (const issue of issues) {
289
+ const issueContent = issueTemplate.content.cloneNode(true);
290
+ const title = issueContent.querySelector('a');
291
+ const impact = issueContent.querySelector('.impact');
292
+ const description = issueContent.querySelector('.description');
293
+ if (title && impact && description) {
294
+ title.textContent = `${issue.title} (${issue.id})`;
295
+ title.href = issue.url;
296
+ impact.textContent = `User impact: ${issue.impact}`;
297
+ impact.setAttribute('data-impact', String(issue.impact));
298
+ const descriptionItems = issue.description.split(/\n\s*/);
299
+ const descriptionContent = descriptionTemplate.content.cloneNode(true);
300
+ const descriptionTitle = descriptionContent.querySelector('span');
301
+ const descriptionList = descriptionContent.querySelector('ul');
302
+ if (descriptionTitle &&
303
+ descriptionList &&
304
+ isNonEmpty(descriptionItems) &&
305
+ descriptionItems.length > 1) {
306
+ descriptionTitle.textContent = descriptionItems[0];
307
+ for (const descriptionItem of descriptionItems.slice(1)) {
308
+ const li = document.createElement('li');
309
+ li.textContent = descriptionItem;
310
+ descriptionList.appendChild(li);
311
+ }
312
+ description.appendChild(descriptionContent);
313
+ }
314
+ }
315
+ issuesList.appendChild(issueContent);
316
+ }
317
+ }
318
+ }
319
+ if (this.element) {
320
+ const elementHtmlContainer = shadowRoot.getElementById('element-html');
321
+ if (elementHtmlContainer) {
322
+ elementHtmlContainer.textContent = getElementHtml(this.element);
323
+ }
324
+ }
325
+ dialog?.addEventListener('close', () => {
326
+ try {
327
+ this.open = false;
328
+ this.dispatchEvent(new Event('close'));
329
+ }
330
+ catch (error) {
331
+ logAndRethrow(error);
332
+ }
333
+ }, { signal: this.#abortController.signal });
334
+ }
335
+ }
336
+ catch (error) {
337
+ logAndRethrow(error);
338
+ }
339
+ }
340
+ disconnectedCallback() {
341
+ try {
342
+ if (this.#abortController) {
343
+ this.#abortController.abort();
344
+ }
345
+ }
346
+ catch (error) {
347
+ logAndRethrow(error);
348
+ }
349
+ }
350
+ showModal() {
351
+ if (this.shadowRoot) {
352
+ const dialog = this.shadowRoot.querySelector('dialog');
353
+ if (dialog) {
354
+ dialog.showModal();
355
+ this.open = true;
356
+ }
357
+ }
358
+ }
359
+ #onDialogClick(event) {
360
+ const dialog = event.currentTarget;
361
+ if (!dialog ||
362
+ typeof dialog.getBoundingClientRect !== 'function' ||
363
+ typeof dialog.close !== 'function') {
364
+ return;
365
+ }
366
+ const rect = dialog.getBoundingClientRect();
367
+ const isInsideDialog = event.clientX >= rect.left &&
368
+ event.clientX <= rect.right &&
369
+ event.clientY >= rect.top &&
370
+ event.clientY <= rect.bottom;
371
+ if (!isInsideDialog) {
372
+ dialog.close();
373
+ }
374
+ }
375
+ };
376
+ };
377
+ //# sourceMappingURL=accented-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accented-dialog.js","sourceRoot":"","sources":["../../src/elements/accented-dialog.ts"],"names":[],"mappings":"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"}