@futdevpro/dynamo-e2e 1.18.37 → 1.18.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/README.md +23 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js +45 -2
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts +0 -2
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js +2 -10
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.d.ts +53 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.js +203 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts +4 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js +6 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-guard.util.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js +3 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts +9 -2
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.js +15 -3
- package/build/_modules/ui-check/_collections/ui-check-page.util.js.map +1 -1
- package/build/_modules/ui-check/index.d.ts +1 -0
- package/build/_modules/ui-check/index.d.ts.map +1 -1
- package/build/_modules/ui-check/index.js +1 -0
- package/build/_modules/ui-check/index.js.map +1 -1
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.d.ts +63 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.js +104 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.js.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.d.ts +13 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.js +28 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.js.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.d.ts +76 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.js +153 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.d.ts +14 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.d.ts +11 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.d.ts +8 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.d.ts +14 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.d.ts +10 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.d.ts +8 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.js.map +1 -0
- package/build/_modules/visual-gate/index.d.ts +15 -0
- package/build/_modules/visual-gate/index.d.ts.map +1 -0
- package/build/_modules/visual-gate/index.js +31 -0
- package/build/_modules/visual-gate/index.js.map +1 -0
- package/build/index.js +1 -1
- package/package.json +10 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-guard.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-guard.util.ts"],"names":[],"mappings":";;;AAEA,gGAAkG;AAmBlG;;;;;;;;;;;GAWG;AACH,MAAa,uBAAuB;IAElC,+FAA+F;IAC/F,MAAM,CAAU,kBAAkB,GAAW,IAAI,MAAM,CAAC;QACtD,wBAAwB,EAAE,yBAAyB,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc;QAC9G,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW;QAClH,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ;QAC9G,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"ui-check-guard.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-guard.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export interface DyE2E_UICheckControl_Interface extends DyE2E_UICheckTarget_Inte
|
|
|
11
11
|
* `role="tab"` with `aria-selected="true"`): pressing it again is deliberately inert.
|
|
12
12
|
*/
|
|
13
13
|
current?: boolean;
|
|
14
|
+
/** BFR-FLEET-012 ② — a `link` control: its same-origin destination (path + query); `null` for other kinds. */
|
|
15
|
+
href?: string | null;
|
|
14
16
|
}
|
|
15
17
|
/** Everything a press caused (or failed to cause). */
|
|
16
18
|
export interface DyE2E_UICheckPressEffect_Interface {
|
|
@@ -69,10 +71,15 @@ export declare class DyE2E_UICheckPage_Util {
|
|
|
69
71
|
static errorSignature(text: string): string;
|
|
70
72
|
/** The identity of a control across reloads (its CSS path may shift when an earlier press changed the page). */
|
|
71
73
|
static signature(control: DyE2E_UICheckControl_Interface): string;
|
|
74
|
+
/** The same control on the reloaded page: by CSS path + identity, else by identity alone (`signature`). */
|
|
75
|
+
static findAgain(page: Page, context: DyE2E_UICheckContext_Interface, control: DyE2E_UICheckControl_Interface, kind: 'press' | 'toggle' | 'link'): Promise<DyE2E_UICheckControl_Interface | undefined>;
|
|
72
76
|
/** The first line of a press error, plus the Playwright call-log line that names the cause (e.g. what covers it). */
|
|
73
77
|
static describePressError(error: unknown): string;
|
|
74
|
-
/**
|
|
75
|
-
|
|
78
|
+
/**
|
|
79
|
+
* The visible, enabled controls of one kind, minus the denied ones (returned separately). A `link` is denied by its
|
|
80
|
+
* destination path too (a GET link may act: `/logout`, `/unsubscribe/…`).
|
|
81
|
+
*/
|
|
82
|
+
static listControls(page: Page, context: DyE2E_UICheckContext_Interface, kind: 'press' | 'toggle' | 'link'): Promise<{
|
|
76
83
|
controls: DyE2E_UICheckControl_Interface[];
|
|
77
84
|
denied: DyE2E_UICheckControl_Interface[];
|
|
78
85
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,OAAO,EAA2B,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAErG,wDAAwD;AACxD,MAAM,WAAW,8BAA+B,SAAQ,6BAA6B;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-check-page.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,7 +86,15 @@ class DyE2E_UICheckPage_Util {
|
|
|
86
86
|
}
|
|
87
87
|
/** The identity of a control across reloads (its CSS path may shift when an earlier press changed the page). */
|
|
88
88
|
static signature(control) {
|
|
89
|
-
return [control.tag, control.testId ?? '', control.ariaLabel ?? '', control.text].join('|');
|
|
89
|
+
return [control.tag, control.testId ?? '', control.ariaLabel ?? '', control.text, control.href ?? ''].join('|');
|
|
90
|
+
}
|
|
91
|
+
/** The same control on the reloaded page: by CSS path + identity, else by identity alone (`signature`). */
|
|
92
|
+
static async findAgain(page, context, control, kind) {
|
|
93
|
+
const listed = await DyE2E_UICheckPage_Util.listControls(page, context, kind);
|
|
94
|
+
const wanted = DyE2E_UICheckPage_Util.signature(control);
|
|
95
|
+
return listed.controls.find((c) => c.selector === control.selector
|
|
96
|
+
&& DyE2E_UICheckPage_Util.signature(c) === wanted)
|
|
97
|
+
?? listed.controls.find((c) => DyE2E_UICheckPage_Util.signature(c) === wanted);
|
|
90
98
|
}
|
|
91
99
|
/** The first line of a press error, plus the Playwright call-log line that names the cause (e.g. what covers it). */
|
|
92
100
|
static describePressError(error) {
|
|
@@ -95,13 +103,17 @@ class DyE2E_UICheckPage_Util {
|
|
|
95
103
|
const cause = lines.find((line) => /intercepts pointer events|not visible|not enabled|not stable|detached|outside of the viewport/.test(line));
|
|
96
104
|
return (lines[0] + (cause ? ' — ' + cause.trim() : '')).slice(0, 400);
|
|
97
105
|
}
|
|
98
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* The visible, enabled controls of one kind, minus the denied ones (returned separately). A `link` is denied by its
|
|
108
|
+
* destination path too (a GET link may act: `/logout`, `/unsubscribe/…`).
|
|
109
|
+
*/
|
|
99
110
|
static async listControls(page, context, kind) {
|
|
100
111
|
const all = await DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['listControls'], { kind: kind, max: (context.maxControls ?? DyE2E_UICheckPage_Util.defaultMaxControls) * 3 });
|
|
101
112
|
const controls = [];
|
|
102
113
|
const denied = [];
|
|
103
114
|
for (const control of all) {
|
|
104
|
-
const label = [control.text, control.ariaLabel, control.title, control.testId]
|
|
115
|
+
const label = [control.text, control.ariaLabel, control.title, control.testId, control.href]
|
|
116
|
+
.filter(Boolean).join(' ');
|
|
105
117
|
(ui_check_guard_util_1.DyE2E_UICheckGuard_Util.isDenied(label, context, control.destructive) ? denied : controls).push(control);
|
|
106
118
|
}
|
|
107
119
|
return { controls: controls.slice(0, context.maxControls ?? DyE2E_UICheckPage_Util.defaultMaxControls),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":";;;AAIA,yFAAyF;AACzF,+DAAqG;
|
|
1
|
+
{"version":3,"file":"ui-check-page.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
export * from './_collections/constants/ui-check-page-scripts.const';
|
|
16
16
|
export * from './_collections/detectors/covered-control.detector';
|
|
17
17
|
export * from './_collections/detectors/dead-control.detector';
|
|
18
|
+
export * from './_collections/detectors/error-destination.detector';
|
|
18
19
|
export * from './_collections/detectors/nested-scroll.detector';
|
|
19
20
|
export * from './_collections/detectors/non-toggling-control.detector';
|
|
20
21
|
export * from './_collections/detectors/scroll-trap.detector';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,sDAAsD,CAAC;AACrE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,wDAAwD,CAAC;AACvE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,kDAAkD,CAAC;AACjE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,sDAAsD,CAAC;AACrE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,iDAAiD,CAAC;AAChE,cAAc,wDAAwD,CAAC;AACvE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,kDAAkD,CAAC;AACjE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC"}
|
|
@@ -31,6 +31,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
31
31
|
__exportStar(require("./_collections/constants/ui-check-page-scripts.const"), exports);
|
|
32
32
|
__exportStar(require("./_collections/detectors/covered-control.detector"), exports);
|
|
33
33
|
__exportStar(require("./_collections/detectors/dead-control.detector"), exports);
|
|
34
|
+
__exportStar(require("./_collections/detectors/error-destination.detector"), exports);
|
|
34
35
|
__exportStar(require("./_collections/detectors/nested-scroll.detector"), exports);
|
|
35
36
|
__exportStar(require("./_collections/detectors/non-toggling-control.detector"), exports);
|
|
36
37
|
__exportStar(require("./_collections/detectors/scroll-trap.detector"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,uFAAqE;AACrE,oFAAkE;AAClE,iFAA+D;AAC/D,kFAAgE;AAChE,yFAAuE;AACvE,gFAA8D;AAC9D,mFAAiE;AACjE,qFAAmE;AACnE,kFAAgE;AAChE,qEAAmD;AACnD,oEAAkD;AAClD,sEAAoD;AACpD,uEAAqD;AACrD,wEAAsD;AACtD,uEAAqD;AACrD,sEAAoD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,uFAAqE;AACrE,oFAAkE;AAClE,iFAA+D;AAC/D,sFAAoE;AACpE,kFAAgE;AAChE,yFAAuE;AACvE,gFAA8D;AAC9D,mFAAiE;AACjE,qFAAmE;AACnE,kFAAgE;AAChE,qEAAmD;AACnD,oEAAkD;AAClD,sEAAoD;AACpD,uEAAqD;AACrD,wEAAsD;AACtD,uEAAqD;AACrD,sEAAoD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Browser, BrowserContext, Page } from '@playwright/test';
|
|
2
|
+
/** What `DyE2E_BlockingOverlays_Util.acknowledge` closed. */
|
|
3
|
+
export interface DyE2E_BlockingOverlaysResult_Interface {
|
|
4
|
+
/** The TEST-environment warning was there and is acknowledged (every "do not show again" box ticked). */
|
|
5
|
+
isTestWarningAcknowledged: boolean;
|
|
6
|
+
/** The cookie bar was there and is decided (necessary cookies only). */
|
|
7
|
+
isCookieConsentDecided: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** The browser state after the overlays are closed: reuse it as `storageState` of every visual-gate context. */
|
|
10
|
+
export type DyE2E_BlockingOverlaysState_Type = Awaited<ReturnType<BrowserContext['storageState']>>;
|
|
11
|
+
/**
|
|
12
|
+
* Closes the two overlays that cover every page of a TEST deployment before an automated check (R1-72 d): the
|
|
13
|
+
* TEST-environment warning (`dynamo-test-ribbon` of ngx-dynamo) and the cookie bar (`dynamo-cookie-consent`).
|
|
14
|
+
*
|
|
15
|
+
* @description Through the app itself, by its buttons — not by writing `localStorage` by hand: the ngx-dynamo storage
|
|
16
|
+
* service writes its own control record (`dynamo-control`) and may encrypt, so a hand-made value is not reliably
|
|
17
|
+
* valid (measured in futdevpro's `test-warning.global-setup.ts`). The hooks do not depend on the language: the
|
|
18
|
+
* warning dialog's own panel class, the cookie bar's `data-testid` (a test id built from a button caption changed
|
|
19
|
+
* when the caption was localised and silently broke a harness; FAM, adventor 2026-09-21).
|
|
20
|
+
*/
|
|
21
|
+
export declare class DyE2E_BlockingOverlays_Util {
|
|
22
|
+
/** The TEST-warning dialog (its `panelClass`). */
|
|
23
|
+
static readonly testWarningSelector: string;
|
|
24
|
+
/** The cookie bar. */
|
|
25
|
+
static readonly cookieConsentSelector: string;
|
|
26
|
+
/** The cookie bar's "necessary only" button (the summary view and the details view both carry it). */
|
|
27
|
+
static readonly cookieRejectSelector: string;
|
|
28
|
+
/** How often the page is looked at while waiting for an overlay, ms. */
|
|
29
|
+
static readonly lookIntervalMs: number;
|
|
30
|
+
/**
|
|
31
|
+
* Closes the TEST warning and the cookie bar on this page, in the order they cover each other (the warning first).
|
|
32
|
+
*
|
|
33
|
+
* @description Waits up to `timeoutMs` for both: either may render late (the cookie bar waits for the language
|
|
34
|
+
* map). On production neither exists — that is not an error, the result says so.
|
|
35
|
+
*/
|
|
36
|
+
static acknowledge(page: Page, timeoutMs?: number): Promise<DyE2E_BlockingOverlaysResult_Interface>;
|
|
37
|
+
/**
|
|
38
|
+
* The overlays that still cover the page (empty when the page is free).
|
|
39
|
+
*
|
|
40
|
+
* @returns the names: `test-warning`, `cookie-consent`
|
|
41
|
+
*/
|
|
42
|
+
static findVisible(page: Page): Promise<string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Opens the app once in a fresh context, closes both overlays, and returns the browser state to start every
|
|
45
|
+
* visual-gate context from (`browser.newContext({ storageState })`).
|
|
46
|
+
*
|
|
47
|
+
* @description Call it once per language with that language's `locale`: an app that stores the language it
|
|
48
|
+
* picked would otherwise carry the first language into every case. Fails loudly when an overlay is still visible
|
|
49
|
+
* after closing it (a silent "nothing to close" hid a broken harness before; FAM, adventor 2026-09-21).
|
|
50
|
+
*/
|
|
51
|
+
static prepareStorageState(set: {
|
|
52
|
+
browser: Browser;
|
|
53
|
+
baseUrl: string;
|
|
54
|
+
locale?: string;
|
|
55
|
+
timeoutMs?: number;
|
|
56
|
+
}): Promise<{
|
|
57
|
+
storageState: DyE2E_BlockingOverlaysState_Type;
|
|
58
|
+
result: DyE2E_BlockingOverlaysResult_Interface;
|
|
59
|
+
}>;
|
|
60
|
+
/** Ticks every "do not show again" box of the warning (the ribbon too, so it is not in the screenshot), confirms. */
|
|
61
|
+
private static acknowledgeTestWarning;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=blocking-overlays.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocking-overlays.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/visual-gate/_collections/blocking-overlays.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAW,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI1E,6DAA6D;AAC7D,MAAM,WAAW,sCAAsC;IACrD,yGAAyG;IACzG,yBAAyB,EAAE,OAAO,CAAC;IACnC,wEAAwE;IACxE,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,gHAAgH;AAChH,MAAM,MAAM,gCAAgC,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEnG;;;;;;;;;GASG;AACH,qBAAa,2BAA2B;IAEtC,kDAAkD;IAClD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAsC;IAEjF,sBAAsB;IACtB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoC;IAEjF,sGAAsG;IACtG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAA2C;IAEvF,wEAAwE;IACxE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAO;IAE7C;;;;;OAKG;WACU,WAAW,CACtB,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,MAAwD,GAClE,OAAO,CAAC,sCAAsC,CAAC;IAyBlD;;;;OAIG;WACU,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAavD;;;;;;;OAOG;WACU,mBAAmB,CAAC,GAAG,EAAE;QACpC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,gCAAgC,CAAC;QAAC,MAAM,EAAE,sCAAsC,CAAA;KAAE,CAAC;IAsB/G,qHAAqH;mBAChG,sBAAsB;CAU5C"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_BlockingOverlays_Util = void 0;
|
|
4
|
+
const visual_gate_defaults_const_1 = require("./visual-gate-defaults.const");
|
|
5
|
+
/**
|
|
6
|
+
* Closes the two overlays that cover every page of a TEST deployment before an automated check (R1-72 d): the
|
|
7
|
+
* TEST-environment warning (`dynamo-test-ribbon` of ngx-dynamo) and the cookie bar (`dynamo-cookie-consent`).
|
|
8
|
+
*
|
|
9
|
+
* @description Through the app itself, by its buttons — not by writing `localStorage` by hand: the ngx-dynamo storage
|
|
10
|
+
* service writes its own control record (`dynamo-control`) and may encrypt, so a hand-made value is not reliably
|
|
11
|
+
* valid (measured in futdevpro's `test-warning.global-setup.ts`). The hooks do not depend on the language: the
|
|
12
|
+
* warning dialog's own panel class, the cookie bar's `data-testid` (a test id built from a button caption changed
|
|
13
|
+
* when the caption was localised and silently broke a harness; FAM, adventor 2026-09-21).
|
|
14
|
+
*/
|
|
15
|
+
class DyE2E_BlockingOverlays_Util {
|
|
16
|
+
/** The TEST-warning dialog (its `panelClass`). */
|
|
17
|
+
static testWarningSelector = '.dynx-test-ribbon-warning-dialog';
|
|
18
|
+
/** The cookie bar. */
|
|
19
|
+
static cookieConsentSelector = '[data-testid="cookie-consent"]';
|
|
20
|
+
/** The cookie bar's "necessary only" button (the summary view and the details view both carry it). */
|
|
21
|
+
static cookieRejectSelector = '[data-testid="cookie-consent-reject"]';
|
|
22
|
+
/** How often the page is looked at while waiting for an overlay, ms. */
|
|
23
|
+
static lookIntervalMs = 250;
|
|
24
|
+
/**
|
|
25
|
+
* Closes the TEST warning and the cookie bar on this page, in the order they cover each other (the warning first).
|
|
26
|
+
*
|
|
27
|
+
* @description Waits up to `timeoutMs` for both: either may render late (the cookie bar waits for the language
|
|
28
|
+
* map). On production neither exists — that is not an error, the result says so.
|
|
29
|
+
*/
|
|
30
|
+
static async acknowledge(page, timeoutMs = visual_gate_defaults_const_1.DyE2E_VisualGateDefaults_Const.overlayTimeoutMs) {
|
|
31
|
+
const result = {
|
|
32
|
+
isTestWarningAcknowledged: false, isCookieConsentDecided: false,
|
|
33
|
+
};
|
|
34
|
+
const deadline = Date.now() + timeoutMs;
|
|
35
|
+
while (Date.now() < deadline && !(result.isTestWarningAcknowledged && result.isCookieConsentDecided)) {
|
|
36
|
+
const warning = page.locator(this.testWarningSelector).first();
|
|
37
|
+
const reject = page.locator(`${this.cookieRejectSelector}:visible`).first();
|
|
38
|
+
if (!result.isTestWarningAcknowledged && await warning.isVisible()) {
|
|
39
|
+
await this.acknowledgeTestWarning(warning);
|
|
40
|
+
result.isTestWarningAcknowledged = true;
|
|
41
|
+
}
|
|
42
|
+
else if (!result.isCookieConsentDecided && await reject.isVisible()) {
|
|
43
|
+
await reject.click();
|
|
44
|
+
await page.locator(this.cookieConsentSelector).first().waitFor({ state: 'hidden', timeout: 5_000 });
|
|
45
|
+
result.isCookieConsentDecided = true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
await page.waitForTimeout(this.lookIntervalMs);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The overlays that still cover the page (empty when the page is free).
|
|
55
|
+
*
|
|
56
|
+
* @returns the names: `test-warning`, `cookie-consent`
|
|
57
|
+
*/
|
|
58
|
+
static async findVisible(page) {
|
|
59
|
+
const visible = [];
|
|
60
|
+
if (await page.locator(this.testWarningSelector).first().isVisible()) {
|
|
61
|
+
visible.push('test-warning');
|
|
62
|
+
}
|
|
63
|
+
if (await page.locator(this.cookieConsentSelector).first().isVisible()) {
|
|
64
|
+
visible.push('cookie-consent');
|
|
65
|
+
}
|
|
66
|
+
return visible;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Opens the app once in a fresh context, closes both overlays, and returns the browser state to start every
|
|
70
|
+
* visual-gate context from (`browser.newContext({ storageState })`).
|
|
71
|
+
*
|
|
72
|
+
* @description Call it once per language with that language's `locale`: an app that stores the language it
|
|
73
|
+
* picked would otherwise carry the first language into every case. Fails loudly when an overlay is still visible
|
|
74
|
+
* after closing it (a silent "nothing to close" hid a broken harness before; FAM, adventor 2026-09-21).
|
|
75
|
+
*/
|
|
76
|
+
static async prepareStorageState(set) {
|
|
77
|
+
const context = await set.browser.newContext({ locale: set.locale, ignoreHTTPSErrors: true });
|
|
78
|
+
try {
|
|
79
|
+
const page = await context.newPage();
|
|
80
|
+
await page.goto(set.baseUrl, { waitUntil: 'domcontentloaded' });
|
|
81
|
+
const result = await this.acknowledge(page, set.timeoutMs);
|
|
82
|
+
const stillVisible = await this.findVisible(page);
|
|
83
|
+
if (stillVisible.length) {
|
|
84
|
+
throw new Error(`[dynamo-e2e visual-gate] still covering the page after closing: ${stillVisible.join(', ')} (${set.baseUrl})`);
|
|
85
|
+
}
|
|
86
|
+
return { storageState: await context.storageState(), result: result };
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
await context.close();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Ticks every "do not show again" box of the warning (the ribbon too, so it is not in the screenshot), confirms. */
|
|
93
|
+
static async acknowledgeTestWarning(warning) {
|
|
94
|
+
const boxes = warning.locator('input[type="checkbox"]');
|
|
95
|
+
const count = await boxes.count();
|
|
96
|
+
for (let i = 0; i < count; i++) {
|
|
97
|
+
await boxes.nth(i).check();
|
|
98
|
+
}
|
|
99
|
+
await warning.locator('button').last().click();
|
|
100
|
+
await warning.waitFor({ state: 'hidden', timeout: 5_000 });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.DyE2E_BlockingOverlays_Util = DyE2E_BlockingOverlays_Util;
|
|
104
|
+
//# sourceMappingURL=blocking-overlays.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocking-overlays.util.js","sourceRoot":"","sources":["../../../../src/_modules/visual-gate/_collections/blocking-overlays.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DyE2E_VisualGateLanguage_Interface } from '../_models/visual-gate-language.interface';
|
|
2
|
+
import { DyE2E_VisualGateViewport_Interface } from '../_models/visual-gate-viewport.interface';
|
|
3
|
+
/** The defaults of the visual gate (R1-72 d: "HU + EN, 1440 + 390"). */
|
|
4
|
+
export declare const DyE2E_VisualGateDefaults_Const: {
|
|
5
|
+
viewports: DyE2E_VisualGateViewport_Interface[];
|
|
6
|
+
languages: DyE2E_VisualGateLanguage_Interface[];
|
|
7
|
+
minVisibleTextLength: number;
|
|
8
|
+
minVisibleElementCount: number;
|
|
9
|
+
overflowTolerancePx: number;
|
|
10
|
+
maxDiffPixelRatio: number;
|
|
11
|
+
overlayTimeoutMs: number;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=visual-gate-defaults.const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-gate-defaults.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/visual-gate/_collections/visual-gate-defaults.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAE/F,wEAAwE;AACxE,eAAO,MAAM,8BAA8B,EAAE;IAC3C,SAAS,EAAE,kCAAkC,EAAE,CAAC;IAChD,SAAS,EAAE,kCAAkC,EAAE,CAAC;IAChD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAuB1B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_VisualGateDefaults_Const = void 0;
|
|
4
|
+
/** The defaults of the visual gate (R1-72 d: "HU + EN, 1440 + 390"). */
|
|
5
|
+
exports.DyE2E_VisualGateDefaults_Const = {
|
|
6
|
+
viewports: [
|
|
7
|
+
{ name: 'desktop', width: 1440, height: 900 },
|
|
8
|
+
{ name: 'mobile', width: 390, height: 844 },
|
|
9
|
+
],
|
|
10
|
+
languages: [
|
|
11
|
+
{ code: 'hu', locale: 'hu-HU' },
|
|
12
|
+
{ code: 'en', locale: 'en-US' },
|
|
13
|
+
],
|
|
14
|
+
/** Fewer visible characters than this ⇒ the page disappeared (a heading and a button already give more). */
|
|
15
|
+
minVisibleTextLength: 20,
|
|
16
|
+
/** Fewer visible elements than this ⇒ the page disappeared. */
|
|
17
|
+
minVisibleElementCount: 5,
|
|
18
|
+
/** Sub-pixel rounding: a document at most this much wider than the viewport is not a sideways scroll. */
|
|
19
|
+
overflowTolerancePx: 1,
|
|
20
|
+
/** The share of differing pixels the screenshot comparison tolerates (antialiasing, a moved caret). */
|
|
21
|
+
maxDiffPixelRatio: 0.02,
|
|
22
|
+
/**
|
|
23
|
+
* How long the setup waits for the TEST warning and the cookie bar. Measured (FAM, futdevpro 2026-09-21): the bar
|
|
24
|
+
* renders behind the app's language map or a 4 s fail-open, so a slow runner needs well over 4 s.
|
|
25
|
+
*/
|
|
26
|
+
overlayTimeoutMs: 15_000,
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=visual-gate-defaults.const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-gate-defaults.const.js","sourceRoot":"","sources":["../../../../src/_modules/visual-gate/_collections/visual-gate-defaults.const.ts"],"names":[],"mappings":";;;AAGA,wEAAwE;AAC3D,QAAA,8BAA8B,GAQvC;IACF,SAAS,EAAE;QACT,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;QAC7C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KAC5C;IACD,SAAS,EAAE;QACT,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAC/B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;KAChC;IACD,4GAA4G;IAC5G,oBAAoB,EAAE,EAAE;IACxB,+DAA+D;IAC/D,sBAAsB,EAAE,CAAC;IACzB,yGAAyG;IACzG,mBAAmB,EAAE,CAAC;IACtB,uGAAuG;IACvG,iBAAiB,EAAE,IAAI;IACvB;;;OAGG;IACH,gBAAgB,EAAE,MAAM;CACzB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { DyE2E_VisualGateCase_Interface } from '../_models/visual-gate-case.interface';
|
|
3
|
+
import { DyE2E_VisualGateFinding_Interface } from '../_models/visual-gate-finding.interface';
|
|
4
|
+
import { DyE2E_VisualGateLanguage_Interface } from '../_models/visual-gate-language.interface';
|
|
5
|
+
import { DyE2E_VisualGateLayout_Interface } from '../_models/visual-gate-layout.interface';
|
|
6
|
+
import { DyE2E_VisualGatePage_Interface } from '../_models/visual-gate-page.interface';
|
|
7
|
+
import { DyE2E_VisualGateViewport_Interface } from '../_models/visual-gate-viewport.interface';
|
|
8
|
+
/**
|
|
9
|
+
* The visual regression gate (R1-72 d; owner, 2026-11-02 21:39: the credit login "badly out of shape", "a review tool
|
|
10
|
+
* is needed"): the key pages, HU + EN, 1440 + 390, red in the CI when a page falls apart or disappears.
|
|
11
|
+
*
|
|
12
|
+
* @description Two checks per page, the cheap and certain one first: (1) a layout check in the browser — the TEST
|
|
13
|
+
* warning or the cookie bar still covers the page, the page shows (almost) nothing, or it is wider than the screen;
|
|
14
|
+
* (2) a screenshot comparison against the product's committed baseline (Playwright `toHaveScreenshot`; the first run,
|
|
15
|
+
* or `--update-snapshots`, writes it).
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { DyE2E_BlockingOverlays_Util, DyE2E_VisualGate_Util } from '@futdevpro/dynamo-e2e/visual-gate';
|
|
19
|
+
*
|
|
20
|
+
* for (const gateCase of DyE2E_VisualGate_Util.cases({ pages: [ { name: 'home', path: '/' } ] })) {
|
|
21
|
+
* test(`| visual: ${gateCase.id}`, async ({ browser }) => {
|
|
22
|
+
* const { storageState } = await DyE2E_BlockingOverlays_Util.prepareStorageState({
|
|
23
|
+
* browser, baseUrl: BASE_URL, locale: gateCase.language.locale,
|
|
24
|
+
* });
|
|
25
|
+
* const context = await browser.newContext({ storageState, locale: gateCase.language.locale,
|
|
26
|
+
* viewport: { width: gateCase.viewport.width, height: gateCase.viewport.height } });
|
|
27
|
+
* const page = await context.newPage();
|
|
28
|
+
*
|
|
29
|
+
* await page.goto(BASE_URL + gateCase.page.path);
|
|
30
|
+
* await DyE2E_VisualGate_Util.assertPage(page, gateCase);
|
|
31
|
+
* });
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class DyE2E_VisualGate_Util {
|
|
36
|
+
/** Browser-side layout measurement: a function expression, evaluated through `page.evaluate` (DOM APIs only). */
|
|
37
|
+
static readonly measureLayoutScript: string;
|
|
38
|
+
/**
|
|
39
|
+
* The check matrix: every page in every language at every screen size.
|
|
40
|
+
*
|
|
41
|
+
* @returns one case per page × language × viewport, ids `<page>-<language>-<viewport>`
|
|
42
|
+
*/
|
|
43
|
+
static cases(set: {
|
|
44
|
+
pages: DyE2E_VisualGatePage_Interface[];
|
|
45
|
+
languages?: DyE2E_VisualGateLanguage_Interface[];
|
|
46
|
+
viewports?: DyE2E_VisualGateViewport_Interface[];
|
|
47
|
+
}): DyE2E_VisualGateCase_Interface[];
|
|
48
|
+
/** Measures what the page shows (after the fonts are loaded). */
|
|
49
|
+
static measureLayout(page: Page): Promise<DyE2E_VisualGateLayout_Interface>;
|
|
50
|
+
/**
|
|
51
|
+
* Judges a measured layout.
|
|
52
|
+
*
|
|
53
|
+
* @returns `page-empty` (it disappeared) and / or `horizontal-overflow` (it fell apart); empty when healthy
|
|
54
|
+
*/
|
|
55
|
+
static checkLayout(layout: DyE2E_VisualGateLayout_Interface, limits?: {
|
|
56
|
+
minVisibleTextLength?: number;
|
|
57
|
+
minVisibleElementCount?: number;
|
|
58
|
+
overflowTolerancePx?: number;
|
|
59
|
+
}): DyE2E_VisualGateFinding_Interface[];
|
|
60
|
+
/** The cheap checks of one page: overlays still covering it + the layout. */
|
|
61
|
+
static inspect(page: Page, limits?: {
|
|
62
|
+
minVisibleTextLength?: number;
|
|
63
|
+
minVisibleElementCount?: number;
|
|
64
|
+
overflowTolerancePx?: number;
|
|
65
|
+
}): Promise<DyE2E_VisualGateFinding_Interface[]>;
|
|
66
|
+
/**
|
|
67
|
+
* The gate for one case, inside a Playwright test: the cheap checks first (a finding fails the test with its
|
|
68
|
+
* reason), then the screenshot comparison against the baseline `<case id>.png`.
|
|
69
|
+
*/
|
|
70
|
+
static assertPage(page: Page, gateCase: DyE2E_VisualGateCase_Interface, options?: {
|
|
71
|
+
maxDiffPixelRatio?: number;
|
|
72
|
+
minVisibleTextLength?: number;
|
|
73
|
+
overflowTolerancePx?: number;
|
|
74
|
+
}): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=visual-gate.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-gate.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/visual-gate/_collections/visual-gate.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAC;AAC7F,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAI/F;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,qBAAqB;IAEhC,iHAAiH;IACjH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAoCxC;IAEH;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,KAAK,EAAE,8BAA8B,EAAE,CAAC;QACxC,SAAS,CAAC,EAAE,kCAAkC,EAAE,CAAC;QACjD,SAAS,CAAC,EAAE,kCAAkC,EAAE,CAAC;KAClD,GAAG,8BAA8B,EAAE;IAoBpC,iEAAiE;WACpD,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAMjF;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,gCAAgC,EACxC,MAAM,GAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5G,iCAAiC,EAAE;IAwBtC,6EAA6E;WAChE,OAAO,CAClB,IAAI,EAAE,IAAI,EACV,MAAM,GAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5G,OAAO,CAAC,iCAAiC,EAAE,CAAC;IAS/C;;;OAGG;WACU,UAAU,CACrB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,8BAA8B,EACxC,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO,GACxG,OAAO,CAAC,IAAI,CAAC;CAgBjB"}
|