@ploaness/config 1.12.0 → 1.13.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 (75) hide show
  1. package/dist/a11y.d.ts +13 -5
  2. package/dist/a11y.d.ts.map +1 -1
  3. package/dist/a11y.js +20 -11
  4. package/dist/a11y.js.map +1 -1
  5. package/dist/clock-preload.d.ts +2 -0
  6. package/dist/clock-preload.d.ts.map +1 -0
  7. package/dist/clock-preload.js +37 -0
  8. package/dist/clock-preload.js.map +1 -0
  9. package/dist/eslint-library.d.ts.map +1 -1
  10. package/dist/eslint-library.js +6 -1
  11. package/dist/eslint-library.js.map +1 -1
  12. package/dist/eslint-runtime.d.ts +11 -0
  13. package/dist/eslint-runtime.d.ts.map +1 -0
  14. package/dist/eslint-runtime.js +68 -0
  15. package/dist/eslint-runtime.js.map +1 -0
  16. package/dist/eslint.d.ts.map +1 -1
  17. package/dist/eslint.js +6 -1
  18. package/dist/eslint.js.map +1 -1
  19. package/dist/layout.d.ts +34 -16
  20. package/dist/layout.d.ts.map +1 -1
  21. package/dist/layout.js +228 -56
  22. package/dist/layout.js.map +1 -1
  23. package/dist/payload-view.d.ts +16 -0
  24. package/dist/payload-view.d.ts.map +1 -0
  25. package/dist/payload-view.js +35 -0
  26. package/dist/payload-view.js.map +1 -0
  27. package/dist/playwright.d.ts.map +1 -1
  28. package/dist/playwright.js +115 -12
  29. package/dist/playwright.js.map +1 -1
  30. package/dist/scanner.d.ts +99 -0
  31. package/dist/scanner.d.ts.map +1 -0
  32. package/dist/scanner.js +278 -0
  33. package/dist/scanner.js.map +1 -0
  34. package/dist/settle.d.ts +8 -6
  35. package/dist/settle.d.ts.map +1 -1
  36. package/dist/settle.js +55 -42
  37. package/dist/settle.js.map +1 -1
  38. package/dist/sweep-disclosures.d.ts +10 -0
  39. package/dist/sweep-disclosures.d.ts.map +1 -0
  40. package/dist/sweep-disclosures.js +179 -0
  41. package/dist/sweep-disclosures.js.map +1 -0
  42. package/dist/sweep-discovery.d.ts +15 -0
  43. package/dist/sweep-discovery.d.ts.map +1 -0
  44. package/dist/sweep-discovery.js +336 -0
  45. package/dist/sweep-discovery.js.map +1 -0
  46. package/dist/sweep-interaction.d.ts +19 -0
  47. package/dist/sweep-interaction.d.ts.map +1 -0
  48. package/dist/sweep-interaction.js +351 -0
  49. package/dist/sweep-interaction.js.map +1 -0
  50. package/dist/sweep-queue.d.ts +24 -0
  51. package/dist/sweep-queue.d.ts.map +1 -0
  52. package/dist/sweep-queue.js +56 -0
  53. package/dist/sweep-queue.js.map +1 -0
  54. package/dist/sweep-reflow.d.ts +17 -0
  55. package/dist/sweep-reflow.d.ts.map +1 -0
  56. package/dist/sweep-reflow.js +210 -0
  57. package/dist/sweep-reflow.js.map +1 -0
  58. package/dist/sweep-resting.d.ts +25 -0
  59. package/dist/sweep-resting.d.ts.map +1 -0
  60. package/dist/sweep-resting.js +98 -0
  61. package/dist/sweep-resting.js.map +1 -0
  62. package/dist/sweep-shared.d.ts +353 -0
  63. package/dist/sweep-shared.d.ts.map +1 -0
  64. package/dist/sweep-shared.js +434 -0
  65. package/dist/sweep-shared.js.map +1 -0
  66. package/dist/sweep.d.ts +14 -0
  67. package/dist/sweep.d.ts.map +1 -0
  68. package/dist/sweep.js +157 -0
  69. package/dist/sweep.js.map +1 -0
  70. package/dist/vitest-core.d.ts +1 -1
  71. package/dist/vitest-core.js +1 -1
  72. package/dist/vitest-library.d.ts.map +1 -1
  73. package/dist/vitest-library.js +2 -1
  74. package/dist/vitest-library.js.map +1 -1
  75. package/package.json +10 -2
package/dist/layout.js CHANGED
@@ -1,19 +1,5 @@
1
- // The layout scan's measurement: what a page reports about its own geometry, and the call that judges it.
2
- //
3
- // Every rule lives in `@ploaness/governance`, which judges a plain snapshot. This module is the one piece
4
- // that has to run inside the browser, and the one place the harness's viewports and the project's
5
- // stricter settings meet a page.
6
- //
7
- // WHY THE PAGE CODE IS ASSEMBLED FROM SOURCE TEXT. Playwright ships a page function to the browser as
8
- // its own source, so it can reach nothing at module scope. One function holding the whole measurement
9
- // would pass the callable cap several times over. Each step is therefore a top-level function of its
10
- // own, and `IN_PAGE_SOURCE` joins their texts into one expression that hands each step the others as
11
- // `tools`. A step names another only through that parameter, never directly, because in the page no
12
- // other binding exists.
13
- import { expect } from '@playwright/test';
14
- import { findLayoutDefects, layoutViewportsWith, } from '@ploaness/governance';
1
+ import { layoutViewportsWith, } from '@ploaness/governance';
15
2
  import { projectSettings } from './project-settings.js';
16
- import { settleForScan } from './settle.js';
17
3
  /** The viewports every layout scan runs at, the harness's own first. */
18
4
  export const LAYOUT_SCAN_VIEWPORTS = layoutViewportsWith(projectSettings.layoutViewports);
19
5
  const isClosedDetails = (element) => element.tagName.toLowerCase() === 'details' && element.getAttribute('open') === null;
@@ -27,6 +13,12 @@ const isHiddenByDisclosure = (element, tools) => {
27
13
  const isClosedBody = tools.isClosedDetails(parent) && parent.querySelector(':scope > summary') !== element;
28
14
  return isClosedBody || tools.isHiddenByDisclosure(parent, tools);
29
15
  };
16
+ // Outside a marked view only the ancestors that hold it are measured; on a page with no mark, every
17
+ // element is. The attribute is spelt out because this runs in the page: `payload-view.ts` sets it.
18
+ const isOutsideView = (element) => {
19
+ const roots = Array.from(document.querySelectorAll('[data-ploaness-view]'));
20
+ return (roots.length > 0 && !roots.some((root) => root.contains(element) || element.contains(root)));
21
+ };
30
22
  const roundRects = (rects) => Array.from(rects, (rect) => ({
31
23
  left: Math.round(rect.left + scrollX),
32
24
  top: Math.round(rect.top + scrollY),
@@ -78,13 +70,20 @@ const labelOf = (element, tools) => {
78
70
  .trim();
79
71
  return text.length === 0 ? `${tag}${name}` : `${tag}${name} "${text.slice(0, maxText)}"`;
80
72
  };
81
- const describe = (element, index, parent, tools) => {
73
+ // What decides how an element is painted against the others: its stacking order and any turn.
74
+ const paintOrderOf = (style) => ({
75
+ zIndex: style.getPropertyValue('z-index'),
76
+ transform: style.getPropertyValue('transform'),
77
+ rotate: style.getPropertyValue('rotate'),
78
+ });
79
+ const describe = (element, context, tools) => {
82
80
  const style = getComputedStyle(element);
83
81
  const read = (property) => style.getPropertyValue(property);
82
+ const attribute = (name) => element.getAttribute(name) ?? '';
84
83
  const isClipping = ['hidden', 'clip'].some((value) => [read('overflow-x'), read('overflow-y')].includes(value));
85
84
  return {
86
- index,
87
- parent,
85
+ index: context.index,
86
+ parent: context.parent,
88
87
  label: tools.labelOf(element, tools),
89
88
  tag: element.tagName.toLowerCase(),
90
89
  rects: tools.roundRects(element.getClientRects()),
@@ -94,6 +93,7 @@ const describe = (element, index, parent, tools) => {
94
93
  display: read('display'),
95
94
  visibility: read('visibility'),
96
95
  position: read('position'),
96
+ ...tools.paintOrderOf(style),
97
97
  backgroundColor: read('background-color'),
98
98
  backgroundImage: read('background-image'),
99
99
  boxShadow: read('box-shadow'),
@@ -108,18 +108,128 @@ const describe = (element, index, parent, tools) => {
108
108
  clientWidth: element.clientWidth,
109
109
  scrollHeight: element.scrollHeight,
110
110
  clientHeight: element.clientHeight,
111
- title: element.getAttribute('title') ?? '',
112
- ariaLabel: element.getAttribute('aria-label') ?? '',
111
+ title: attribute('title'),
112
+ ariaLabel: attribute('aria-label'),
113
113
  exemption: element.getAttribute('data-ploaness-layout') ?? undefined,
114
- exemptionReason: (element.getAttribute('data-ploaness-layout-reason') ?? '').trim(),
114
+ exemptionReason: attribute('data-ploaness-layout-reason').trim(),
115
+ fontSize: Number(read('font-size').replace('px', '')) || 0,
116
+ fontFamily: read('font-family'),
117
+ media: tools.mediaOf(element, style, context.sources, tools),
118
+ };
119
+ };
120
+ // The space a replaced element reserves before its source arrives is the box the same element takes
121
+ // with no source at all. A shallow copy with every source removed takes the element's own slot while the
122
+ // element is out of layout, and is read and removed again in the same task, so nothing is painted. Laid
123
+ // out beside the element instead, a flex or grid row would share its space between the two.
124
+ const reservedBoxOf = (element) => {
125
+ const placeholder = element.cloneNode(false);
126
+ for (const source of ['src', 'srcset', 'poster', 'srcdoc', 'data']) {
127
+ placeholder.removeAttribute(source);
128
+ }
129
+ placeholder.removeAttribute('id');
130
+ placeholder.setAttribute('alt', '');
131
+ placeholder.setAttribute('aria-hidden', 'true');
132
+ const ownStyle = element.getAttribute('style');
133
+ placeholder.setAttribute('style', `${ownStyle ?? ''};visibility:hidden`);
134
+ element.setAttribute('style', `${ownStyle ?? ''};display:none`);
135
+ element.before(placeholder);
136
+ const measured = placeholder.getBoundingClientRect();
137
+ placeholder.remove();
138
+ if (ownStyle === null) {
139
+ element.removeAttribute('style');
140
+ }
141
+ else {
142
+ element.setAttribute('style', ownStyle);
143
+ }
144
+ return measured;
145
+ };
146
+ const contentSizeOf = (box, style) => {
147
+ const pixels = (property) => Number(style.getPropertyValue(property).replace('px', '')) || 0;
148
+ const inset = (first, second) => pixels(`padding-${first}`) +
149
+ pixels(`padding-${second}`) +
150
+ pixels(`border-${first}-width`) +
151
+ pixels(`border-${second}-width`);
152
+ return {
153
+ contentWidth: Math.round(box.width - inset('left', 'right')),
154
+ contentHeight: Math.round(box.height - inset('top', 'bottom')),
155
+ };
156
+ };
157
+ // The source an element shows, and its pixel size: the file's own where it was decoded alone.
158
+ const loadedSourceOf = (element, sources) => {
159
+ const source = element.currentSrc ?? element.getAttribute('src') ?? '';
160
+ const file = sources.get(source) ?? {
161
+ width: element.naturalWidth ?? 0,
162
+ height: element.naturalHeight ?? 0,
163
+ };
164
+ return {
165
+ isVector: /\.svg(?:[?#]|$)|^data:image\/svg/iu.test(source),
166
+ naturalWidth: file.width,
167
+ naturalHeight: file.height,
168
+ };
169
+ };
170
+ const mediaOf = (element, style, sources, tools) => {
171
+ const tag = element.tagName.toLowerCase();
172
+ if (!['img', 'video', 'iframe', 'embed', 'object'].includes(tag)) {
173
+ return undefined;
174
+ }
175
+ const box = element.getBoundingClientRect();
176
+ const reserved = tools.reservedBoxOf(element);
177
+ return {
178
+ isComplete: tag !== 'img' || element.complete === true,
179
+ ...tools.loadedSourceOf(element, sources),
180
+ ...tools.contentSizeOf(box, style),
181
+ objectFit: style.getPropertyValue('object-fit'),
182
+ reservedWidth: Math.round(reserved.width),
183
+ reservedHeight: Math.round(reserved.height),
115
184
  };
116
185
  };
186
+ // An image chosen from a `srcset` reports its natural size divided by the density the browser assigned
187
+ // the candidate, which is the candidate's declared width over the slot `sizes` gives it. A server that
188
+ // will not enlarge a small original sends fewer pixels than the declared width, so that size understates
189
+ // the file. The same URL decoded by an image of its own, with no `srcset`, reports the file's pixels.
190
+ const sourceSizesOf = async () => {
191
+ const sources = [
192
+ ...new Set(Array.from(document.body.querySelectorAll('img'))
193
+ .filter((image) => image.getAttribute('srcset') !== null || image.parentElement?.tagName.toLowerCase() === 'picture')
194
+ .map((image) => image.currentSrc ?? '')
195
+ .filter((source) => source.length > 0)),
196
+ ];
197
+ const sized = await Promise.all(sources.map(async (source) => {
198
+ const probe = new Image();
199
+ probe.setAttribute('src', source);
200
+ try {
201
+ await probe.decode();
202
+ return [source, { width: probe.naturalWidth, height: probe.naturalHeight }];
203
+ }
204
+ catch {
205
+ return undefined;
206
+ }
207
+ }));
208
+ return new Map(sized.filter((entry) => entry !== undefined));
209
+ };
210
+ // The width sweep measures only geometry, so it skips the media placeholders and the font set.
211
+ const noMedia = () => undefined;
212
+ const noSourceSizes = () => Promise.resolve(new Map());
213
+ const noFontFaces = () => [];
214
+ const fontFacesOf = () => Array.from(document.fonts ?? [], (face) => ({
215
+ family: face.family,
216
+ status: face.status,
217
+ weight: face.weight,
218
+ style: face.style,
219
+ }));
117
220
  // The element list in document order, from `<body>` down. An SVG's own drawing is not layout: the
118
- // `<svg>` element is measured and what it draws inside is not.
119
- const measureDocument = (tools) => {
221
+ // `<svg>` element is measured and what it draws inside is not. Shared by the measurement and by the
222
+ // outline a failure screenshot draws, so a node index names the same element in both.
223
+ const measuredElements = (tools) => {
120
224
  const svgNamespace = 'http://www.w3.org/2000/svg';
121
- const elements = [document.body, ...Array.from(document.body.querySelectorAll('*'))].filter((element) => (element.namespaceURI !== svgNamespace || element.parentElement?.namespaceURI !== svgNamespace) &&
122
- !tools.isHiddenByDisclosure(element, tools));
225
+ return [document.body, ...Array.from(document.body.querySelectorAll('*'))].filter((element) => (element.namespaceURI !== svgNamespace || element.parentElement?.namespaceURI !== svgNamespace) &&
226
+ !tools.isHiddenByDisclosure(element, tools) &&
227
+ !tools.isOutsideView(element));
228
+ };
229
+ const measureDocument = async (tools) => {
230
+ // Decoded first, so the measurement below runs in one task with nothing awaited inside it.
231
+ const sources = await tools.sourceSizesOf();
232
+ const elements = tools.measuredElements(tools);
123
233
  const positions = new Map(elements.map((element, index) => [element, index]));
124
234
  const root = document.documentElement;
125
235
  return {
@@ -130,56 +240,118 @@ const measureDocument = (tools) => {
130
240
  nodes: elements.map((element, index) => {
131
241
  const parent = element.parentElement;
132
242
  const parentIndex = parent === null ? -1 : (positions.get(parent) ?? -1);
133
- return tools.describe(element, index, index === 0 ? -1 : parentIndex, tools);
243
+ return tools.describe(element, { index, parent: index === 0 ? -1 : parentIndex, sources }, tools);
134
244
  }),
245
+ fontFaces: tools.fontFacesOf(),
246
+ };
247
+ };
248
+ // Where an element sits among the measured elements, spelt as `keyOf` spells it in governance: each
249
+ // ancestor's tag and position among its measured siblings.
250
+ const keyOfElement = (element, tools) => {
251
+ const parent = element.parentElement;
252
+ const tag = element.tagName.toLowerCase();
253
+ if (parent === null || element === document.body) {
254
+ return tag;
255
+ }
256
+ const measured = tools.measuredElements(tools);
257
+ const siblings = Array.from(parent.children).filter((child) => measured.includes(child));
258
+ return `${tools.keyOfElement(parent, tools)}/${tag}:${String(siblings.indexOf(element))}`;
259
+ };
260
+ // One element named for a finding: its label, its key, and every exemption on it or an ancestor,
261
+ // nearest first. The focused element when no selector is given.
262
+ const describeTarget = (tools, selector) => {
263
+ const target = selector === null ? document.activeElement : document.querySelector(selector);
264
+ if (target === null || target === document.body) {
265
+ return undefined;
266
+ }
267
+ const chain = (element) => {
268
+ if (element === null) {
269
+ return [];
270
+ }
271
+ const rules = element.getAttribute('data-ploaness-layout');
272
+ const own = rules === null
273
+ ? []
274
+ : [
275
+ {
276
+ key: tools.keyOfElement(element, tools),
277
+ label: tools.labelOf(element, tools),
278
+ rules,
279
+ reason: (element.getAttribute('data-ploaness-layout-reason') ?? '').trim(),
280
+ },
281
+ ];
282
+ return [...own, ...chain(element.parentElement)];
283
+ };
284
+ return {
285
+ label: tools.labelOf(target, tools),
286
+ key: tools.keyOfElement(target, tools),
287
+ exemptions: chain(target),
135
288
  };
136
289
  };
290
+ // Marks the measured elements a failure names, for the screenshot that shows them.
291
+ const outlineDocument = (tools, indices) => {
292
+ const marker = 'data-ploaness-outline';
293
+ const elements = tools.measuredElements(tools);
294
+ for (const index of indices) {
295
+ elements[index]?.setAttribute(marker, '');
296
+ }
297
+ };
137
298
  const STEPS = {
138
299
  isClosedDetails,
139
300
  isHiddenByDisclosure,
301
+ isOutsideView,
140
302
  roundRects,
141
303
  ownText,
142
304
  ownTextRects,
143
305
  bordersOf,
144
306
  lineHeightOf,
145
307
  labelOf,
308
+ paintOrderOf,
146
309
  describe,
310
+ reservedBoxOf,
311
+ contentSizeOf,
312
+ loadedSourceOf,
313
+ mediaOf,
314
+ sourceSizesOf,
315
+ measuredElements,
316
+ fontFacesOf,
317
+ keyOfElement,
147
318
  };
148
- const IN_PAGE_SOURCE = `(${String(measureDocument)})({${Object.entries(STEPS)
319
+ const toolsSource = (steps) => `{${Object.entries(steps)
149
320
  .map(([name, step]) => `${name}: ${String(step)}`)
150
- .join(', ')}})`;
151
- const routeOf = (page) => new URL(page.url()).pathname;
152
- const measureAt = async (page, viewport) => {
153
- await page.setViewportSize(viewport);
154
- await settleForScan(page);
155
- const measured = await page.evaluate(IN_PAGE_SOURCE);
156
- return { ...measured, route: routeOf(page) };
157
- };
321
+ .join(', ')}}`;
322
+ const IN_PAGE_SOURCE = `(${String(measureDocument)})(${toolsSource(STEPS)})`;
323
+ const MINIMAL_SOURCE = `(${String(measureDocument)})(${toolsSource({
324
+ ...STEPS,
325
+ mediaOf: noMedia,
326
+ sourceSizesOf: noSourceSizes,
327
+ fontFacesOf: noFontFaces,
328
+ })})`;
329
+ const OUTLINE_STYLE = '[data-ploaness-outline] { outline: 3px solid #e00 !important; outline-offset: 1px !important; }';
158
330
  /**
159
- * Measure the page as it stands at every required viewport, and report what is wrong with its layout.
160
- *
161
- * The page is resized in place rather than reloaded, so whatever state a spec drove it into - a
162
- * signed-in view, an open dialog - is what gets measured. Its viewport is restored afterwards.
163
- * @param page the page to measure, already on the route and in the state to judge.
164
- * @returns one line per layout defect, empty when there is none.
331
+ * Measure the page as it stands, at its current viewport.
332
+ * @param page the page, settled on the route and in the state to measure.
333
+ * @param route the location to record the snapshot under.
334
+ * @param isMinimal whether to measure geometry alone, without media and fonts.
335
+ * @returns the snapshot.
165
336
  */
166
- export const layoutDefectsOf = async (page) => {
167
- const original = page.viewportSize();
168
- const snapshots = await LAYOUT_SCAN_VIEWPORTS.reduce(async (measured, viewport) => [...(await measured), await measureAt(page, viewport)], Promise.resolve([]));
169
- if (original !== null) {
170
- await page.setViewportSize(original);
171
- }
172
- return findLayoutDefects(snapshots, projectSettings.layoutMinimumGap);
337
+ export const measurePage = async (page, route, isMinimal = false) => {
338
+ const measured = await page.evaluate(isMinimal ? MINIMAL_SOURCE : IN_PAGE_SOURCE);
339
+ return { ...measured, route };
173
340
  };
174
341
  /**
175
- * Fail the calling test when the page has a layout defect at any required viewport.
176
- *
177
- * Call it in a project's own specification for a page the sweep cannot reach - one behind a sign-in,
178
- * or one whose address exists only once a record does - after driving the page into the state to judge.
179
- * @param page the page to measure.
180
- * @returns nothing; it fails the test with one line per defect.
342
+ * Outline the measured elements a failure names, for the screenshot that shows them.
343
+ * @param page the page, unchanged since it was measured.
344
+ * @param indices the measured-node indices.
181
345
  */
182
- export const expectNoLayoutDefects = async (page) => {
183
- expect(await layoutDefectsOf(page), `layout defects on ${routeOf(page)}`).toEqual([]);
346
+ export const outlineElements = async (page, indices) => {
347
+ await page.addStyleTag({ content: OUTLINE_STYLE });
348
+ await page.evaluate(`(${String(outlineDocument)})(${toolsSource(STEPS)}, ${JSON.stringify(indices)})`);
184
349
  };
350
+ /**
351
+ * Describe one element for a finding: the focused element, or the first matching a selector.
352
+ * @param page the page.
353
+ * @param selector the element to describe, or null for the focused element.
354
+ * @returns its label, key and exemptions, or undefined when there is no such element.
355
+ */
356
+ export const targetFacts = async (page, selector) => await page.evaluate(`(${String(describeTarget)})(${toolsSource(STEPS)}, ${JSON.stringify(selector)})`);
185
357
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Page } from '@playwright/test';
2
+ /** The marked roots of a Payload view, for an axe scan limited to them. */
3
+ export declare const VIEW_ROOT_SELECTOR: string;
4
+ /**
5
+ * Mark the roots of a Payload admin view, so the scans that follow judge the view's own content. A page
6
+ * that is not a Payload admin view is left as it is.
7
+ * @param page the page.
8
+ * @returns whether it is a Payload admin view, now marked.
9
+ */
10
+ export declare const hasMarkedPayloadView: (page: Page) => Promise<boolean>;
11
+ /**
12
+ * Remove the marks `hasMarkedPayloadView` set, leaving the page as the spec drove it.
13
+ * @param page the page.
14
+ */
15
+ export declare const unmarkPayloadView: (page: Page) => Promise<void>;
16
+ //# sourceMappingURL=payload-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-view.d.ts","sourceRoot":"","sources":["../src/payload-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAS5C,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,MAA8B,CAAA;AA0B/D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,OAAO,CACc,CAAA;AAErF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,IAAI,CAEhE,CAAA"}
@@ -0,0 +1,35 @@
1
+ // Where a Payload admin template renders the view's own content: the default template's column after
2
+ // Payload's header, and the minimal template's column.
3
+ const PAYLOAD_VIEW_ROOTS = '.template-default__wrap > :not(.app-header), .template-minimal__wrap > *';
4
+ // The layout measurement spells this attribute out in the page code that skips what lies outside it.
5
+ const VIEW_ATTRIBUTE = 'data-ploaness-view';
6
+ /** The marked roots of a Payload view, for an axe scan limited to them. */
7
+ export const VIEW_ROOT_SELECTOR = `[${VIEW_ATTRIBUTE}]`;
8
+ const hasMarkedInPage = ([selector, attribute]) => {
9
+ const roots = Array.from(document.querySelectorAll(selector));
10
+ for (const root of roots) {
11
+ root.setAttribute(attribute, '');
12
+ }
13
+ return roots.length > 0;
14
+ };
15
+ const unmarkInPage = ([selector, attribute]) => {
16
+ const roots = Array.from(document.querySelectorAll(selector));
17
+ for (const root of roots) {
18
+ root.removeAttribute(attribute);
19
+ }
20
+ };
21
+ /**
22
+ * Mark the roots of a Payload admin view, so the scans that follow judge the view's own content. A page
23
+ * that is not a Payload admin view is left as it is.
24
+ * @param page the page.
25
+ * @returns whether it is a Payload admin view, now marked.
26
+ */
27
+ export const hasMarkedPayloadView = async (page) => await page.evaluate(hasMarkedInPage, [PAYLOAD_VIEW_ROOTS, VIEW_ATTRIBUTE]);
28
+ /**
29
+ * Remove the marks `hasMarkedPayloadView` set, leaving the page as the spec drove it.
30
+ * @param page the page.
31
+ */
32
+ export const unmarkPayloadView = async (page) => {
33
+ await page.evaluate(unmarkInPage, [VIEW_ROOT_SELECTOR, VIEW_ATTRIBUTE]);
34
+ };
35
+ //# sourceMappingURL=payload-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-view.js","sourceRoot":"","sources":["../src/payload-view.ts"],"names":[],"mappings":"AAKA,qGAAqG;AACrG,uDAAuD;AACvD,MAAM,kBAAkB,GAAW,0EAA0E,CAAA;AAE7G,qGAAqG;AACrG,MAAM,cAAc,GAAW,oBAAoB,CAAA;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAW,IAAI,cAAc,GAAG,CAAA;AAW/D,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAA4B,EAAW,EAAE;IACpF,MAAM,KAAK,GAA6B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAA4B,EAAQ,EAAE;IAC9E,MAAM,KAAK,GAA6B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAAU,EAAoB,EAAE,CACzE,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAU,CAAC,CAAA;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAU,EAAiB,EAAE;IACnE,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAU,CAAC,CAAA;AAClF,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAoJA,QAAA,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAmB,CAAA;AAEjE,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAiRA,QAAA,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAmB,CAAA;AAEjE,eAAe,MAAM,CAAA"}