@letsrunit/playwright 0.21.1 → 0.22.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts","../src/utils/pick-field-element.ts","../src/field/aria-select.ts","../src/utils/date.ts","../src/wait.ts","../src/field/calendar.ts","../src/field/composite-date.ts","../src/field/composite-select.ts","../src/field/composite-slider.ts","../src/field/composite-toggle.ts","../src/field/native-select.ts","../src/field/date-group.ts","../src/field/date-text-input.ts","../src/field/native-checkbox.ts","../src/field/native-date.ts","../src/field/native-input.ts","../src/field/otp.ts","../src/field/radio-group.ts","../src/field/slider.ts","../src/field/toggle.ts","../src/field/index.ts","../src/format-html.ts","../src/fallback-locator.ts","../src/fuzzy-locator.ts","../src/page-metadata.ts","../src/screenshot.ts","../src/utils/type-check.ts","../src/page-info.ts","../src/selector/date-selector.ts","../src/selector/field-selector.ts","../src/scrub-html.ts","../src/snapshot.ts","../src/scroll.ts","../src/translations/af.ts","../src/translations/ar.ts","../src/translations/az.ts","../src/translations/bg.ts","../src/translations/bn.ts","../src/translations/bs.ts","../src/translations/ca.ts","../src/translations/cs.ts","../src/translations/da.ts","../src/translations/de.ts","../src/translations/el.ts","../src/translations/en.ts","../src/translations/es.ts","../src/translations/et.ts","../src/translations/eu.ts","../src/translations/fa.ts","../src/translations/fi.ts","../src/translations/fr.ts","../src/translations/ga.ts","../src/translations/he.ts","../src/translations/hi.ts","../src/translations/hr.ts","../src/translations/hu.ts","../src/translations/hy.ts","../src/translations/id.ts","../src/translations/is.ts","../src/translations/it.ts","../src/translations/ja.ts","../src/translations/ka.ts","../src/translations/ko.ts","../src/translations/lt.ts","../src/translations/lv.ts","../src/translations/nl.ts","../src/translations/no.ts","../src/translations/pl.ts","../src/translations/pt.ts","../src/translations/ro.ts","../src/translations/ru.ts","../src/translations/sk.ts","../src/translations/sl.ts","../src/translations/sv.ts","../src/translations/sw.ts","../src/translations/ta.ts","../src/translations/th.ts","../src/translations/tl.ts","../src/translations/tr.ts","../src/translations/uk.ts","../src/translations/ur.ts","../src/translations/vi.ts","../src/translations/zh.ts","../src/translations/index.ts","../src/suppress-interferences.ts","../src/unified-html-diff.ts"],"names":["format","months","isRange","isArray","isDate","formatDate","caseInsensitiveExact","toNumber","options","matchesDateLoosely","digits","el","getToggleTarget","snapshot","JSDOM","sleep","translations"],"mappings":"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","file":"index.js","sourcesContent":["import type { Browser, BrowserContextOptions, Page } from '@playwright/test';\n\n// Launch a minimal, headless Chromium instance.\nexport async function browse(browser: Browser, options: BrowserContextOptions = {}): Promise<Page> {\n const context = await browser.newContext({\n viewport: { width: 1920, height: 1080 },\n userAgent:\n 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n locale: 'en-US',\n ...options,\n });\n\n // Safety net against bundler-injected helpers inside page.evaluate\n await context.addInitScript(\n /* v8 ignore next — callback runs in browser context, not Node */\n () => {\n // define __name as a no-op if present\n (window as any).__name = (window as any).__name || ((fn: any) => fn);\n },\n );\n\n return await context.newPage();\n}\n","import type { Locator } from '@playwright/test';\n\nexport async function pickFieldElement(elements: Locator): Promise<Locator> {\n const count = await elements.count();\n if (count === 1) return elements;\n\n const candidates: { el: Locator; tag: string; role: string | null; isVisible: boolean }[] = [];\n\n for (let i = 0; i < count; i++) {\n const el = elements.nth(i);\n const [tag, role, isVisible] = await el.evaluate((e) => [\n e.tagName.toLowerCase(),\n e.getAttribute('role')?.toLowerCase() || null,\n e.getAttribute('type') !== 'hidden' && e.getAttribute('aria-hidden') !== 'true',\n ]);\n candidates.push({ el, tag: tag as string, role: role as string | null, isVisible: isVisible as boolean });\n }\n\n // 1. If there is one of the elements is an input and the input is not hidden or has an aria indicating it is a (form) control, pick that element.\n const formControls = ['input', 'textarea', 'select'];\n const controlRoles = ['checkbox', 'radio', 'textbox', 'combobox', 'listbox', 'slider', 'spinbutton'];\n\n const primary = candidates.filter(\n (c) => (formControls.includes(c.tag) || (c.role && controlRoles.includes(c.role))) && c.isVisible,\n );\n if (primary.length === 1) return primary[0].el;\n\n // 2. If one element has an aria role that might be logical for a form component (like a `group`), pick that element.\n const groups = candidates.filter((c) => c.role === 'group');\n if (groups.length === 1) return groups[0].el;\n\n // 3. If one element contains the other element(s), pick the parent.\n const isParent = await elements.evaluateAll((elems) => {\n const results = elems.map((el, i) => {\n const others = elems.filter((_, j) => i !== j);\n return others.every((other) => el.contains(other));\n });\n const parentIndex = results.indexOf(true);\n return parentIndex !== -1 ? parentIndex : null;\n });\n\n if (isParent !== null) {\n return elements.nth(isParent);\n }\n\n // Return both elements and let the error (on evaluate) occur.\n return elements;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nfunction cssAttrEquals(name: string, value: string): string {\n return `[${name}=${JSON.stringify(value)}]`;\n}\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nasync function getComboboxRoot(el: Loc['el'], options?: SetOptions) {\n const role = await el.getAttribute('role', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (role === 'combobox') return el;\n\n const byRole = el.locator('[role=\"combobox\"]').first();\n if ((await byRole.count()) > 0) return byRole;\n\n const popupInput = el\n .locator('input[aria-controls], input[aria-owns], input[aria-haspopup], textarea[aria-controls], textarea[aria-owns], textarea[aria-haspopup]')\n .first();\n if ((await popupInput.count()) > 0) return popupInput;\n\n return null;\n}\n\nasync function getControlledListbox(el: Loc['el'], options?: SetOptions) {\n const ids: string[] = [];\n for (const attr of ['aria-controls', 'aria-owns']) {\n const raw = await el.getAttribute(attr, options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (!raw) continue;\n ids.push(...raw.split(/\\s+/).filter(Boolean));\n }\n\n for (const id of ids) {\n const listbox = el.page().locator(`[role=\"listbox\"]${cssAttrEquals('id', id)}`).first();\n if ((await listbox.count()) > 0) return listbox;\n }\n\n return null;\n}\n\nasync function getVisibleListbox(el: Loc['el'], options?: SetOptions) {\n const listboxes = el.page().locator('[role=\"listbox\"]:visible');\n await listboxes.first().waitFor({ state: 'visible', timeout: options?.timeout }).catch(() => null);\n if ((await listboxes.count()) > 0) return listboxes.first();\n return null;\n}\n\nasync function didSelectionApply(\n root: Loc['el'],\n option: Loc['el'],\n before: string | null,\n options?: SetOptions,\n): Promise<boolean> {\n const ariaSelected = await option.getAttribute('aria-selected', options).catch(() => null);\n if (ariaSelected === 'true') return true;\n\n const optionId = await option.getAttribute('id', options).catch(() => null);\n const activeDescendant = await root.getAttribute('aria-activedescendant', options).catch(() => null);\n if (optionId && activeDescendant === optionId) return true;\n\n const after = await root\n .evaluate((node) => {\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node.value;\n }\n return node.textContent?.trim() ?? '';\n }, options)\n .catch(() => null);\n\n if (before !== null && after !== null && after !== before) return true;\n\n const listbox = await getVisibleListbox(root, options);\n if (!listbox) return true;\n\n return false;\n}\n\nexport async function selectAria({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n\n const root = await getComboboxRoot(el, options);\n if (!root) return false;\n\n let listbox = await getControlledListbox(root, options);\n\n const ariaExpanded = await root.getAttribute('aria-expanded', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaExpanded !== 'true') {\n await root.click(options);\n listbox = listbox ?? (await getControlledListbox(root, options));\n }\n\n listbox = listbox ?? (await getVisibleListbox(root, options));\n if (!listbox) return false;\n\n const stringValue = String(value);\n const before = await root\n .evaluate((node) => {\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node.value;\n }\n return node.textContent?.trim() ?? '';\n }, options)\n .catch(() => null);\n\n // 1. By value attribute\n const byValue = listbox.locator(\n `[role=\"option\"]${cssAttrEquals('value', stringValue)}, ` +\n `[role=\"option\"]${cssAttrEquals('data-value', stringValue)}, ` +\n `[role=\"option\"]${cssAttrEquals('ng-reflect-value', stringValue)}`,\n );\n if ((await byValue.count()) >= 1) {\n const option = byValue.first();\n await option.click(options);\n return await didSelectionApply(root, option, before, options);\n }\n\n // 2. By accessible name (case-insensitive)\n const byName = listbox.getByRole('option', { name: caseInsensitiveExact(stringValue) });\n if ((await byName.count()) >= 1) {\n const option = byName.first();\n await option.click(options);\n return await didSelectionApply(root, option, before, options);\n }\n\n return false;\n}\n","import { getWeekNumber } from '@letsrunit/utils';\n\nexport function formatDateForInput(date: Date, type: string | null): string {\n const pad = (n: number) => String(n).padStart(2, '0');\n const yyyy = date.getFullYear();\n const mm = pad(date.getMonth() + 1);\n const dd = pad(date.getDate());\n const hh = pad(date.getHours());\n const min = pad(date.getMinutes());\n\n switch (type) {\n case 'number':\n return date.getTime().toString();\n case 'datetime-local':\n return `${yyyy}-${mm}-${dd}T${hh}:${min}`;\n case 'month':\n return `${yyyy}-${mm}`;\n case 'week': {\n const week = getWeekNumber(date);\n return `${yyyy}-W${pad(week)}`;\n }\n case 'time':\n return `${hh}:${min}`;\n case 'date':\n default:\n return `${yyyy}-${mm}-${dd}`;\n }\n}\n\nexport function formatDate(d: Date, format: string): string {\n const dd = String(d.getDate()).padStart(2, '0');\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n const yyyy = String(d.getFullYear());\n return format.replace('DD', dd).replace('MM', mm).replace('YYYY', yyyy);\n}\n\nexport function getMonthNames(locale?: string): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'long' });\n return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)));\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Locator, Page } from '@playwright/test';\n\nexport async function waitForIdle(page: Page, timeout = 2500) {\n await page.waitForLoadState('domcontentloaded');\n try {\n await page.waitForLoadState('networkidle', { timeout });\n } catch {}\n}\n\nexport async function waitForMeta(page: Page, timeout = 2500) {\n await waitForIdle(page);\n\n page.getByRole('navigation');\n\n await page\n .waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n () => {\n const head = document.head;\n if (!head) return false;\n\n return Boolean(\n document.title.trim() ||\n head.querySelector('meta[property^=\"og:\"]') ||\n head.querySelector('meta[name^=\"twitter:\"]') ||\n head.querySelector('script[type=\"application/ld+json\"]'),\n );\n },\n /* v8 ignore stop */\n { timeout },\n )\n .catch(() => {});\n}\n\n/** Wait until the DOM hasn't changed for `quiet` (default 500ms). */\nexport async function waitForDomIdle(\n page: Page,\n { quiet = 500, timeout = 10_000 }: { quiet?: number; timeout?: number } = {},\n) {\n await page.waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (q) =>\n new Promise<boolean>((resolve) => {\n let last = performance.now();\n\n const obs = new MutationObserver(() => (last = performance.now()));\n obs.observe(document, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n });\n\n const tick = () => {\n if (performance.now() - last >= q) {\n obs.disconnect();\n resolve(true);\n return;\n }\n requestAnimationFrame(tick);\n };\n tick();\n }),\n /* v8 ignore stop */\n quiet,\n { timeout },\n );\n}\n\n// Wait until there are no running Web Animations on the calendar subtree.\n// This helps with libraries that slide months using WAAPI (common in React UI libs).\nexport async function waitForAnimationsToFinish(root: Locator) {\n await root.page().waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (el) => {\n const animations = (el as HTMLElement).getAnimations?.({ subtree: true }) ?? [];\n return animations.every((a) => a.playState !== 'running');\n },\n /* v8 ignore stop */\n await root.elementHandle(),\n );\n\n await root.evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n () => new Promise<void>((r) => requestAnimationFrame(() => requestAnimationFrame(() => r()))),\n );\n}\n\nexport async function waitForUrlChange(page: Page, prevUrl: string, timeout: number) {\n try {\n await page.waitForFunction(\n /* v8 ignore next — callback runs in browser context, not Node */\n (u) => location.href !== u,\n prevUrl,\n { timeout },\n );\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function waitUntilEnabled(page: Page, target: Locator, timeout: number) {\n // Poll for not disabled && aria-disabled != \"true\"\n await target.waitFor({ state: 'attached', timeout }).catch(() => {});\n const handle = await target.elementHandle().catch(() => null);\n if (!handle) return;\n\n await page\n .waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (el) => {\n if (!el || !(el as Element).isConnected) return true; // detached → treat as settled\n const aria = (el as HTMLElement).getAttribute('aria-disabled');\n const disabled =\n (el as HTMLButtonElement).disabled ||\n aria === 'true' ||\n (el as HTMLElement).getAttribute('disabled') !== null;\n return !disabled;\n },\n /* v8 ignore stop */\n handle,\n { timeout },\n )\n .catch(() => {});\n}\n\nexport async function waitAfterInteraction(\n page: Page,\n target: Locator,\n opts: { prevUrl?: string; navTimeout?: number; settleTimeout?: number; quietMs?: number } = {},\n) {\n const navTimeout = opts.navTimeout ?? 8_000;\n const settleTimeout = opts.settleTimeout ?? 6_000;\n const quietMs = opts.quietMs ?? 500;\n\n const prevUrl = opts.prevUrl ?? page.url();\n const kind = await elementKind(target).catch(() => 'other');\n\n if (kind === 'link') {\n // SPA or full nav: wait for URL change; if it changed, wait for DOM to settle.\n const urlChanged = await waitForUrlChange(page, prevUrl, navTimeout);\n if (urlChanged) {\n // Avoid 'networkidle' for SPAs with websockets/long-polling.\n await page.waitForLoadState('domcontentloaded').catch(() => {});\n await waitForDomIdle(page, { quiet: quietMs, timeout: navTimeout }).catch(() => {});\n return;\n }\n // Link didn’t navigate (preventDefault, same hash, etc.) → fall back.\n await waitForDomIdle(page, { quiet: quietMs }).catch(() => {});\n return;\n }\n\n if (kind === 'button' && (await target.isDisabled({ timeout: 1_000 }).catch(() => false))) {\n // Buttons often disable during in-flight work, or disappear on success.\n await Promise.race([\n waitUntilEnabled(page, target, settleTimeout).catch(() => {}),\n target.waitFor({ state: 'hidden', timeout: settleTimeout }).catch(() => {}),\n target.waitFor({ state: 'detached', timeout: settleTimeout }).catch(() => {}),\n waitForUrlChange(page, prevUrl, settleTimeout).catch(() => {}),\n ]);\n await sleep(1000); // Grace periode for redirect\n await waitForDomIdle(page, { quiet: quietMs }).catch(() => {});\n return;\n }\n}\n\n/* ---------- helpers ---------- */\n\nasync function elementKind(target: Locator): Promise<'link' | 'button' | 'other'> {\n const PROBE = 1_000;\n const role = await target.getAttribute('role', { timeout: PROBE }).catch(() => null);\n if (role === 'link') return 'link';\n if (role === 'button') return 'button';\n\n const tag = await target\n .evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n (el) => el.tagName.toLowerCase(),\n null,\n { timeout: PROBE },\n )\n .catch(() => '');\n if (tag === 'a') return 'link';\n\n if (tag === 'button') return 'button';\n if (tag === 'input') {\n const type = await target.getAttribute('type', { timeout: PROBE }).catch(() => null);\n if (type === 'button' || type === 'submit' || type === 'reset') return 'button';\n }\n\n return 'other';\n}\n","import { isArray, isDate, isRange, uniqueItem } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { formatDate, formatDateForInput, getMonthNames } from '../utils/date';\nimport { waitForAnimationsToFinish } from '../wait';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype MonthYear = { month: number; year: number };\n\nasync function getDialog(root: Locator, options?: SetOptions) {\n const role = await root.getAttribute('role', options).catch(() => null);\n const hasPopup = await root.getAttribute('aria-haspopup', options).catch(() => null);\n\n if (role !== 'combobox' && !hasPopup) return null;\n\n const ariaControls = await root.getAttribute('aria-controls', options).catch(() => null);\n if (!ariaControls) return null;\n\n const calendar = root.page().locator(`#${ariaControls}`);\n if ((await calendar.count()) === 0) {\n await root.click(options);\n }\n\n const count = await calendar.count();\n return count > 0 ? calendar : null;\n}\n\nasync function isCalendarGrid(grid: Locator): Promise<boolean> {\n const cells = grid.locator('td, [role=\"gridcell\"]');\n const cellCount = await cells.count();\n if (cellCount < 28 || cellCount > 80) return false; // Sanity check\n\n const texts = await cells.allTextContents();\n const days = texts\n .map((t) => t.trim())\n .filter((t) => /^\\d{1,2}$/.test(t))\n .map(Number)\n .filter((n) => n >= 1 && n <= 31);\n\n // Expect sequential numbering from 1 to at least 28. Ignore other cells with other content.\n const last = days.reduce((max, cur) => (cur === max + 1 ? cur : max), 0);\n return last >= 28;\n}\n\nfunction isDayToken(text: string): boolean {\n const day = Number(text.trim());\n return Number.isInteger(day) && day >= 1 && day <= 31;\n}\n\nasync function isStructuralCalendar(root: Locator): Promise<boolean> {\n const candidates = root.locator('button, [role=\"button\"], [tabindex], div, span').filter({ visible: true });\n const count = await candidates.count();\n if (count < 28) return false;\n\n const tokens = (await candidates.allInnerTexts()).map((text) => text.trim()).filter(isDayToken);\n if (tokens.length < 28 || tokens.length > 120) return false;\n\n const daySet = new Set(tokens.map(Number));\n const hasStart = [1, 2, 3, 4, 5, 6, 7].some((day) => daySet.has(day));\n const hasMiddle = [22, 23, 24, 25, 26, 27, 28].some((day) => daySet.has(day));\n\n return daySet.size >= 28 && hasStart && hasMiddle;\n}\n\nfunction dayCellSelector(hasGridCells: boolean): string {\n return hasGridCells\n ? 'td, [role=\"gridcell\"]'\n : 'button, [role=\"button\"], [tabindex], div, span';\n}\n\nexport async function getCalendar(\n root: Locator,\n options?: SetOptions,\n): Promise<{ calendar: Locator; tables: Locator[] } | null> {\n const gridSelector = 'table, [role=\"grid\"]';\n\n // 1. Identify the container (either the root itself or a linked dialog/popup)\n let container: Locator | null =\n (await root.locator(gridSelector).count()) > 0 ? root : await getDialog(root, options);\n\n // Fallback: Check if the root itself is a valid grid (e.g. inline MUI DateCalendar)\n /* v8 ignore start */\n if (!container && (await isCalendarGrid(root))) {\n return { calendar: root, tables: [root] };\n }\n /* v8 ignore stop */\n if (!container && (await isStructuralCalendar(root))) {\n return { calendar: root, tables: [root] };\n }\n if (!container) return null;\n\n // 2. Find all valid calendar grids within the container\n // This handles both <table> and <div role=\"grid\">\n const found = await container.locator(gridSelector).all();\n const tables: Locator[] = [];\n\n // If the container itself matches the selector, check it first\n /* v8 ignore next */\n if (await isCalendarGrid(container)) tables.push(container);\n\n for (const grid of found) {\n if (await isCalendarGrid(grid)) {\n tables.push(grid);\n }\n }\n\n // 3. Deduplicate (prevents issues if container == grid)\n const uniqueTables = tables.filter((t, i, self) => self.indexOf(t) === i);\n\n if (uniqueTables.length > 0) {\n return { calendar: container, tables: uniqueTables };\n }\n\n if (await isStructuralCalendar(container)) {\n return { calendar: container, tables: [container] };\n }\n\n return null;\n}\n\nfunction uniqueMonthYearPairs(pairs: MonthYear[]): MonthYear[] {\n const map = pairs.reduce(\n (acc, r) => acc.set(`${r.year}-${r.month}`, r),\n new Map<string, { month: number; year: number }>(),\n );\n return Array.from(map.values());\n}\n\nfunction inferYearForMonth(target: Date, month: number): number {\n const ty = target.getFullYear();\n const tm = target.getMonth();\n const targetTotal = ty * 12 + tm;\n\n const candidates = [ty - 1, ty, ty + 1].map((y) => ({ year: y, total: y * 12 + month }));\n candidates.sort((a, b) => Math.abs(a.total - targetTotal) - Math.abs(b.total - targetTotal));\n return candidates[0].year;\n}\n\nexport async function getCurrentMonthsAndYears(root: Locator, target: Date): Promise<MonthYear[]> {\n const lang = await root.page().locator('html').getAttribute('lang').catch(() => undefined);\n const locales = lang && !lang.startsWith('en') ? [lang, 'en-US'] : ['en-US'];\n\n const text = await root.innerText();\n const monthSets = locales.map(getMonthNames);\n\n // Look for month year pairs\n const pairs = monthSets.flatMap((months) => {\n const matches = text.matchAll(new RegExp(`(${months.join('|')})\\\\W*(\\\\d{4})`, 'gi'));\n return Array.from(matches)\n .map((m) => ({\n month: months.findIndex((x) => x.toLowerCase() === m[1].toLowerCase()),\n year: Number.parseInt(m[2], 10),\n }))\n .filter((r) => r.month !== -1);\n });\n\n if (pairs.length) {\n return uniqueMonthYearPairs(pairs);\n }\n\n // Fallback looking for months only\n const months = monthSets\n .flatMap((ms) => ms.map((name, i) => (new RegExp(name, 'i').test(text) ? i : -1)))\n .filter(uniqueItem)\n .filter((i) => i >= 0)\n .sort((a, b) => a - b);\n\n const years = (text.match(/\\b20\\d{2}\\b/g) ?? [])\n .map((y) => Number.parseInt(y, 10))\n .filter(uniqueItem)\n .sort((a, b) => a - b);\n\n if (!months.length) return [];\n\n if (years.length === 1) {\n return months.map((month) => ({ month, year: years[0] }));\n }\n\n // Heuristic: months >= July belong to y0 and <= June belongs to y1\n if (years.length === 2) {\n return months\n .map((month) => ({ month, year: month >= 6 ? years[0] : years[1] }))\n .sort((a, b) => a.year * 12 + a.month - (b.year * 12 + b.month));\n }\n\n // Year can't be determined, infer from target date\n return months\n .map((month) => ({ month, year: inferYearForMonth(target, month) }))\n .sort((a, b) => a.year * 12 + a.month - (b.year * 12 + b.month));\n}\n\nasync function navigateToMonth(\n root: Locator,\n target: Date,\n options?: SetOptions & { wait?: number; retry?: number },\n): Promise<boolean> {\n const currentMonths = await getCurrentMonthsAndYears(root, target);\n if (currentMonths.length === 0) return false;\n\n const targetTotal = target.getFullYear() * 12 + target.getMonth();\n if (currentMonths.find((m) => m.year * 12 + m.month === targetTotal)) {\n return true;\n }\n\n const firstMonthTotal = currentMonths[0].year * 12 + currentMonths[0].month;\n const diff = targetTotal - firstMonthTotal;\n\n const prevSelector = [\n '[aria-label*=\"prev\"]',\n '[aria-label*=\"Prev\"]',\n '[aria-label*=\"previous\"]',\n '[aria-label*=\"Previous\"]',\n '[class*=\"prev\"]',\n '[class*=\"Prev\"]',\n '[title*=\"prev\"]',\n '[title*=\"Prev\"]',\n 'button:has-text(\"Previous\")',\n 'button:has-text(\"Prev\")',\n ].join(', ');\n const nextSelector = [\n '[aria-label*=\"next\"]',\n '[aria-label*=\"Next\"]',\n '[class*=\"next\"]',\n '[class*=\"Next\"]',\n '[title*=\"next\"]',\n '[title*=\"Next\"]',\n 'button:has-text(\"Next\")',\n ].join(', ');\n\n const btn = diff < 0 ? root.locator(prevSelector).filter({ visible: true }).first() : root.locator(nextSelector).filter({ visible: true }).first();\n\n if (!(await btn.count())) return false;\n\n for (let i = 0; i < Math.abs(diff); i++) {\n await btn.click(options);\n await root.page().waitForTimeout(options?.wait ?? 50);\n }\n\n await waitForAnimationsToFinish(root);\n\n const afterMonths = await getCurrentMonthsAndYears(root, target);\n if (afterMonths.some((m) => m.year * 12 + m.month === targetTotal)) return true;\n\n if ((options?.retry ?? 0) < 3) {\n const retry = (options?.retry ?? 0) + 1;\n return await navigateToMonth(root, target, { ...options, wait: 50 + 50 * retry, retry }); // Retry max 3x\n }\n\n return false;\n}\n\nasync function setDayByAriaLabel(table: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const formats = ['DD/MM/YYYY', 'MM/DD/YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD'];\n const candidateLabels = [value.toDateString(), ...formats.map((fmt) => formatDate(value, fmt))];\n\n const cells = (\n await Promise.all(\n candidateLabels.map(async (label) => {\n const cell = table.locator(`[aria-label=\"${label}\"], [aria-label*=\"${label}\"]`).first();\n return (await cell.isVisible(options)) ? cell : null;\n }),\n )\n ).filter((l): l is Locator => l !== null);\n\n if (cells.length === 0) return false;\n\n /* v8 ignore start */\n if (cells.length === 1) {\n await cells[0].click(options);\n return true;\n }\n /* v8 ignore stop */\n\n // Disambiguate using day 22 in case of dd/mm/yyyy vs mm/dd/yyyy\n const probeDate = new Date(value.getFullYear(), value.getMonth(), 22);\n const probeResults = await Promise.all(\n formats.map(async (fmt) => {\n const label = formatDate(probeDate, fmt);\n const cell = table.locator(`[aria-label=\"${label}\"], [aria-label*=\"${label}\"]`).first();\n return (await cell.isVisible(options)) ? fmt : null;\n }),\n );\n\n const finalFormat = probeResults.find((fmt) => fmt !== null);\n const finalCell = finalFormat\n ? table\n .locator(`[aria-label=\"${formatDate(value, finalFormat)}\"], [aria-label*=\"${formatDate(value, finalFormat)}\"]`)\n .first()\n : cells[0];\n\n await finalCell.click(options);\n return true;\n}\n\nasync function setDayByByCellText(table: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const day = value.getDate();\n const gridCells = table.locator('td, [role=\"gridcell\"]').filter({ visible: true });\n const hasGridCells = (await gridCells.count()) > 0;\n const cells = table.locator(dayCellSelector(hasGridCells)).filter({ visible: true });\n\n const allTexts = await cells.allInnerTexts();\n const foundIndices = allTexts.map((text, i) => (text.trim() === String(day) ? i : -1)).filter((i) => i !== -1);\n\n if (foundIndices.length === 0) return false;\n\n const ordered =\n foundIndices.length === 1 || day < 15 ? foundIndices : [...foundIndices].reverse();\n\n for (const index of ordered) {\n const cell = cells.nth(index);\n try {\n await cell.click(options);\n return true;\n } catch {\n // If this candidate is not interactable, continue to the next matching day node.\n }\n }\n\n return false;\n}\n\nasync function setDates(calendar: Locator, tables: Locator[], dates: Date[], options?: SetOptions): Promise<void> {\n let method: 'aria' | 'text' | undefined = undefined;\n\n for (const date of dates) {\n if (!(await navigateToMonth(calendar, date, options))) {\n throw new Error(`Failed to navigate to \"${formatDateForInput(date, 'month')}\"`);\n }\n\n const currentMonths = await getCurrentMonthsAndYears(calendar, date);\n const targetTotal = date.getFullYear() * 12 + date.getMonth();\n const tableIndex = currentMonths.findIndex((m) => m.year * 12 + m.month === targetTotal);\n const table = tables[tableIndex] ?? tables[0];\n\n if (method !== 'text' && (await setDayByAriaLabel(table, date, options))) {\n method ??= 'aria';\n continue;\n }\n\n if (method !== 'aria' && (await setDayByByCellText(table, date, options))) {\n method ??= 'text';\n continue;\n }\n\n throw new Error(`Failed to set date \"${formatDateForInput(date, 'date')}\"`);\n }\n}\n\nexport async function setCalendarDate({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n const dates = isArray(value, isDate) ? value : isRange(value) ? [value.from, value.to] : [value];\n\n const { calendar, tables } = (await getCalendar(el, options)) ?? {};\n if (!calendar || !tables || tables.length === 0) return false;\n\n try {\n await setDates(calendar, tables, dates, options);\n } finally {\n // Close the dialog\n if (tag === 'input') {\n await el.page().keyboard.press('Escape').catch();\n await el.blur().catch();\n }\n }\n\n return true;\n}\n","import { isArray, isDate, isRange } from '@letsrunit/utils';\nimport type { Range } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { setCalendarDate } from './calendar';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction toDates(value: Date | Date[] | Range<Date>): Date[] {\n if (isRange(value)) return [value.from, value.to];\n if (isArray(value, isDate)) return value;\n return [value];\n}\n\nfunction formatDate(date: Date, pattern: 'iso' | 'dmy' | 'mdy' | 'ymd'): string {\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n const mm = String(m).padStart(2, '0');\n const dd = String(d).padStart(2, '0');\n\n if (pattern === 'iso' || pattern === 'ymd') return `${y}-${mm}-${dd}`;\n if (pattern === 'dmy') return `${dd}/${mm}/${y}`;\n return `${mm}/${dd}/${y}`;\n}\n\nfunction digits(value: string): number[] {\n return (value.match(/\\d+/g) ?? []).map((v) => Number.parseInt(v, 10));\n}\n\nfunction matchesDateLoosely(value: string, target: Date): boolean {\n const nums = digits(value);\n if (nums.length < 3) return false;\n return nums.includes(target.getFullYear()) && nums.includes(target.getMonth() + 1) && nums.includes(target.getDate());\n}\n\nasync function commitInput(input: Locator, text: string, options?: SetOptions): Promise<string> {\n await input.click(options);\n await input.clear(options);\n await input.fill(text, options);\n await input.press('Enter', options).catch(() => null);\n await input.evaluate((node) => (node as HTMLInputElement).blur(), options).catch(() => null);\n await input.evaluate(() => new Promise(requestAnimationFrame)).catch(() => null);\n return input.inputValue(options).catch(() => '');\n}\n\nasync function setSingleInputDate(input: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const patterns: Array<'iso' | 'dmy' | 'mdy' | 'ymd'> = ['iso', 'dmy', 'mdy', 'ymd'];\n\n for (const pattern of patterns) {\n const readBack = await commitInput(input, formatDate(value, pattern), options);\n if (matchesDateLoosely(readBack, value)) return true;\n }\n\n return false;\n}\n\nasync function getDateInputs(el: Locator, options?: SetOptions): Promise<Locator[]> {\n const rootTag = await el.evaluate((node) => node.tagName.toLowerCase(), options);\n if (rootTag === 'input') return [el];\n\n const inputs = el.locator('input[type=\"text\"], input:not([type]), input');\n const count = await inputs.count();\n if (count === 0) return [];\n\n const result: Locator[] = [];\n for (let i = 0; i < count; i++) {\n const candidate = inputs.nth(i);\n const visible = await candidate.isVisible(options).catch(() => false);\n if (!visible) continue;\n result.push(candidate);\n }\n return result;\n}\n\nasync function asLoc(el: Locator, options?: SetOptions): Promise<Loc> {\n const tag = await el.evaluate((node) => node.tagName.toLowerCase(), options);\n const type = await el\n .getAttribute('type', options)\n .then((s) => s && s.toLowerCase())\n .catch(() => null);\n return { el, tag, type };\n}\n\nasync function getPickerRootFromInput(input: Locator): Promise<Locator | null> {\n const picker = input\n .locator('xpath=ancestor::*[.//input and .//*[@aria-label=\"calendar\"]][1]')\n .first();\n if ((await picker.count()) > 0) return picker;\n return null;\n}\n\nasync function setByCalendar(input: Locator, date: Date, options?: SetOptions): Promise<boolean> {\n const picker = await getPickerRootFromInput(input);\n if (!picker) return false;\n const pickerLoc = await asLoc(picker, options);\n return setCalendarDate(pickerLoc, date, options);\n}\n\nexport async function setCompositeDate({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n const dates = toDates(value as Date | Date[] | Range<Date>);\n const inputs = await getDateInputs(el, options);\n if (inputs.length === 0) return false;\n\n if (dates.length === 1) {\n const singleInput = await setSingleInputDate(inputs[0], dates[0], options);\n if (singleInput) return true;\n return setByCalendar(inputs[0], dates[0], options);\n }\n\n if (inputs.length < 2) return false;\n\n const first = await setSingleInputDate(inputs[0], dates[0], options);\n const second = await setSingleInputDate(inputs[1], dates[1], options);\n if (first && second) return true;\n\n const firstCal = await setByCalendar(inputs[0], dates[0], options);\n const secondCal = await setByCalendar(inputs[1], dates[1], options);\n return firstCal && secondCal;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nasync function openControl(el: Locator, options?: SetOptions): Promise<void> {\n const activator = el\n .locator('button[aria-haspopup], [role=\"button\"][aria-haspopup], input[readonly]')\n .first();\n if ((await activator.count()) > 0) {\n await activator.click(options);\n return;\n }\n await el.click(options);\n}\n\nfunction getPopupCandidates(page: any): Locator {\n return page.locator(\n [\n '[role=\"listbox\"]:visible',\n '[role=\"menu\"]:visible',\n '[role=\"dialog\"]:visible',\n '[role=\"presentation\"]:visible',\n '.cdk-overlay-pane:visible',\n ].join(', '),\n );\n}\n\nasync function looksLikeCompositeSelect(el: Locator, options?: SetOptions): Promise<boolean> {\n const role = await el.getAttribute('role', options).catch(() => null);\n if (role === 'combobox' || role === 'listbox') return false;\n\n if ((await el.locator('input[type=\"radio\"], input[type=\"checkbox\"]').count()) > 0) return false;\n if ((await el.locator('[role=\"slider\"], [aria-valuenow]').count()) > 0) return false;\n\n const cues = el.locator(\n [\n '[aria-haspopup]',\n '[aria-controls]',\n '[aria-owns]',\n 'input[readonly]',\n 'button[aria-haspopup]',\n ].join(', '),\n );\n return (await cues.count()) > 0;\n}\n\nasync function getOptionFromPopup(popup: Locator, value: string, options?: SetOptions): Promise<Locator | null> {\n const byValue = popup.locator(\n `[value=${JSON.stringify(value)}], [data-value=${JSON.stringify(value)}], [aria-label=${JSON.stringify(value)}]`,\n );\n if ((await byValue.count()) > 0) return byValue.first();\n\n const byRole = popup.getByRole('option', { name: caseInsensitiveExact(value) });\n if ((await byRole.count()) > 0) return byRole.first();\n\n const byText = popup.getByText(caseInsensitiveExact(value), { exact: true });\n if ((await byText.count()) > 0) return byText.first();\n\n return null;\n}\n\nasync function getPopupOptions(popup: Locator): Promise<Locator> {\n return popup.locator(\n [\n '[role=\"option\"]',\n '[title]',\n ].join(', '),\n );\n}\n\nfunction toNumber(value: string | null): number | null {\n if (!value) return null;\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : null;\n}\n\nasync function getContextNumericValue(el: Locator, options?: SetOptions): Promise<number | null> {\n const labelled = el.page().getByLabel('result').first();\n if ((await labelled.count()) > 0) {\n const text = await labelled.textContent(options).catch(() => null);\n const parsed = toNumber(text);\n if (parsed !== null) return parsed;\n }\n return null;\n}\n\nasync function getRootText(el: Locator, options?: SetOptions): Promise<string> {\n return (\n (await el\n .evaluate((node) => (node.textContent ?? '').replace(/\\s+/g, ' ').trim(), options)\n .catch(() => '')) || ''\n );\n}\n\nexport async function setCompositeSelect({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n if (!(await looksLikeCompositeSelect(el, options))) return false;\n\n const stringValue = String(value);\n const before = await getRootText(el, options);\n const popupsBefore = await getPopupCandidates(el.page()).count();\n\n await openControl(el, options);\n\n const popups = await getPopupCandidates(el.page());\n await popups.first().waitFor({ state: 'visible', timeout: options?.timeout }).catch(() => null);\n const count = await popups.count();\n if (count === 0) return false;\n\n const popup = popups.nth(Math.max(0, count - 1));\n const option = await getOptionFromPopup(popup, stringValue, options);\n if (option) {\n await option.click({ ...options, force: true });\n }\n\n const after = await getRootText(el, options);\n if (after && before && after !== before) return true;\n\n const popupsAfter = await getPopupCandidates(el.page()).count();\n if (option && (popupsAfter < popupsBefore || popupsAfter < count)) return true;\n\n const targetNum = toNumber(stringValue);\n if (targetNum === null) return false;\n\n const optionsLoc = await getPopupOptions(popup);\n const totalOptions = await optionsLoc.count();\n if (totalOptions === 0) return false;\n\n const labels: string[] = [];\n for (let i = 0; i < totalOptions; i++) {\n const candidate = optionsLoc.nth(i);\n const label =\n (await candidate.getAttribute('title', options).catch(() => null)) ||\n (await candidate.textContent(options).catch(() => '')) ||\n '';\n const normalized = label.replace(/\\s+/g, ' ').trim();\n if (!normalized) continue;\n if (!labels.includes(normalized)) labels.push(normalized);\n }\n\n for (const label of labels) {\n await openControl(el, options);\n const activePopups = getPopupCandidates(el.page());\n const activePopupCount = await activePopups.count();\n if (activePopupCount === 0) continue;\n const activePopup = activePopups.nth(Math.max(0, activePopupCount - 1));\n\n let candidate = activePopup.locator(`[title=${JSON.stringify(label)}]`).first();\n if ((await candidate.count()) === 0) {\n candidate = activePopup.getByText(caseInsensitiveExact(label), { exact: true }).first();\n }\n if ((await candidate.count()) === 0) continue;\n\n await candidate.click({ ...options, force: true });\n\n const numeric = await getContextNumericValue(el, options);\n if (numeric !== null && Math.abs(numeric - targetNum) < 0.001) return true;\n }\n\n const current = await getContextNumericValue(el, options);\n if (current === null) return false;\n\n await openControl(el, options);\n await el.focus(options).catch(() => null);\n const page = el.page();\n const key = targetNum > current ? 'ArrowDown' : 'ArrowUp';\n\n for (let i = 0; i < 20; i++) {\n await page.keyboard.press(key);\n await page.keyboard.press('Enter');\n const numeric = await getContextNumericValue(el, options);\n if (numeric !== null && Math.abs(numeric - targetNum) < 0.001) return true;\n await openControl(el, options);\n await el.focus(options).catch(() => null);\n }\n\n return false;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function getSliderHandle(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const byAria = el.locator('[aria-valuenow], [role=\"slider\"]').first();\n if ((await byAria.count()) > 0) return byAria;\n\n const focusables = el.locator('[tabindex]');\n if ((await focusables.count()) > 0) return focusables.first();\n\n const buttons = el.locator('button');\n if ((await buttons.count()) > 0) return buttons.first();\n\n return null;\n}\n\nfunction toNumber(value: string | null): number | null {\n if (!value) return null;\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : null;\n}\n\nasync function getValueFromHandle(handle: Locator, options?: SetOptions): Promise<number | null> {\n const fromAria = await handle.getAttribute('aria-valuenow', options).catch(() => null);\n const parsedAria = toNumber(fromAria);\n if (parsedAria !== null) return parsedAria;\n\n const fromText = await handle.textContent(options).catch(() => null);\n return toNumber(fromText);\n}\n\nasync function getValueFromContext(el: Locator, options?: SetOptions): Promise<number | null> {\n const labelled = el.page().getByLabel('result').first();\n if ((await labelled.count()) > 0) {\n const text = await labelled.textContent(options).catch(() => null);\n const parsed = toNumber(text);\n if (parsed !== null) return parsed;\n }\n\n const siblingNumber = await el\n .evaluate((node) => {\n const parent = node.parentElement;\n if (!parent) return null;\n for (const child of Array.from(parent.children)) {\n if (child === node) continue;\n const text = (child.textContent ?? '').trim();\n if (!text) continue;\n const n = Number.parseFloat(text);\n if (Number.isFinite(n)) return n;\n }\n return null;\n }, options)\n .catch(() => null);\n\n return typeof siblingNumber === 'number' ? siblingNumber : null;\n}\n\nasync function readValue(el: Locator, handle: Locator, options?: SetOptions): Promise<number | null> {\n const fromHandle = await getValueFromHandle(handle, options);\n if (fromHandle !== null) return fromHandle;\n return getValueFromContext(el, options);\n}\n\nexport async function setCompositeSlider({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'number') return false;\n\n const handle = await getSliderHandle(el, options);\n if (!handle) return false;\n\n const initial = await readValue(el, handle, options);\n if (initial === null) return false;\n if (Math.abs(initial - value) < 0.001) return true;\n\n await handle.focus(options);\n const page = el.page();\n const key = value > initial ? 'ArrowRight' : 'ArrowLeft';\n const maxPresses = Math.max(1, Math.min(200, Math.abs(Math.round(value - initial)) * 2));\n\n for (let i = 0; i < maxPresses; i++) {\n await page.keyboard.press(key);\n const current = await readValue(el, handle, options);\n if (current !== null && Math.abs(current - value) < 0.001) return true;\n }\n\n const finalValue = await readValue(el, handle, options);\n return finalValue !== null && Math.abs(finalValue - value) < 0.001;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function getToggleTarget(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const candidates = el.locator('button, [role=\"button\"], [role=\"switch\"], [role=\"checkbox\"], [aria-checked], [tabindex]');\n if ((await candidates.count()) === 0) return null;\n\n const visible = candidates.filter({ visible: true });\n if ((await visible.count()) > 0) return visible.first();\n\n return candidates.first();\n}\n\nasync function readToggleState(target: Locator, options?: SetOptions): Promise<boolean | null> {\n const ariaChecked = await target.getAttribute('aria-checked', options).catch(() => null);\n if (ariaChecked === 'true') return true;\n if (ariaChecked === 'false') return false;\n\n const checked = await target.getAttribute('checked', options).catch(() => null);\n if (checked !== null) return checked !== 'false';\n\n const className = await target.getAttribute('class', options).catch(() => null);\n if (className) {\n const lower = className.toLowerCase();\n if (/(^|\\s|-)checked(\\s|$|-)/.test(lower)) return true;\n if (/(^|\\s|-)unchecked(\\s|$|-)/.test(lower)) return false;\n if (/switch/.test(lower)) return /checked/.test(lower);\n }\n\n return null;\n}\n\nexport async function setCompositeToggle({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n\n const target = await getToggleTarget(el, options);\n if (!target) return false;\n\n const initial = await readToggleState(target, options);\n if (initial === null) return false;\n\n const desired = Boolean(value);\n if (initial !== desired) {\n await target.click(options);\n }\n\n const next = await readToggleState(target, options);\n return next === desired;\n}\n","import { diffArray, isRange, type Scalar } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nexport async function clearSelect(el: Locator, opts?: SetOptions) {\n const isMultiple = await el.evaluate((e) => (e as HTMLSelectElement).multiple, opts);\n const options = await el.evaluate(\n (e) =>\n Array.from((e as HTMLSelectElement).options).map((o) => ({\n value: o.value,\n disabled: o.disabled,\n })),\n opts,\n );\n\n if (isMultiple) {\n await el.selectOption([], opts);\n return;\n }\n\n const empty = options.find((o) => o.value === '' && !o.disabled);\n if (empty) {\n await el.selectOption({ value: '' }, opts);\n return;\n }\n\n const firstEnabled = options.find((o) => !o.disabled);\n if (firstEnabled) {\n await el.selectOption({ value: firstEnabled.value }, opts);\n }\n}\n\nasync function multiSelect(el: Locator, value: Scalar[], opts?: SetOptions) {\n const isMultiple = await el.evaluate((e) => (e as HTMLSelectElement).multiple, opts);\n if (!isMultiple) throw new Error('Select is not multiple');\n\n const requested = value.map((v) => String(v));\n const selected = await el.selectOption(requested, opts);\n\n const missing = diffArray(selected, requested);\n if (missing.length > 0) {\n throw new Error(`Options not found in select: ${missing.join(', ')}`);\n }\n}\n\nasync function singleSelect(el: Locator, value: string, opts?: SetOptions) {\n const result = await el.selectOption(value, opts);\n\n if (result.length === 0) {\n throw new Error(`Option \"${value}\" not found in select`);\n }\n}\n\nexport async function selectNative({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (tag !== 'select') return false;\n\n if (value instanceof Date || isRange(value)) {\n return false;\n }\n\n if (value === null) {\n await clearSelect(el, options);\n return true;\n }\n\n if (Array.isArray(value)) {\n if (value.some((v) => v instanceof Date)) return false;\n await multiSelect(el, value, options);\n return true;\n }\n\n await singleSelect(el, String(value), options);\n return true;\n}\n","import type { Locator } from '@playwright/test';\nimport { clearSelect } from './native-select';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype CandidateInfo = {\n el: Locator;\n tag: string;\n type: string | null;\n name: string | null;\n id: string | null;\n ariaLabel: string | null;\n placeholder: string | null;\n min: string | null;\n max: string | null;\n inputMode: string | null;\n attrs: Record<string, string>;\n options: { value: string; text: string }[];\n};\n\ntype Score = { day: number; month: number; year: number };\n\nasync function getCandidateLocs(el: Locator, options?: SetOptions): Promise<CandidateInfo[]> {\n const candidates = await el.locator('input, select').all();\n if (candidates.length < 2 || candidates.length > 3) return [];\n\n return Promise.all(\n candidates.map(async (c) => {\n const info = await c.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement | HTMLSelectElement;\n const attrs: Record<string, string> = {};\n for (const attr of e.attributes) {\n attrs[attr.name] = attr.value;\n }\n\n let options: { value: string; text: string }[] = [];\n if (e.tagName.toLowerCase() === 'select') {\n options = Array.from((e as HTMLSelectElement).options).map((o) => ({\n value: o.value,\n text: o.text,\n }));\n }\n\n return {\n tag: e.tagName.toLowerCase(),\n type: e.getAttribute('type'),\n name: e.getAttribute('name'),\n id: e.getAttribute('id'),\n ariaLabel: e.getAttribute('aria-label'),\n placeholder: e.getAttribute('placeholder'),\n min: e.getAttribute('min'),\n max: e.getAttribute('max'),\n inputMode: e.getAttribute('inputmode'),\n attrs,\n options,\n };\n },\n /* v8 ignore stop */\n options,\n );\n return { el: c, ...info };\n }),\n );\n}\n\nfunction scoreByAttributes(candidateLocs: CandidateInfo[]): Score[] {\n const scores: Score[] = candidateLocs.map(() => ({ day: 0, month: 0, year: 0 }));\n\n candidateLocs.forEach((loc, i) => {\n const text = [loc.name, loc.id, loc.ariaLabel, loc.placeholder, ...Object.values(loc.attrs)]\n .join(' ')\n .toLowerCase();\n\n // 1. Text signals\n if (/\\b(day|dd|d)\\b/i.test(text)) scores[i].day += 5;\n if (/\\b(month|mm|m)\\b/i.test(text)) scores[i].month += 5;\n if (/\\b(year|yyyy|yy|y)\\b/i.test(text)) scores[i].year += 5;\n\n // 2. Attribute signals\n if (loc.max) {\n const max = parseInt(loc.max, 10);\n if (max >= 1 && max <= 31) scores[i].day += 2;\n if (max >= 1 && max <= 12) scores[i].month += 2;\n if (max > 1900) scores[i].year += 2;\n }\n\n if (loc.tag === 'select') {\n if (loc.options.length >= 12 && loc.options.length <= 13) {\n scores[i].month += 3;\n }\n const allNumeric = loc.options.every((o) => !isNaN(parseInt(o.value, 10)) || !o.value);\n if (allNumeric && loc.options.length >= 12 && loc.options.length <= 13) {\n scores[i].month += 2;\n }\n }\n });\n\n return scores;\n}\n\nasync function behavioralProbe(candidateLocs: CandidateInfo[], scores: Score[], options?: SetOptions) {\n const sorted = [...scores].sort((a, b) => Math.max(b.day, b.month, b.year) - Math.max(a.day, a.month, a.year));\n if (sorted[0].day < 2 && sorted[0].month < 2 && sorted[0].year < 2) {\n for (let i = 0; i < candidateLocs.length; i++) {\n const loc = candidateLocs[i];\n if (loc.tag === 'input') {\n const can_be_day = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '31';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_day) scores[i].day += 1;\n\n const cannot_be_day = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '32';\n const valid = !e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (cannot_be_day) scores[i].day += 1;\n\n const can_be_month = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '12';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_month) scores[i].month += 1;\n\n const cannot_be_month = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '13';\n const valid = !e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (cannot_be_month) scores[i].month += 1;\n\n const can_be_year = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '2033';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_year) scores[i].year += 1;\n }\n }\n }\n}\n\nfunction applyTieBreakers(candidateLocs: CandidateInfo[], scores: Score[]) {\n // Tie-breaker: typical order D-M-Y or Y-M-D\n if (candidateLocs.length === 3) {\n scores[0].day += 0.1;\n scores[1].month += 0.1;\n scores[2].year += 0.1;\n }\n}\n\nfunction resolveDateFields(\n scores: Score[],\n): { day: number; month: number; year: number } | null {\n const result: { day?: number; month?: number; year?: number } = {};\n const used = new Set<number>();\n\n for (const field of ['year', 'month', 'day'] as const) {\n let bestIdx = -1;\n let bestScore = -1;\n for (let i = 0; i < scores.length; i++) {\n if (!used.has(i) && scores[i][field] > bestScore) {\n bestScore = scores[i][field];\n bestIdx = i;\n }\n }\n if (bestIdx !== -1 && bestScore > 0) {\n result[field] = bestIdx;\n used.add(bestIdx);\n }\n }\n\n if (result.day === undefined || result.month === undefined || result.year === undefined) {\n return null;\n }\n\n return result as { day: number; month: number; year: number };\n}\n\nasync function setMonthField(monthLoc: CandidateInfo, monthVal: number, options?: SetOptions) {\n if (monthLoc.tag === 'select') {\n const options_list = monthLoc.options;\n const valueMatch = options_list.find((o) => parseInt(o.value, 10) === monthVal);\n if (valueMatch) {\n await monthLoc.el.selectOption(valueMatch.value, options);\n } else {\n // Try to match by index (considering common 0-indexed or 1-indexed headers)\n // Usually month selects have 12 or 13 (with placeholder) options\n const offset = options_list.length === 13 ? 1 : 0;\n await monthLoc.el.selectOption({ index: monthVal - 1 + offset }, options);\n }\n } else {\n await monthLoc.el.fill(String(monthVal), options);\n }\n}\n\nasync function clearFields(locs: CandidateInfo[], options?: SetOptions) {\n for (const loc of locs) {\n if (loc.tag === 'select') {\n await clearSelect(loc.el, options);\n } else {\n await loc.el.clear(options);\n }\n }\n}\n\nexport async function setDateGroup({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && value !== null) return false;\n if (tag === 'input' || tag === 'textarea' || tag === 'select') return false;\n\n const candidateLocs = await getCandidateLocs(el, options);\n if (candidateLocs.length === 0) return false;\n\n if (value === null) {\n await clearFields(candidateLocs, options);\n return true;\n }\n\n const scores = scoreByAttributes(candidateLocs);\n await behavioralProbe(candidateLocs, scores, options);\n applyTieBreakers(candidateLocs, scores);\n\n const result = resolveDateFields(scores);\n\n if (!result) {\n const candidatesStr = candidateLocs.map((c) => `${c.tag}[name=${c.name}]`).join(', ');\n throw new Error(`Could not reliably detect date fields for ${tag}. Detected candidates: ${candidatesStr}`);\n }\n\n const dayVal = value.getDate();\n const monthVal = value.getMonth() + 1;\n const yearVal = value.getFullYear();\n\n await candidateLocs[result.day].el.fill(String(dayVal), options);\n await setMonthField(candidateLocs[result.month], monthVal, options);\n await candidateLocs[result.year].el.fill(String(yearVal), options);\n\n return true;\n}\n","import { cartesian, isArray, isDate, isRange, type Range } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype DateOrder = Array<'day' | 'month' | 'year'>;\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction buildDateString(date: Date, order: DateOrder, sep: string, pad: boolean): string {\n const d = date.getDate();\n const m = date.getMonth() + 1;\n const y = date.getFullYear();\n\n const parts: Record<'day' | 'month' | 'year', string> = {\n day: pad ? pad2(d) : String(d),\n month: pad ? pad2(m) : String(m),\n year: String(y),\n };\n\n return order.map((p) => parts[p]).join(sep);\n}\n\nfunction parseDateString(value: string, order: DateOrder, sep: string): Date | null {\n const raw = value.trim();\n if (!raw) return null;\n\n const tokens = raw.split(sep);\n if (tokens.length !== 3) return null;\n\n const nums = tokens.map((t) => Number(t));\n if (nums.some((n) => !Number.isFinite(n))) return null;\n\n const map: Record<'day' | 'month' | 'year', number> = { day: 0, month: 0, year: 0 };\n for (let i = 0; i < 3; i++) map[order[i]] = nums[i];\n\n const year = map.year;\n const month = map.month;\n const day = map.day;\n\n if (month < 1 || month > 12) return null;\n if (day < 1 || day > 31) return null;\n\n const dt = new Date(year, month - 1, day);\n if (dt.getFullYear() !== year || dt.getMonth() !== month - 1 || dt.getDate() !== day) return null;\n\n return dt;\n}\n\nfunction matchesDateLoosely(value: string, date: Date): boolean {\n const digits = (value.match(/\\d+/g) ?? []).map((d) => Number.parseInt(d, 10));\n if (digits.length < 3) return false;\n\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n\n return digits.includes(year) && digits.includes(month) && digits.includes(day);\n}\n\nasync function inferLocaleAndPattern(el: Locator, options?: SetOptions): Promise<{\n locale: string;\n order: DateOrder;\n sep: string;\n}> {\n return el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n () => {\n const lang = document.documentElement.getAttribute('lang') || navigator.language || 'en-US';\n const dtf = new Intl.DateTimeFormat(lang, { year: 'numeric', month: '2-digit', day: '2-digit' });\n\n const parts = dtf.formatToParts(new Date(2033, 10, 22)); // 22 Nov 2033, disambiguates day vs month\n const order: Array<'day' | 'month' | 'year'> = [];\n let sep = '/';\n\n for (const p of parts) {\n if (p.type === 'day' || p.type === 'month' || p.type === 'year') order.push(p.type);\n if (p.type === 'literal') {\n const lit = p.value.trim();\n if (lit) sep = lit;\n }\n }\n\n // Fallback if Intl returns something odd\n const finalOrder = order.length === 3 ? order : (['day', 'month', 'year'] as const);\n\n return { locale: lang, order: finalOrder as any, sep };\n },\n /* v8 ignore stop */\n options,\n );\n}\n\nasync function fillAndReadBack(el: Locator, s: string, options?: SetOptions, nextInput?: Locator): Promise<string> {\n await el.clear(options);\n await el.fill(s, options);\n\n if (nextInput) {\n await nextInput.focus(options);\n } else {\n await el.evaluate((el) => el.blur(), options);\n }\n\n // Some frameworks need a tiny tick.\n await el.evaluate(() => new Promise(requestAnimationFrame));\n\n return await el.inputValue(options);\n}\n\nfunction isAmbiguous(value: Date | Date[] | Range<Date>, value2?: Date): boolean {\n if (value2 && value instanceof Date) value = [value, value2];\n return toDateArray(value).every((date) => date.getDate() <= 12);\n}\n\nfunction toDateArray(value: Date | Date[] | Range<Date>): Date[] {\n return isRange(value) ? [value.from, value.to] : isArray(value) ? value : [value];\n}\n\nasync function setDateValue(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n order: DateOrder,\n sep: string,\n pad: boolean,\n options?: SetOptions,\n nextInput?: Locator,\n): Promise<boolean> {\n const dates = toDateArray(value);\n const glue = isRange(value) ? ' - ' : ',';\n\n const s = dates.map((d) => buildDateString(d, order, sep, pad)).join(glue);\n const back = await fillAndReadBack(el, s, options, nextInput);\n if (!back) return false;\n\n const backParts = back.split(glue);\n const failed =\n backParts.length !== dates.length ||\n dates.some((date, i) => {\n const part = backParts[i]?.trim();\n if (!part) return true;\n\n const parsed = parseDateString(part, order, sep);\n if (parsed && sameYMD(parsed, date)) return false;\n\n return !matchesDateLoosely(part, date);\n });\n\n return !failed;\n}\n\nasync function tryProbe(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n order: DateOrder,\n sep: string,\n pad: boolean,\n options?: SetOptions,\n nextInput?: Locator,\n): Promise<boolean | null> {\n const baseDate = isRange(value) ? value.from : isArray(value) ? value[0] : value;\n const y = baseDate.getFullYear();\n const m = baseDate.getMonth();\n const probeMonths = [m, m - 1, m + 1];\n\n for (const month of probeMonths) {\n const probeValue = isRange(value)\n ? { from: new Date(y, month, 22), to: new Date(y, month, 23) }\n : new Date(y, month, 22);\n\n const success = await setDateValue(el, probeValue, order, sep, pad, options, nextInput);\n if (success) return true;\n }\n\n return null;\n}\n\nfunction sameYMD(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nasync function formatCombinations(el: Locator, options?: SetOptions) {\n const { order: localeOrder, sep: localeSep } = await inferLocaleAndPattern(el, options);\n\n const orders: DateOrder[] = [\n localeOrder,\n ['year', 'month', 'day'], // ISO order\n ['day', 'month', 'year'],\n ['month', 'day', 'year'],\n ];\n\n const seenOrders = new Set<string>();\n const uniqueOrders: DateOrder[] = [];\n for (const o of orders) {\n const key = o.join(',');\n if (!seenOrders.has(key)) {\n seenOrders.add(key);\n uniqueOrders.push(o);\n }\n }\n\n const seps = Array.from(new Set([localeSep, '-', '/', '.']));\n const pads = [true, false];\n\n const combinations = cartesian(uniqueOrders, seps, pads);\n\n // Re-order combinations to ensure that locale and iso is second\n const score = ([o, s]: (typeof combinations)[number]) =>\n o.join(s) === localeOrder.join(localeSep) ? 0 : o.join(s) === 'year-month-day'? 1 : 2;\n combinations.sort((a, b) => score(a) - score(b));\n\n return { combinations, localeSep };\n}\n\nasync function setInputValue(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n el2?: Locator,\n value2?: Date,\n options?: SetOptions,\n): Promise<boolean> {\n if (await el.evaluate((el) => (el as HTMLInputElement).readOnly, options)) return false;\n if (el2 && (await el2.evaluate((el) => (el as HTMLInputElement).readOnly, options))) return false;\n\n const { combinations, localeSep } = await formatCombinations(el, options);\n let fallbackMatch: [DateOrder, string, boolean] | null = null;\n\n for (const [order, sep, pad] of combinations) {\n // Optimization: for non-locale separators, only try padded\n if (sep !== localeSep && !pad) continue;\n\n const success = await setDateValue(el, value, order, sep, pad, options, el2);\n if (!success) continue;\n\n if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n if (!success2) continue;\n }\n\n if (!isAmbiguous(value, value2)) return true; // Done\n\n const probeResult = await tryProbe(el, value, order, sep, pad, options, el2);\n\n if (probeResult === true) {\n await setDateValue(el, value, order, sep, pad, options, el2);\n if (el2 && value2) await setDateValue(el2, value2, order, sep, pad, options);\n return true; // Done\n }\n\n // Maybe out of range? Keep as fallback\n if (probeResult === null && !fallbackMatch) fallbackMatch = [order, sep, pad];\n }\n\n if (fallbackMatch) {\n const [order, sep, pad] = fallbackMatch;\n const success = await setDateValue(el, value, order, sep, pad, options, el2);\n\n if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n return success && success2;\n }\n\n return success;\n }\n\n return false;\n}\n\nexport async function setDateTextInput({ el, tag, type }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n if (tag === 'textarea' || tag === 'select') return false;\n\n if (tag !== 'input' && isRange(value, isDate)) {\n const inputs = el.locator('input[type=text], input:not([type])');\n if ((await inputs.count()) === 2) {\n return await setInputValue(inputs.nth(0), value.from, inputs.nth(1), value.to, options);\n }\n }\n\n if (tag === 'input' && type && type !== 'text') return false;\n\n let input = el;\n\n if (tag !== 'input') {\n const inputs = el.locator('input[type=text], input:not([type])');\n if ((await inputs.count()) !== 1) return false;\n input = inputs.nth(0);\n }\n\n return await setInputValue(input, value, undefined, undefined, options);\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setNativeCheckbox({ el, tag, type }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n if (tag === 'select' || tag === 'textarea' || tag === 'button') return false;\n\n let target = el;\n\n if (tag !== 'input' || (type !== 'checkbox' && type !== 'radio')) {\n target = el.locator('input[type=checkbox], input[type=radio]');\n if ((await target.count()) !== 1) return false;\n }\n\n if (value) {\n await target.check(options);\n } else {\n await target.uncheck(options);\n }\n\n return true;\n}\n","import { isDate, isRange, type Range } from '@letsrunit/utils';\nimport { formatDateForInput } from '../utils/date';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function setSingleDate({ el, tag, type }: Loc, value: Date, options?: SetOptions): Promise<boolean> {\n let target = el;\n let targetType = type;\n\n if (tag !== 'input' || !type || !['date', 'datetime-local', 'month', 'week', 'time'].includes(type)) {\n const inputs = el.locator(\n 'input[type=date], input[type=datetime-local], input[type=month], input[type=week], input[type=time]',\n );\n if ((await inputs.count()) === 1) {\n const isVisible = await inputs.evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n (e) => {\n const style = window.getComputedStyle(e);\n return style.display !== 'none' && style.visibility !== 'hidden' && e.getAttribute('type') !== 'hidden';\n },\n );\n if (isVisible) {\n target = inputs;\n targetType = (await target.getAttribute('type', options)) || null;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n if (!targetType) return false;\n\n const val = formatDateForInput(value, targetType);\n await target.fill(val, options);\n\n return true;\n}\n\nasync function setDateRange({ el, tag }: Loc, value: Range<Date>, options?: SetOptions): Promise<boolean> {\n if (tag === 'input' || tag === 'select' || tag === 'textarea' || tag === 'button') return false;\n\n const inputs = el.locator('input[type=date]');\n if ((await inputs.count()) !== 2) return false;\n\n const from = formatDateForInput(value.from, 'date');\n const to = formatDateForInput(value.to, 'date');\n\n await inputs.nth(0).fill(from, options);\n await inputs.nth(1).fill(to, options);\n\n return true;\n}\n\nexport async function setNativeDate(loc: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (value instanceof Date) {\n return await setSingleDate(loc, value, options);\n }\n\n if (isRange(value, isDate)) {\n return await setDateRange(loc, value, options);\n }\n\n return false;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setNativeInput({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (tag !== 'input' && tag !== 'textarea') return false;\n\n if (value === null) {\n await el.clear(options);\n return true;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n await el.fill(String(value), options);\n return true;\n }\n\n return false;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setOtpValue({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string') return false;\n if (tag === 'input' || tag === 'select' || tag === 'button' || tag === 'textarea') return false;\n\n const chars = value.replace(/\\W/g, '').split('');\n if (chars.length < 3 || chars.length > 8) return false;\n\n // Find all text inputs as child of el\n const inputs = await el.locator('input[type=\"text\"], input:not([type])').all();\n\n // Check if the number of input matches the number of characters. If not, return false.\n if (inputs.length !== chars.length) return false;\n\n // Fill out each input with one character.\n for (let i = 0; i < chars.length; i++) {\n await inputs[i].fill(chars[i], options);\n }\n\n return true;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nfunction caseInsensitiveLooseExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^\\\\s*${escaped}\\\\s*$`, 'i');\n}\n\nexport async function setRadioGroup(\n { el }: Loc,\n value: Value,\n options?: SetOptions,\n): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n\n const stringValue = String(value);\n if (stringValue.includes('\\n') || stringValue.includes('\"')) return false;\n\n // 1. Native: exact value attribute\n const radio = el.locator(`input[type=radio][value=\"${stringValue}\"]`);\n if ((await radio.count()) === 1) {\n await radio.check(options);\n return true;\n }\n\n // 2. Native: by label text\n const radioByLabel = el.getByLabel(stringValue, { exact: true }).locator('input[type=radio]');\n if ((await radioByLabel.count()) === 1) {\n await radioByLabel.check(options);\n return true;\n }\n\n // 2b. Native wrappers: label text contains value\n const wrappedRadio = el.locator('label').filter({ hasText: caseInsensitiveLooseExact(stringValue) }).locator('input[type=radio]');\n if ((await wrappedRadio.count()) >= 1) {\n const wrappedLabel = el.locator('label').filter({ hasText: caseInsensitiveLooseExact(stringValue) }).first();\n await wrappedLabel.click({ ...options, force: true });\n return true;\n }\n\n const ariaRadios = el.getByRole('radio');\n const hasAriaRadios = (await ariaRadios.count()) > 0;\n\n // 3. ARIA: by accessible name\n if (hasAriaRadios) {\n const ariaRadioByName = el.getByRole('radio', { name: caseInsensitiveExact(stringValue) });\n if ((await ariaRadioByName.count()) >= 1) {\n const item = ariaRadioByName.first();\n const ariaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaChecked !== 'true') await item.click(options);\n\n const nextAriaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === 'true';\n }\n\n // 4. ARIA: by value-like attributes\n const ariaRadioByValue = el.locator(\n `[role=\"radio\"][value=\"${stringValue}\"], ` +\n `[role=\"radio\"][data-value=\"${stringValue}\"], ` +\n `[role=\"radio\"][aria-label=\"${stringValue}\"]`,\n );\n if ((await ariaRadioByValue.count()) >= 1) {\n const item = ariaRadioByValue.first();\n const ariaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaChecked !== 'true') await item.click(options);\n\n const nextAriaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === 'true';\n }\n }\n\n // 5. Native: click role radio by accessible name as last resort\n const roleRadio = el.getByRole('radio', { name: caseInsensitiveLooseExact(stringValue) });\n if ((await roleRadio.count()) >= 1) {\n await roleRadio.first().click(options);\n return await roleRadio.first().isChecked(options).catch(() => false);\n }\n\n // 6. Fallback: iterate label text manually\n const labels = el.locator('label');\n const labelCount = await labels.count();\n for (let i = 0; i < labelCount; i++) {\n const label = labels.nth(i);\n const text = (await label.textContent(options).catch(() => ''))?.replace(/\\s+/g, ' ').trim().toLowerCase();\n if (text !== stringValue.trim().toLowerCase()) continue;\n\n await label.click({ ...options, force: true });\n return true;\n }\n\n return false;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nexport async function setSliderValue({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'number') return false;\n if (['input', 'select', 'button', 'textarea'].includes(tag)) return false;\n\n const slider = await getSliderElement(el, options);\n if (!slider) return false;\n\n const { min, max, orientation, valuenow: initialValue } = await getSliderAttributes(slider, options);\n if (value < min || value > max) {\n throw new Error(`Value ${value} is out of range [${min}, ${max}]`);\n }\n if (initialValue === null) return false;\n if (initialValue === value) return true;\n\n const { centerX, centerY } = await prepareMouse(slider, options);\n const page = slider.page();\n\n let unresponsive = false;\n try {\n const ratio = await calculateRatio(slider, initialValue, value, centerX, centerY, orientation, options);\n await seekValue(slider, initialValue, value, centerX, centerY, orientation, ratio, options);\n } catch (e) {\n if (e instanceof Error && e.message === 'Slider appears to be disabled or unresponsive') {\n unresponsive = true;\n } else {\n throw e;\n }\n } finally {\n await page.mouse.up();\n }\n\n if (unresponsive) {\n return setSliderByKeyboard(slider, initialValue, value, options);\n }\n\n return true;\n}\n\nasync function prepareMouse(slider: Locator, options?: SetOptions) {\n await slider.scrollIntoViewIfNeeded(options);\n\n const box = await slider.boundingBox(options);\n if (!box) throw new Error('Slider has no bounding box');\n\n // If height/width is 0, we use a small offset to ensure we hit the element's area\n const centerX = box.x + (box.width || 10) / 2;\n const centerY = box.y + (box.height || 10) / 2;\n const page = slider.page();\n\n await page.mouse.move(centerX, centerY);\n await page.mouse.down();\n\n return { centerX, centerY };\n}\n\nasync function seekValue(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n centerX: number,\n centerY: number,\n orientation: string,\n ratio: number,\n options?: SetOptions,\n) {\n const page = slider.page();\n\n for (let i = 0; i < 4; i++) {\n const distance = (targetValue - initialValue) / ratio;\n await moveMouse(page, centerX, centerY, orientation, distance);\n\n const currentValAttr = await slider.getAttribute('aria-valuenow', options);\n const currentVal = parseFloat(currentValAttr || '0');\n if (currentVal === targetValue) break;\n\n if (distance !== 0) {\n const newRatio = (currentVal - initialValue) / distance;\n if (newRatio !== 0) ratio = newRatio;\n }\n }\n}\n\nasync function calculateRatio(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n centerX: number,\n centerY: number,\n orientation: string,\n options?: SetOptions,\n): Promise<number> {\n const page = slider.page();\n const testMove = targetValue > initialValue ? 20 : -20;\n await moveMouse(page, centerX, centerY, orientation, testMove);\n\n const valAfterMoveAttr = await slider.getAttribute('aria-valuenow', options);\n const valAfterMove = parseFloat(valAfterMoveAttr || '0');\n const diff = valAfterMove - initialValue;\n\n if (diff === 0) {\n throw new Error('Slider appears to be disabled or unresponsive');\n }\n\n return diff / testMove;\n}\n\nasync function getSliderElement(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const role = await el.getAttribute('role', options).catch(() => null);\n if (role === 'slider') return el;\n\n const sliderByRole = el.getByRole('slider');\n if ((await sliderByRole.count()) > 0) return sliderByRole.first();\n\n const sliderByAria = el.locator('[aria-valuenow][aria-valuemin][aria-valuemax]');\n if ((await sliderByAria.count()) > 0) return sliderByAria.first();\n\n const sliderByValueNow = el.locator('[aria-valuenow]');\n if ((await sliderByValueNow.count()) > 0) return sliderByValueNow.first();\n\n return null;\n}\n\nasync function getSliderAttributes(slider: Locator, options?: SetOptions) {\n const [minStr, maxStr, orient, nowStr] = await Promise.all([\n slider.getAttribute('aria-valuemin', options),\n slider.getAttribute('aria-valuemax', options),\n slider.getAttribute('aria-orientation', options),\n slider.getAttribute('aria-valuenow', options),\n ]);\n\n return {\n min: parseFloat(minStr || '0'),\n max: parseFloat(maxStr || '100'),\n orientation: orient || 'horizontal',\n valuenow: nowStr !== null ? parseFloat(nowStr) : null,\n };\n}\n\nasync function moveMouse(page: any, centerX: number, centerY: number, orientation: string, distance: number) {\n if (orientation === 'vertical') {\n await page.mouse.move(centerX, centerY - distance);\n } else {\n await page.mouse.move(centerX + distance, centerY);\n }\n}\n\nasync function setSliderByKeyboard(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n options?: SetOptions,\n): Promise<boolean> {\n const stepStr = await slider.getAttribute('aria-valuestep', options).catch(() => null);\n const step = stepStr ? parseFloat(stepStr) : 1;\n const presses = Math.round(Math.abs(targetValue - initialValue) / step);\n const key = targetValue > initialValue ? 'ArrowRight' : 'ArrowLeft';\n\n await slider.focus(options);\n const page = slider.page();\n for (let i = 0; i < presses; i++) {\n await page.keyboard.press(key);\n }\n\n const nowStr = await slider.getAttribute('aria-valuenow', options).catch(() => null);\n const reached = nowStr !== null && Math.abs(parseFloat(nowStr) - targetValue) < 0.001;\n return reached;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nasync function getToggleTarget(el: Loc['el'], options?: SetOptions): Promise<Loc['el'] | null> {\n const role = await el.getAttribute('role', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (role === 'checkbox' || role === 'switch') return el;\n\n const byRole = el.locator('[role=\"switch\"], [role=\"checkbox\"]').first();\n if ((await byRole.count()) > 0) return byRole;\n\n const byState = el.locator('[aria-checked]').first();\n if ((await byState.count()) > 0) return byState;\n\n return null;\n}\n\nexport async function setToggle({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n\n const target = await getToggleTarget(el, options);\n if (!target) return false;\n\n const ariaChecked = await target.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n const isChecked = ariaChecked === 'true';\n\n if (Boolean(value) !== isChecked) await target.click(options);\n\n const nextAriaChecked = await target.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === String(Boolean(value));\n}\n","import { chain, isArray, isRange } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { pickFieldElement } from '../utils/pick-field-element';\nimport { selectAria } from './aria-select';\nimport { setCalendarDate } from './calendar';\nimport { setCompositeDate } from './composite-date';\nimport { setCompositeSelect } from './composite-select';\nimport { setCompositeSlider } from './composite-slider';\nimport { setCompositeToggle } from './composite-toggle';\nimport { setDateGroup } from './date-group';\nimport { setDateTextInput } from './date-text-input';\nimport { setNativeCheckbox } from './native-checkbox';\nimport { setNativeDate } from './native-date';\nimport { setNativeInput } from './native-input';\nimport { selectNative } from './native-select';\nimport { setOtpValue } from './otp';\nimport { setRadioGroup } from './radio-group';\nimport { setSliderValue } from './slider';\nimport { setToggle } from './toggle';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction toString(value: Value): string {\n if (isRange(value)) return `${String(value.from)} - ${String(value.to)}`;\n if (isArray(value)) return value.map((v) => String(v)).join('\\n');\n return String(value);\n}\n\nasync function setFallback({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n await el.fill(toString(value), options); // Will likely fail, but will have a good error.\n return true;\n}\n\nexport async function setFieldValue(el: Locator, value: Value, options?: SetOptions): Promise<void> {\n const setValue = chain(\n // native\n selectNative,\n selectAria,\n setNativeCheckbox,\n setRadioGroup,\n setNativeDate,\n setNativeInput,\n // aria / components\n setToggle,\n setDateTextInput,\n setDateGroup,\n setCalendarDate,\n setOtpValue,\n setSliderValue,\n // generic non-semantic composite controls\n setCompositeToggle,\n setCompositeSelect,\n setCompositeSlider,\n setCompositeDate,\n // fallback (eg contenteditable or will fail)\n setFallback,\n );\n\n if ((await el.count()) > 1) {\n el = await pickFieldElement(el);\n }\n\n const tag = await el.evaluate((e) => e.tagName.toLowerCase(), options);\n const type = (\n await el.getAttribute('type', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n )\n )?.toLowerCase();\n const loc = { el, tag, type: type || null };\n\n await setValue(loc, value, options);\n}\n","import type { Page } from '@playwright/test';\nimport rehypeFormat from 'rehype-format';\nimport rehypeParse from 'rehype-parse';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\nexport async function formatHtml(page: string | Page) {\n const html = typeof page === 'string' ? page : await page.content();\n\n const file = await unified()\n .use(rehypeParse, { fragment: true })\n .use(rehypeFormat, { indent: 2 }) // collapses existing whitespace and formats nodes\n .use(rehypeStringify)\n .process(html);\n \n return String(file);\n}\n","import { Locator } from '@playwright/test';\n\ntype LocatorMethod = (...args: any[]) => any;\ntype ProxyProperty = string | symbol;\n\nconst ACTION_METHODS = new Set([\n 'blur',\n 'check',\n 'clear',\n 'click',\n 'dblclick',\n 'dispatchEvent',\n 'dragTo',\n 'fill',\n 'focus',\n 'hover',\n 'press',\n 'pressSequentially',\n 'scrollIntoViewIfNeeded',\n 'selectOption',\n 'setChecked',\n 'setInputFiles',\n 'tap',\n 'type',\n 'uncheck',\n]);\n\nconst LOCATOR_CHAIN_METHODS = new Set([\n 'and',\n 'first',\n 'last',\n 'locator',\n 'nth',\n 'or',\n]);\n\nconst NO_WAIT_OPTION_INDEX: Record<string, number> = {\n dragTo: 1,\n fill: 1,\n press: 1,\n pressSequentially: 1,\n selectOption: 1,\n setInputFiles: 1,\n type: 1,\n};\n\nfunction buildOrLocator(candidates: Locator[]): Locator {\n let result = candidates[0];\n for (const candidate of candidates.slice(1)) {\n result = result.or(candidate);\n }\n return result;\n}\n\nasync function firstPresentFallback(candidates: Locator[]): Promise<Locator | null> {\n for (const candidate of candidates.slice(1)) {\n try {\n if ((await candidate.count()) > 0) return candidate;\n } catch {}\n }\n return null;\n}\n\nfunction withNoWaitTimeout(method: string, args: unknown[]): unknown[] {\n const next = [...args];\n const optionIndex = NO_WAIT_OPTION_INDEX[method] ?? 0;\n const current = next[optionIndex];\n\n if (current && typeof current === 'object') {\n next[optionIndex] = { ...(current as Record<string, unknown>), timeout: 0 };\n } else {\n next[optionIndex] = { timeout: 0 };\n }\n return next;\n}\n\nfunction handleExpect(primary: Locator, candidates: Locator[]) {\n return (expression: string, options: unknown) => {\n if (expression.includes('to.be.visible') || expression.includes('to.be.attached')) {\n return (buildOrLocator(candidates) as any)._expect(expression, options);\n }\n return (primary as any)._expect(expression, options);\n };\n}\n\nfunction handleAll(candidates: Locator[]) {\n return async () => {\n const all: Locator[] = [];\n for (const candidate of candidates) {\n all.push(...(await candidate.all()));\n }\n return all;\n };\n}\n\nfunction handleLocatorChain(prop: string, candidates: Locator[]) {\n return (...args: any[]) =>\n createFallbackLocator(\n candidates.map((candidate) => {\n const method = (candidate as any)[prop] as LocatorMethod;\n return method.apply(candidate, args);\n }),\n );\n}\n\nfunction handleCount(primary: Locator, candidates: Locator[]) {\n return async () => {\n const primaryCount = await primary.count();\n if (primaryCount > 0) return primaryCount;\n\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) return primaryCount;\n\n return fallback.count();\n };\n}\n\nfunction handleAction(prop: string, primary: Locator, candidates: Locator[], primaryMethod: LocatorMethod) {\n return async (...args: any[]) => {\n try {\n return await primaryMethod.apply(primary, args);\n } catch (error) {\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) throw error;\n const fallbackMethod = (fallback as any)[prop] as LocatorMethod;\n return fallbackMethod.apply(fallback, withNoWaitTimeout(prop, args));\n }\n };\n}\n\nfunction handleAsyncFallback(prop: string, primaryMethod: LocatorMethod, primary: Locator, candidates: Locator[]) {\n return (...args: any[]) => {\n const result = primaryMethod.apply(primary, args);\n if (!result || typeof result !== 'object' || typeof (result as Promise<unknown>).catch !== 'function') {\n return result;\n }\n\n return (result as Promise<unknown>).catch(async (error: unknown) => {\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) throw error;\n const fallbackMethod = (fallback as any)[prop] as LocatorMethod;\n return fallbackMethod.apply(fallback, args);\n });\n };\n}\n\nfunction formatLocatorChain(candidates: Locator[]): string {\n const parts = candidates.map((candidate) => candidate.toString());\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0];\n return `${parts[0]} {fuzzy}`;\n}\n\nexport function createFallbackLocator(candidates: Locator[]): Locator {\n const primary = candidates[0];\n const unsupported = new Set(['filter', 'getByRole', 'getByLabel']);\n const passthroughMetaProperties = new Set(['constructor', '__proto__']);\n\n const proxy = new Proxy(primary as unknown as object, {\n get(_target, prop: ProxyProperty) {\n if (typeof prop !== 'string') return (primary as any)[prop];\n if (passthroughMetaProperties.has(prop)) return (primary as any)[prop];\n\n switch (prop) {\n case 'toString':\n return () => formatLocatorChain(candidates);\n case 'all':\n return handleAll(candidates);\n case '_expect':\n return handleExpect(primary, candidates);\n case 'count':\n return handleCount(primary, candidates);\n }\n\n if (unsupported.has(prop)) {\n return () => {\n throw new Error(`FallbackLocator does not support ${prop}`);\n };\n }\n\n if (LOCATOR_CHAIN_METHODS.has(prop)) {\n return handleLocatorChain(prop, candidates);\n }\n\n const primaryMethod = (primary as any)[prop] as LocatorMethod;\n if (typeof primaryMethod !== 'function') return primaryMethod;\n\n if (ACTION_METHODS.has(prop)) {\n return handleAction(prop, primary, candidates, primaryMethod);\n }\n\n return handleAsyncFallback(prop, primaryMethod, primary, candidates);\n },\n });\n\n return proxy as Locator;\n}\n","import { Locator, Page } from '@playwright/test';\nimport { createFallbackLocator } from './fallback-locator';\n\nfunction debug(...args: unknown[]) {\n if (process.env.LETSRUNIT_DEBUG_FUZZY_LOCATOR === '1') {\n // eslint-disable-next-line no-console\n console.log('[fuzzyLocator]', ...args);\n }\n}\n\n/**\n * Locates an element using Playwright selectors, with ordered runtime fallbacks.\n */\nexport async function fuzzyLocator(page: Page, selector: string): Promise<Locator> {\n debug('input selector:', selector);\n const candidates = buildFuzzyCandidates(page, selector);\n debug('enabled fallbacks:', candidates.length > 1 ? String(candidates.length - 1) : '(none)');\n return createFallbackLocator(candidates);\n}\n\nfunction buildFuzzyCandidates(page: Page, selector: string): Locator[] {\n const primary = page.locator(selector);\n const candidates: Array<{ name: string; locator: Locator | null }> = [\n { name: 'relaxNameToHasText', locator: tryRelaxNameToHasText(page, selector) },\n { name: 'tagInsteadOfRole', locator: tryTagInsteadOfRole(page, selector) },\n { name: 'roleNameProximity', locator: tryRoleNameProximity(page, selector) },\n { name: 'fieldAlternative', locator: tryFieldAlternative(page, selector) },\n { name: 'asField', locator: tryAsField(page, selector) },\n ];\n\n const all = [primary];\n for (const candidate of candidates) {\n if (!candidate.locator) continue;\n debug('enabling fallback:', candidate.name, candidate.locator.toString());\n all.push(candidate.locator);\n }\n return all;\n}\n\n// Preserve the selector but relax [name=\"...\"] to [has-text=\"...\"]\n// This keeps all other parts of the selector intact (prefix/suffix, additional filters).\n// Examples:\n// - role=link[name=\"Foo\"] → role=link:has-text=\"Foo\"\n// - css=button[name=\"Save\"i]:visible → css=button:visible:has-text=\"Save\"\n// - [name=\"Hello\"] → :has-text=\"Hello\"\nfunction tryRelaxNameToHasText(page: Page, selector: string): Locator | null {\n const matchAnyNameFull = selector.match(/^(role=.*)\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchAnyNameFull) return null;\n const [, pre, nameText, post] = matchAnyNameFull;\n const containsSelector = `${pre}${post}`;\n return page.locator(containsSelector, { hasText: nameText });\n}\n\n// Try using the tag name for `link`, `button` and `option` instead fo the aria role.\n// This keeps all other parts of the selector intact (prefix/suffix, additional filters).\n// Examples:\n// - role=button[name=\"Foo\"] → css=button:has-text=\"Save\"\nfunction tryTagInsteadOfRole(page: Page, selector: string): Locator | null {\n const matchAnyNameFull = selector.match(/^role=(link|button|option)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchAnyNameFull) return null;\n const [, role, nameText, post] = matchAnyNameFull;\n const tag = role === 'link' ? 'a' : role;\n const containsSelector = `css=${tag}${post}`;\n return page.locator(containsSelector, { hasText: nameText });\n}\n\n// If a role selector with a name filter fails, try proximity-based fallback while\n// preserving the role and any remainder of the selector.\n// Example: role=switch[name=\"Adres tonen\"i] → text=Adres tonen >> xpath=following-sibling::* >> role=switch\nfunction tryRoleNameProximity(page: Page, selector: string): Locator | null {\n const matchRole = selector.match(/^role=(\\w+)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchRole) return null;\n const [, role, name, rest] = matchRole;\n const proximitySelector = `text=${name} >> xpath=following-sibling::* >> role=${role}${rest}`;\n return page.locator(proximitySelector);\n}\n\n// Try alternatives if field is not found\n// field=\"foo\" → #foo > input (only when name is a valid CSS identifier)\nfunction tryFieldAlternative(page: Page, selector: string): Locator | null {\n const matchField = selector.match(/^field=\"([^\"]+)\"i?$/i);\n if (!matchField) return null;\n const [, field] = matchField;\n // Skip if the name contains characters invalid in a CSS ID selector\n if (!/^[a-zA-Z0-9_-]+$/.test(field)) return null;\n return page.locator(`#${field} > input`);\n}\n\n// Try matching using the field selector in case of role mismatch\nfunction tryAsField(page: Page, selector: string): Locator | null {\n const matchRole = selector.match(/^role=(\\w+)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchRole) return null;\n\n const [, role, name, rest] = matchRole;\n\n // Only allow ARIA roles that correspond to field-like controls\n const fieldRoles = new Set([\n 'button', // Sometimes used for date pickers or checkboxes\n 'textbox',\n 'searchbox',\n 'combobox',\n 'spinbutton',\n 'slider',\n 'checkbox',\n 'switch',\n 'radio',\n 'radiogroup',\n 'listbox',\n 'option',\n ]);\n\n if (!fieldRoles.has(role.toLowerCase())) return null;\n\n return page.locator(`field=${name}${rest}`);\n}\n","import { JSDOM } from 'jsdom';\nimport type { PageInfo, Snapshot } from './types';\n\nexport function extractPageMetadata(snapshot: Pick<Snapshot, 'url' | 'html'>): Omit<PageInfo, 'screenshot'> {\n const dom = new JSDOM(snapshot.html, { url: snapshot.url });\n const doc = dom.window.document;\n\n return {\n url: resolveCanonicalUrl(doc, snapshot.url),\n name: firstNonEmpty(\n metaContent(doc, 'property', 'og:title'),\n metaContent(doc, 'name', 'twitter:title'),\n doc.title,\n ),\n description: firstNonEmpty(\n metaContent(doc, 'name', 'description'),\n metaContent(doc, 'property', 'og:description'),\n metaContent(doc, 'name', 'twitter:description'),\n ),\n image: resolveUrl(\n snapshot.url,\n firstNonEmpty(\n metaContent(doc, 'property', 'og:image'),\n metaContent(doc, 'name', 'twitter:image'),\n ),\n ),\n logo: resolveUrl(snapshot.url, firstLinkHref(doc, ['link[rel~=\"apple-touch-icon\"]', 'link[rel~=\"icon\"]'])),\n author: firstNonEmpty(metaContent(doc, 'name', 'author')),\n publisher: firstNonEmpty(\n metaContent(doc, 'property', 'article:publisher'),\n metaContent(doc, 'name', 'publisher'),\n metaContent(doc, 'property', 'og:site_name'),\n ),\n lang: firstNonEmpty(doc.documentElement.lang),\n favicon: resolveUrl(snapshot.url, firstLinkHref(doc, ['link[rel~=\"icon\"]', 'link[rel=\"shortcut icon\"]'])),\n };\n}\n\nfunction metaContent(doc: Document, attr: 'name' | 'property', value: string): string | undefined {\n return firstNonEmpty(doc.querySelector(`meta[${attr}=\"${value}\"]`)?.getAttribute('content') ?? undefined);\n}\n\nfunction firstLinkHref(doc: Document, selectors: string[]): string | undefined {\n for (const selector of selectors) {\n const href = firstNonEmpty(doc.querySelector(selector)?.getAttribute('href') ?? undefined);\n if (href) return href;\n }\n\n return undefined;\n}\n\nfunction resolveCanonicalUrl(doc: Document, fallbackUrl: string): string {\n return resolveUrl(fallbackUrl, firstLinkHref(doc, ['link[rel=\"canonical\"]'])) ?? fallbackUrl;\n}\n\nfunction resolveUrl(baseUrl: string, candidate?: string): string | undefined {\n const value = firstNonEmpty(candidate);\n if (!value) return undefined;\n\n try {\n return new URL(value, baseUrl).toString();\n } catch {\n return value;\n }\n}\n\nfunction firstNonEmpty(...values: Array<string | undefined>): string | undefined {\n return values.find((value) => value !== undefined && value.trim() !== '')?.trim();\n}\n","import { hashKey } from '@letsrunit/utils';\nimport type { LocatorScreenshotOptions, Page, PageScreenshotOptions } from '@playwright/test';\n\nexport async function screenshotElement(page: Page, selector: string, options?: LocatorScreenshotOptions): Promise<File> {\n const buffer = await page.locator(selector).first().screenshot(options);\n const filename = await hashKey('screenshot-{hash}.png', buffer);\n\n return new File([new Uint8Array(buffer)], filename, { type: 'image/png' });\n}\n\nexport async function screenshot(page: Page, options?: PageScreenshotOptions): Promise<File> {\n const buffer = options?.mask?.length ? await screenshotWithMask(page, options) : await page.screenshot(options);\n const filename = await hashKey(`screenshot-{hash}.png`, buffer);\n\n return new File([new Uint8Array(buffer)], filename, { type: 'image/png' });\n}\n\nasync function screenshotWithMask(page: Page, options: PageScreenshotOptions): Promise<Buffer> {\n const { mask: locators, ...otherOptions } = options;\n\n if (!locators?.length) throw new Error('No locators specified');\n\n // 1. Inject CSS + overlay\n await page.evaluate(() => {\n const doc = document;\n\n // Inject CSS once\n if (!doc.getElementById('lri-mask-style')) {\n const style = doc.createElement('style');\n style.id = 'lri-mask-style';\n style.textContent = `\n .lri-mask-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.65);\n pointer-events: none;\n z-index: 2147483646;\n }\n .lri-mask-highlight {\n position: relative !important;\n z-index: 2147483647 !important;\n box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.95);\n border-radius: 4px;\n }\n `;\n doc.head.appendChild(style);\n }\n\n if (!doc.getElementById('lri-mask-overlay')) {\n const overlay = doc.createElement('div');\n overlay.id = 'lri-mask-overlay';\n overlay.className = 'lri-mask-overlay';\n doc.body.appendChild(overlay);\n }\n });\n\n // 2. Resolve locators to element handles and add highlight class\n const handleGroups = await Promise.all(locators.map((loc) => loc.elementHandles()));\n const handles = handleGroups.flat();\n\n await Promise.all(\n handles.map((h) =>\n h.evaluate((el) => {\n (el as HTMLElement).classList.add('lri-mask-highlight');\n }),\n ),\n );\n\n try {\n // 3. Take screenshot with overlay in place\n return await page.screenshot(otherOptions);\n } finally {\n // 4. Cleanup: remove classes and overlay (keep CSS optional)\n await Promise.all(\n handles.map((h) =>\n h.evaluate((el) => {\n (el as HTMLElement).classList.remove('lri-mask-highlight');\n }),\n ),\n );\n\n await page.evaluate(() => {\n const overlay = document.getElementById('lri-mask-overlay');\n if (overlay) overlay.remove();\n\n // Optional: remove style as well if you want zero residue\n const style = document.getElementById('lri-mask-style');\n if (style) style.remove();\n });\n }\n}\n","import type { Page } from '@playwright/test';\n\nexport function isPage(page: any): page is Page {\n return typeof page.content === 'function'\n && typeof page.url === 'function'\n && typeof page.screenshot === 'function';\n}\n","import type { Page } from '@playwright/test';\nimport { extractPageMetadata } from './page-metadata';\nimport { screenshot as takeScreenshot } from './screenshot';\nimport type { PageInfo, Snapshot } from './types';\nimport { isPage } from './utils/type-check';\n\ntype PageLike = Page | Partial<Snapshot> & { url: string; html: string };\n\nexport async function extractPageInfo(page: PageLike): Promise<PageInfo> {\n const snapshot = isPage(page)\n ? {\n url: page.url(),\n html: await page.content(),\n screenshot: await takeScreenshot(page),\n }\n : page;\n\n return {\n ...extractPageMetadata(snapshot),\n screenshot: snapshot.screenshot,\n };\n}\n","export const createDateEngine = () => ({\n // Single match (Playwright will call this in some contexts)\n query(root: Element | Document, body: string): Element | null {\n const all = this.queryAll(root, body);\n return all[0] ?? null;\n },\n\n // All matches\n queryAll(root: Element | Document, body: string): Element[] {\n const targetDate = this._parseSelector(body);\n if (!targetDate) return [];\n\n const doc = root instanceof Document ? root : root.ownerDocument || document;\n const locale = doc.documentElement.lang || 'en-US';\n\n const candidates: { el: Element, type: 'full' | 'partial' }[] = [];\n const walker = doc.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null);\n\n let currentNode = walker.nextNode();\n while (currentNode) {\n const el = currentNode as Element;\n const { matched, type } = this._matchesDate(el, targetDate, locale, body);\n if (matched) {\n candidates.push({ el, type });\n }\n currentNode = walker.nextNode();\n }\n\n // Filter to keep only the most specific elements (the ones that don't have matching children)\n // AND prioritize elements that match exactly if multiple are found in a parent-child relationship.\n const results = candidates.filter(c => {\n // If any candidate is a child of el, then el is not the most specific.\n // BUT only if that child matches as much or more than the parent.\n // If the parent is a \"full\" match (with year) and child is only \"partial\", parent might be better.\n const el = c.el;\n const hasMatchingDescendant = candidates.some(other => {\n if (other.el === el || !el.contains(other.el)) return false;\n return !(c.type === 'full' && other.type === 'partial');\n });\n\n return !hasMatchingDescendant;\n\n }).map(c => c.el);\n\n // If no results found, we might want to look at elements whose descendants COLLECTIVELY match.\n // However, textContent already includes descendants.\n // If we have nothing, it might be because specificity filter removed everything.\n // If specificity filter removed something, we should check if we should keep it.\n\n if (results.length === 0 && candidates.length > 0) {\n // Check if we have multiple candidates that together might be why we failed.\n // Actually, let's just return all candidates that don't have matching descendants.\n // (That's what results is supposed to be).\n }\n\n return results;\n },\n\n _parseSelector(body: string): Date | null {\n const now = new Date();\n const trimmed = body.toLowerCase().trim();\n\n if (trimmed === 'today') return now;\n if (trimmed === 'tomorrow') {\n const d = new Date(now);\n d.setDate(d.getDate() + 1);\n return d;\n }\n if (trimmed === 'yesterday') {\n const d = new Date(now);\n d.setDate(d.getDate() - 1);\n return d;\n }\n\n // Relative: \\d+ \\w+ (?:ago|from now)\n const relativeMatch = trimmed.match(/^(\\d+)\\s+(day|month|year)s?\\s+(ago|from now)$/);\n if (relativeMatch) {\n const [_, amount, unit, direction] = relativeMatch;\n const d = new Date(now);\n const sign = direction === 'ago' ? -1 : 1;\n const val = parseInt(amount, 10) * sign;\n\n if (unit === 'day') d.setDate(d.getDate() + val);\n else if (unit === 'month') d.setMonth(d.getMonth() + val);\n else if (unit === 'year') d.setFullYear(d.getFullYear() + val);\n return d;\n }\n\n // \"today at 15:00\"\n const atMatch = trimmed.match(/^(today|tomorrow|yesterday)\\s+at\\s+(\\d{1,2}):(\\d{2})(?::(\\d{2}))?(?:\\s*(am|pm))?$/);\n if (atMatch) {\n const [_, dayStr, hourStr, min, sec, ampm] = atMatch;\n const d = new Date(now);\n if (dayStr === 'tomorrow') d.setDate(d.getDate() + 1);\n if (dayStr === 'yesterday') d.setDate(d.getDate() - 1);\n\n let hour = parseInt(hourStr, 10);\n if (ampm === 'pm' && hour < 12) hour += 12;\n if (ampm === 'am' && hour === 12) hour = 0;\n\n d.setHours(hour, parseInt(min, 10), parseInt(sec || '0', 10), 0);\n return d;\n }\n\n const absDate = new Date(body);\n if (!isNaN(absDate.getTime())) return absDate;\n\n return null;\n },\n\n _matchesDate(el: Element, targetDate: Date, locale: string, body: string): { matched: boolean, type: 'full' | 'partial' } {\n const text = el.textContent?.trim() || '';\n if (!text) return { matched: false, type: 'partial' };\n\n // Normalize text: replace non-breaking spaces, multi-spaces, etc.\n const normalizedText = text.replace(/\\s+/g, ' ').trim();\n const cleanText = normalizedText.toLowerCase().replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, ' ').replace(/\\s+/g, ' ').trim();\n\n const options: Intl.DateTimeFormatOptions[] = [\n { year: 'numeric', month: 'short', day: 'numeric' },\n { year: 'numeric', month: 'long', day: 'numeric' },\n { year: '2-digit', month: 'numeric', day: 'numeric' },\n { year: 'numeric', month: 'numeric', day: 'numeric' },\n { month: 'short', day: 'numeric' },\n { month: 'long', day: 'numeric' },\n ];\n\n let dateMatched = false;\n let matchType: 'full' | 'partial' = 'partial';\n\n for (const opt of options) {\n const formatter = new Intl.DateTimeFormat(locale, opt);\n const formatted = formatter.format(targetDate);\n\n const normalizedFormatted = formatted.replace(/\\s+/g, ' ').trim();\n const cleanFormatted = normalizedFormatted.toLowerCase().replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, ' ').replace(/\\s+/g, ' ').trim();\n\n if (normalizedText.includes(normalizedFormatted) || cleanText.includes(cleanFormatted)) {\n // If it's a numeric match and there's a year, check if the year matches correctly\n if (opt.year && opt.month === 'numeric' && opt.day === 'numeric') {\n const yearVal = targetDate.getFullYear().toString();\n const shortYearVal = yearVal.slice(-2);\n if (!normalizedText.includes(yearVal) && !normalizedText.includes(shortYearVal)) {\n continue;\n }\n }\n\n // If it's a month name match and there's a year, check if the year matches correctly\n if (opt.year && (opt.month === 'short' || opt.month === 'long')) {\n const yearVal = targetDate.getFullYear().toString();\n const otherYearMatch = normalizedText.match(/\\b\\d{4}\\b/g);\n if (otherYearMatch && !otherYearMatch.includes(yearVal)) {\n continue;\n }\n }\n\n dateMatched = true;\n if (opt.year) matchType = 'full';\n break;\n }\n\n // Try with different separators if numeric\n if (opt.month === 'numeric' && opt.day === 'numeric') {\n const parts = formatter.formatToParts(targetDate);\n const day = parts.find(p => p.type === 'day')?.value;\n const month = parts.find(p => p.type === 'month')?.value;\n const year = parts.find(p => p.type === 'year')?.value;\n\n if (day && month) {\n const seps = ['.', '-', '/', ' ', ''];\n const d2 = day.padStart(2, '0');\n const m2 = month.padStart(2, '0');\n\n const dayVariations = Array.from(new Set([day, d2]));\n const monthVariations = Array.from(new Set([month, m2]));\n\n let numericMatched = false;\n for (const sep of seps) {\n for (const d of dayVariations) {\n for (const m of monthVariations) {\n if (year) {\n const y2 = year.slice(-2);\n const yearVariations = Array.from(new Set([year, y2]));\n for (const y of yearVariations) {\n if (normalizedText.includes(`${d}${sep}${m}${sep}${y}`) ||\n normalizedText.includes(`${m}${sep}${d}${sep}${y}`) ||\n normalizedText.includes(`${y}${sep}${m}${sep}${d}`)) {\n numericMatched = true;\n matchType = 'full';\n break;\n }\n }\n }\n if (numericMatched) break;\n // Without year - only if NOT numeric (to avoid matching 2025 as 2026 without year)\n if (normalizedText.includes(`${d}${sep}${m}`) || normalizedText.includes(`${m}${sep}${d}`)) {\n // Only count as partial match if NO year is present in text at all\n if (!normalizedText.match(/\\d{4}/)) {\n numericMatched = true;\n matchType = 'partial';\n }\n }\n }\n if (numericMatched) break;\n }\n if (numericMatched) break;\n }\n if (numericMatched) {\n dateMatched = true;\n break;\n }\n }\n }\n }\n\n if (!dateMatched && normalizedText.includes(targetDate.toISOString().split('T')[0])) {\n dateMatched = true;\n matchType = 'full';\n }\n\n if (!dateMatched) return { matched: false, type: 'partial' };\n\n // If we have a full match (with year), it's strong.\n // If we have a partial match, we only accept it if the query itself doesn't specify a year\n // OR if the year is implicitly current year and the element also lacks it.\n const queryHasYear = body.match(/\\d{4}|'\\d{2}/);\n if (queryHasYear && matchType === 'partial') {\n // If query has year, we NEED year.\n return { matched: false, type: 'partial' };\n }\n\n // Strict year check: if query has year, it MUST match.\n // If query is relative (\"today\"), and element has a year, it MUST match the target year.\n const elementYearMatch = normalizedText.match(/\\b\\d{4}\\b/g);\n if (elementYearMatch && elementYearMatch.some(y => parseInt(y, 10) !== targetDate.getFullYear())) {\n // We only fail if the year found in text is NOT the target year.\n // But wait, what if \"Post date: Jan 4, 2026. Edit date: Jan 5, 2026\"\n // If we are looking for Jan 4, and we match the whole string, it has BOTH 2026.\n // So we should check if ANY of the years match?\n if (!elementYearMatch.includes(targetDate.getFullYear().toString())) {\n return { matched: false, type: 'partial' };\n }\n }\n\n // If query has time, we must also match time\n const queryStr = body.toLowerCase();\n const queryHasTime = queryStr.includes(' at ') || queryStr.includes(':') || (queryStr.includes('am') || queryStr.includes('pm'));\n\n if (queryHasTime) {\n const timeMatch = normalizedText.match(/(\\d{1,2})[:.](\\d{2})(?::(\\d{2}))?\\s*(am|pm|om|u)?/i);\n if (timeMatch) {\n const [_, h, m, s, ampm] = timeMatch;\n let hour = parseInt(h, 10);\n if (ampm?.toLowerCase() === 'pm' && hour < 12) hour += 12;\n if (ampm?.toLowerCase() === 'am' && hour === 12) hour = 0;\n\n if (hour !== targetDate.getHours() || parseInt(m, 10) !== targetDate.getMinutes()) {\n return { matched: false, type: 'full' }; // full because it matched date but wrong time\n }\n if (s && parseInt(s, 10) !== targetDate.getSeconds()) {\n return { matched: false, type: 'full' };\n }\n } else {\n // Query has time but element doesn't?\n // Check if ANY child has time. If we are doing collective matching, the parent should have it.\n return { matched: false, type: 'full' };\n }\n }\n\n return { matched: true, type: matchType };\n },\n});\n","export const createFieldEngine = () => ({\n // Helper: compile matcher from `field=...` body\n _compileMatcher(body: string): (s: string | null | undefined) => boolean {\n const trimmed = body.trim();\n\n // Support /regex/flags\n if (trimmed.startsWith('/') && trimmed.lastIndexOf('/') > 0) {\n const last = trimmed.lastIndexOf('/');\n const pattern = trimmed.slice(1, last);\n const flags = trimmed.slice(last + 1);\n const re = new RegExp(pattern, flags);\n return (s) => !!s && re.test(s);\n }\n\n const sanitize = (s: string) => s\n .toLowerCase()\n .replace(/[^\\w\\s]+/g, '')\n .replace(/\\s{2,}/g, ' ')\n .replace(/\\*\\s*$/, '')\n .trim();\n const needle = sanitize(trimmed.replace(/^\"(.*)\"(i?)$/, '$1'));\n\n return ((s) => !!s && sanitize(s) === needle);\n },\n\n // Single match (Playwright will call this in some contexts)\n query(root: Element | Document, body: string): Element | null {\n const all = this.queryAll(root, body);\n return all[0] ?? null;\n },\n\n // All matches\n queryAll(root: Element | Document, body: string): Element[] {\n const match = this._compileMatcher(body);\n\n // Candidate controls: native fields + common ARIA widgets\n const candidates = Array.from(\n root.querySelectorAll<HTMLElement>(\n [\n 'input',\n 'textarea',\n 'select',\n '[role=\"textbox\"]',\n '[role=\"combobox\"]',\n '[role=\"spinbutton\"]',\n '[role=\"slider\"]',\n '[role=\"switch\"]',\n '[role=\"checkbox\"]',\n '[role=\"radio\"]',\n '[role=\"radiogroup\"]',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n ].join(', '),\n ),\n );\n\n const byId = new Map<string, Element>();\n // Build quick lookup for aria-labelledby resolution\n Array.from(root.querySelectorAll<HTMLElement>('[id]')).forEach((el) => byId.set(el.id, el));\n\n function textFor(el: HTMLElement): string[] {\n const texts: string[] = [];\n\n // 1) Implicit <label> wrapping\n let parent: HTMLElement | null = el.parentElement;\n while (parent) {\n if (parent.tagName === 'LABEL') {\n texts.push(parent.textContent ?? '');\n break;\n }\n parent = parent.parentElement;\n }\n\n // 2) <label for=\"...\">\n let id = (el as HTMLElement).id;\n if (!id) { // support parent div/span id when element lacks one\n const p = el.parentElement as HTMLElement | null;\n if (p && (p.tagName === 'DIV' || p.tagName === 'SPAN') && p.id) {\n id = p.id;\n }\n }\n if (id) {\n const forLabels = Array.from(\n root.querySelectorAll<HTMLLabelElement>(`label[for=\"${CSS.escape(id)}\"]`),\n );\n forLabels.forEach((l) => texts.push(l.textContent ?? ''));\n }\n\n // 3) aria-label\n const ariaLabel = el.getAttribute('aria-label');\n if (ariaLabel) texts.push(ariaLabel);\n\n // 4) aria-labelledby\n const labelledBy = el.getAttribute('aria-labelledby');\n if (labelledBy) {\n const extAriaLabel = labelledBy.split(/\\s+/)\n .map((idref) => byId.get(idref))\n .filter((ref) => !!ref?.textContent.trim())\n .map((ref) => ref!.textContent)\n .join(' ');\n if (extAriaLabel) texts.push(extAriaLabel);\n }\n\n // 5) field name\n const name = el.getAttribute('name');\n if (name) texts.push(name);\n\n // 6) native placeholder on <input>/<textarea>, and some custom widgets mirror it as an attribute\n const ph = (el as HTMLInputElement).placeholder ?? el.getAttribute('placeholder');\n if (ph) texts.push(ph);\n\n // 7) Adjacent sibling <label> (handles <input/><label>Text</label> pattern without for/id)\n for (let sib = el.nextElementSibling; sib; sib = sib.nextElementSibling) {\n if (sib.tagName === 'LABEL') { texts.push(sib.textContent ?? ''); break; }\n }\n for (let sib = el.previousElementSibling; sib; sib = sib.previousElementSibling) {\n if (sib.tagName === 'LABEL') { texts.push(sib.textContent ?? ''); break; }\n }\n\n return texts;\n }\n\n // Filter candidates by label OR placeholder\n return candidates\n .map((el) => ({ el, texts: textFor(el) }))\n .filter(({ texts }) => texts.some(match))\n .map(({ el }) => el);\n },\n});\n","// Conservatively scrub HTML for LLMs while preserving semantics.\n// - Keeps structural tags (header/nav/main/section/article/aside/footer, headings, lists, tables, forms, etc.)\n// - Removes <head>, <script>, <style>, <template>, <noscript>, comments\n// - Drops nodes that are clearly hidden/inert via attributes (hidden, aria-hidden=\"true\", display:none, visibility:hidden, opacity:0)\n// - Strips event handlers (on*) and inline styles, keeps semantic attrs (id, class, role, aria-*, data-*, href, src, alt, etc.)\n// - Collapses whitespace in text nodes (but NOT inside <pre>/<code>)\n// - Does NOT change tag names, does NOT unwrap containers, does NOT reorder content\n\nimport { memoize } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport stringify from 'fast-json-stable-stringify';\nimport { JSDOM } from 'jsdom';\nimport { isPage } from './utils/type-check';\n\nexport type ScrubHtmlOptions = {\n /** Remove nodes that look hidden/inert by attributes. Default: true */\n dropHidden?: boolean;\n /** Remove the entire <head>. Default: true */\n dropHead?: boolean;\n /** Remove <svg> glyphs. Default: false */\n dropSvg?: boolean;\n /** Only keep <main> element. Default: false */\n pickMain?: boolean;\n /** Keep a conservative attribute allowlist (0=none, 1=normal, 2=aggressive). Default: 1 */\n stripAttributes?: 0 | 1 | 2;\n /** Normalize whitespace in text nodes (outside pre/code). Default: true */\n normalizeWhitespace?: boolean;\n /** Remove HTML comments. Default: true */\n dropComments?: boolean;\n /** Replace <br> within headings (h1–h6) with a space. Default: true */\n replaceBrInHeadings?: boolean;\n /** Limit lists to max items: -1 mean no limit. Default: -1 */\n limitLists?: number;\n /** Strip utility-framework classes (Tailwind, Bootstrap, UnoCSS, Windi) from class\n * attributes. Removes the attribute entirely when all classes are stripped. Default: true */\n dropUtilityClasses?: boolean;\n};\n\nconst HTML_MIN_ATTR_THRESHOLD = 250_000; // ~70k tokens\nconst HTML_LIMIT_LISTS_THRESHOLD = 400_000; // ~110k tokens\nconst HTML_MAIN_ONLY_THRESHOLD = 600_000; // ~170k tokens\n\nfunction getDefaults(contentLength: number): Required<ScrubHtmlOptions> {\n return {\n dropHidden: true,\n dropHead: true,\n dropSvg: false,\n pickMain: contentLength >= HTML_MAIN_ONLY_THRESHOLD,\n stripAttributes: contentLength >= HTML_MIN_ATTR_THRESHOLD ? 2 : 1,\n normalizeWhitespace: true,\n dropComments: true,\n replaceBrInHeadings: true,\n limitLists: contentLength >= HTML_LIMIT_LISTS_THRESHOLD ? 20 : -1,\n dropUtilityClasses: true,\n };\n}\n\n// Attributes we keep to preserve semantics and minimal usefulness\nconst ALLOWED_ATTRS = {\n match: new Set([\n // identity/semantics\n 'id',\n 'class',\n 'role',\n // internationalization\n 'lang',\n 'dir',\n\n // anchors & media\n 'href',\n 'title',\n 'target',\n 'rel',\n 'src',\n 'alt',\n 'width',\n 'height',\n 'loading',\n\n // tables\n 'scope',\n 'headers',\n 'colspan',\n 'rowspan',\n\n // forms (pure semantics—doesn’t change structure)\n 'name',\n 'value',\n 'type',\n 'for',\n 'placeholder',\n 'checked',\n 'selected',\n 'multiple',\n 'method',\n 'action',\n\n // time, figure, etc.\n 'datetime',\n ]),\n regexp:/^aria-[\\w-]+|^data-[\\w-]+$/i, // ARIA attributes & data-* attributes\n};\n\nconst ALLOWED_ATTRS_AGGRESSIVE = {\n match: new Set([\n // structuur / algemene selectors\n 'id',\n 'class',\n 'role',\n\n // links / media\n 'href',\n 'src',\n 'alt',\n 'title',\n\n // tables\n 'scope',\n\n // forms / velden\n 'name',\n 'type',\n 'for',\n 'placeholder',\n 'value',\n 'checked',\n 'selected',\n\n // ARIA voor Playwright getByRole/getByLabel\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n\n // veelgebruikte test selectors\n 'data-testid',\n 'data-test-id',\n 'data-cy',\n 'data-qa',\n ]),\n regexp: null,\n};\n\nconst HIDDEN_SELECTORS = [\n '[hidden]',\n '[inert]',\n '[aria-hidden=\"true\"]',\n '[style*=\"display:none\"]',\n '[style*=\"visibility:hidden\"]',\n '[style*=\"opacity:0\"]'\n].join(',');\n\n// Tags that are always removed (infra/noise)\nconst ALWAYS_DROP = [\n 'script', 'style', 'template', 'noscript', 'slot', 'object', 'embed'\n];\n\nexport async function scrubHtml(\n page: { html: string, url: string } | Page,\n opts: ScrubHtmlOptions = {},\n): Promise<string> {\n if (isPage(page)) page = { html: await page.content(), url: page.url() };\n return await memoizedScrubHtml(page, opts);\n}\n\nconst memoizedScrubHtml = memoize(realScrubHtml, {\n max: 16,\n ttl: 10 * 60_000,\n cacheKey: (args) => stringify({ html: args[0].html, url: args[0].url, ...args[1] }),\n});\n\n/**\n * Scrub HTML conservatively for LLMs without destroying semantics.\n */\nexport async function realScrubHtml(\n { html, url }: { html: string, url: string },\n opts: ScrubHtmlOptions = {},\n): Promise<string> {\n const o = { ...getDefaults(html.length), ...opts };\n const htmlForDom = preStripHtmlForJSDOM(html, o.dropHead);\n\n const dom = new JSDOM(htmlForDom, { url });\n const doc = dom.window.document;\n\n if (o.pickMain) pickMain(doc);\n dropInfraAndSvg(doc, Boolean(o.dropSvg));\n if (o.dropHidden) dropHiddenTrees(doc);\n if (o.stripAttributes) stripAttributesAndSanitize(doc, o.stripAttributes);\n if (o.dropComments) dropHtmlComments(doc);\n if (o.replaceBrInHeadings) replaceBrsInHeadings(doc);\n if (o.limitLists >= 0) limitListsAndRows(doc, o.limitLists);\n if (o.dropUtilityClasses) stripUtilityClasses(doc);\n if (o.normalizeWhitespace) normalizeWhitespace(doc.body);\n\n return doc.body.innerHTML;\n}\n\n/* ---------------- helpers ---------------- */\n\nfunction hasHiddenAncestor(el: Element): boolean {\n let p: Element | null = el.parentElement;\n while (p) {\n /* v8 ignore next — JSDOM might not have these attributes/values, but we want to check them if they exist */\n if (p.hasAttribute('hidden') || p.hasAttribute('inert') || p.getAttribute('aria-hidden') === 'true') return true;\n\n const style = p.getAttribute('style') || '';\n if (/\\bdisplay\\s*:\\s*none\\b/i.test(style)) return true;\n if (/\\bvisibility\\s*:\\s*hidden\\b/i.test(style)) return true;\n if (/\\bopacity\\s*:\\s*0(?:\\D|$)/i.test(style)) return true;\n\n p = p.parentElement;\n }\n return false;\n}\n\nfunction normalizeWhitespace(root: Element) {\n const preLike = new Set(['PRE', 'CODE', 'SAMP', 'KBD']);\n const doc = root.ownerDocument!;\n const walker = doc.createTreeWalker(root, 4 /*NodeFilter.SHOW_TEXT*/);\n const changes: Text[] = [];\n\n let node: Node | null;\n\n while ((node = walker.nextNode())) {\n const text = node as Text;\n const parent = text.parentElement;\n if (!parent) continue;\n if (preLike.has(parent.tagName)) continue; // don't touch pre/code\n\n const v = text.nodeValue ?? '';\n const collapsed = v.replace(/\\s+/g, ' ');\n if (collapsed !== v) changes.push(text);\n }\n\n for (const t of changes) {\n // extra trim around block-ish elements\n const parent = t.parentElement!;\n const isBlockish = /^(P|LI|DIV|SECTION|ARTICLE|ASIDE|HEADER|FOOTER|MAIN|NAV|H[1-6]|BLOCKQUOTE|FIGCAPTION|TD|TH)$/i.test(parent.tagName);\n t.nodeValue = (t.nodeValue || '').replace(/\\s+/g, ' ');\n if (isBlockish) t.nodeValue = (t.nodeValue || '').trim();\n }\n}\n\n// Split-out helper steps (top-level, no nested functions)\n\nfunction pickMain(doc: Document): boolean {\n const main = doc.querySelector('main');\n if (!main) return false;\n const clone = main.cloneNode(true);\n doc.body.innerHTML = '';\n doc.body.appendChild(clone);\n return true;\n}\n\nfunction preStripHtmlForJSDOM(html: string, dropHead: boolean): string {\n let out = html;\n if (dropHead) out = out.replace(/<head\\b[\\s\\S]*?<\\/head>/gi, '');\n\n // Prevent jsdom/cssom import-rule recursion while preserving body semantics.\n out = out.replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, '');\n out = out.replace(/<link\\b[^>]*\\brel\\s*=\\s*[\"']?stylesheet[\"']?[^>]*>/gi, '');\n return out;\n}\n\nfunction dropInfraAndSvg(doc: Document, dropSvg: boolean) {\n const toDrop = [...ALWAYS_DROP, dropSvg ? 'svg' : ''].filter(Boolean).join(',');\n if (!toDrop) return;\n doc.querySelectorAll(toDrop).forEach((el) => el.remove());\n}\n\nfunction dropHiddenTrees(doc: Document) {\n doc.querySelectorAll<HTMLElement>(HIDDEN_SELECTORS).forEach((el) => el.remove());\n const all = [...doc.body.querySelectorAll<HTMLElement>('*')];\n for (const el of all) {\n if (!el.isConnected) continue;\n if (hasHiddenAncestor(el)) el.remove();\n }\n}\n\nfunction stripAttributesAndSanitize(doc: Document, level: 0 | 1 | 2) {\n if (!level) return;\n\n const all = [...doc.body.querySelectorAll<HTMLElement>('*')];\n\n for (const el of all) {\n const isSvg = el.namespaceURI === 'http://www.w3.org/2000/svg';\n for (const { name } of [...el.attributes]) {\n const lower = name.toLowerCase();\n if (lower.startsWith('on')) {\n el.removeAttribute(name);\n continue;\n }\n if (lower === 'style') {\n el.removeAttribute(name);\n continue;\n }\n if (isSvg) continue; // keep svg attrs\n const allowed = level === 1 ? ALLOWED_ATTRS : ALLOWED_ATTRS_AGGRESSIVE;\n if (!allowed.match.has(lower) && !allowed.regexp?.test(name)) {\n el.removeAttribute(name);\n }\n }\n }\n\n // sanitize javascript: hrefs\n doc.querySelectorAll('a[href]').forEach((a) => {\n const href = a.getAttribute('href') || '';\n if (/^\\s*javascript:/i.test(href)) a.removeAttribute('href');\n });\n}\n\nfunction dropHtmlComments(doc: Document) {\n const nf = doc.defaultView?.NodeFilter;\n const SHOW_COMMENT = nf?.SHOW_COMMENT ?? 128; // fallback constant\n\n // createTreeWalker expects a NodeFilter mask\n const walker = doc.createTreeWalker(doc, SHOW_COMMENT as unknown as number);\n const toRemove: Comment[] = [];\n let n: Comment | null;\n\n while ((n = walker.nextNode() as Comment | null)) toRemove.push(n);\n toRemove.forEach((c) => c.parentNode?.removeChild(c));\n}\n\nfunction replaceBrsInHeadings(doc: Document) {\n doc.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach((h) => {\n h.querySelectorAll('br').forEach((br) => {\n const space = doc.createTextNode(' ');\n (br as Element).replaceWith(space);\n });\n });\n}\n\n// ---- Utility class detection ----\n\n// Any class containing ':' is a Tailwind/Windi/UnoCSS variant prefix (hover:, sm:, dark:focus:, …)\nconst UTILITY_VARIANT_RE = /:/;\n\n// Prefix-based utility patterns (Tailwind + Bootstrap)\nconst UTILITY_PREFIX_RE = /^-?(?:p[xytblrse]?|m[xytblrse]?|gap|space-[xy]|w|h|min-w|min-h|max-w|max-h|size|basis|inset|top|right|bottom|left|start|end|z|text|bg|border|ring|shadow|outline|fill|stroke|divide|accent|caret|from|via|to|decoration|font|leading|tracking|indent|line-clamp|columns|aspect|object|opacity|rotate|scale|translate|skew|transition|duration|ease|delay|animate|rounded|overflow|overscroll|scroll|snap|touch|cursor|pointer-events|select|resize|flex|grid|col|row|order|auto-cols|auto-rows|items|justify|content|self|place|float|clear|list|whitespace|break|hyphens|mix-blend|bg-blend|backdrop|d|g|fs|fw|lh|align|position)-/i;\n\n// Standalone keywords that are utilities on their own (no suffix)\nconst UTILITY_STANDALONE = new Set([\n 'flex', 'grid', 'block', 'hidden', 'inline', 'inline-block', 'inline-flex', 'inline-grid',\n 'contents', 'flow-root', 'list-item', 'table', 'container', 'truncate',\n 'grow', 'shrink', 'static', 'relative', 'absolute', 'fixed', 'sticky',\n 'visible', 'invisible', 'collapse', 'isolate',\n 'underline', 'overline', 'line-through', 'no-underline',\n 'uppercase', 'lowercase', 'capitalize', 'normal-case',\n 'italic', 'not-italic', 'antialiased', 'subpixel-antialiased',\n 'sr-only', 'not-sr-only', 'clearfix', 'row', 'col',\n]);\n\nconst SPACING_ALPHA_VALUES = new Set(['auto', 'px']);\n\nfunction isSpacingUtility(token: string): boolean {\n const match = token.match(/^-?([mp][xytblrse]?)-(.*)$/i);\n if (!match) return false;\n\n const value = match[2];\n if (!value) return false;\n\n if (/^[0-9./[\\]-]+$/.test(value)) return true;\n if (SPACING_ALPHA_VALUES.has(value.toLowerCase())) return true;\n return false;\n}\n\nfunction isUtilityClass(token: string): boolean {\n if (UTILITY_VARIANT_RE.test(token)) return true;\n const base = token.startsWith('-') ? token.slice(1) : token;\n if (UTILITY_STANDALONE.has(base)) return true;\n if (/^-?[mp][xytblrse]?-/i.test(token)) return isSpacingUtility(token);\n return UTILITY_PREFIX_RE.test(token);\n}\n\nfunction stripUtilityClasses(doc: Document) {\n for (const el of doc.body.querySelectorAll<Element>('[class]')) {\n const kept = [...el.classList].filter((t) => t && !isUtilityClass(t));\n if (kept.length === 0) el.removeAttribute('class');\n else el.setAttribute('class', kept.join(' '));\n }\n}\n\nfunction limitListsAndRows(doc: Document, limit: number) {\n // lists\n doc.querySelectorAll('ul, ol').forEach((list) => {\n const items = Array.from(list.children).filter((c) => c.tagName === 'LI');\n for (let i = limit; i < items.length; i++) items[i].remove();\n });\n\n // table rows\n const rowContainers = doc.querySelectorAll('table, thead, tbody, tfoot');\n rowContainers.forEach((container) => {\n const rows = Array.from(container.children).filter((c) => c.tagName === 'TR');\n for (let i = limit; i < rows.length; i++) rows[i].remove();\n });\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { screenshot } from './screenshot';\nimport { realScrubHtml } from './scrub-html';\nimport type { Snapshot } from './types';\nimport { waitForDomIdle } from './wait';\n\nexport type SnapshotOptions = {\n /** Strip utility-framework classes (Tailwind, Bootstrap, UnoCSS, Windi) from the captured HTML. Default: true. */\n dropUtilityClasses?: boolean;\n};\n\nexport async function snapshot(page: Page, opts: SnapshotOptions = {}): Promise<Snapshot> {\n await sleep(500);\n await waitForDomIdle(page);\n\n const [url, html, file] = await Promise.all([page.url(), getContentWithMarkedHidden(page), screenshot(page)]);\n\n const dropUtilityClasses = opts.dropUtilityClasses ?? true;\n\n const finalHtml = dropUtilityClasses\n ? await realScrubHtml({ html, url }, {\n dropHidden: false, dropHead: false, dropSvg: false, pickMain: false,\n stripAttributes: 0, normalizeWhitespace: false, dropComments: false,\n replaceBrInHeadings: false, limitLists: -1, dropUtilityClasses: true,\n })\n : html;\n\n return { url, html: finalHtml, screenshot: file };\n}\n\nasync function getContentWithMarkedHidden(page: Page): Promise<string> {\n try {\n await page.evaluate(() => {\n const changed: Element[] = [];\n\n // expose undo\n (window as any).__undoAriaHidden = () => {\n for (const el of changed) el.removeAttribute('aria-hidden');\n changed.length = 0;\n delete (window as any).__undoAriaHidden;\n };\n\n const isHidden = (el: Element): boolean => {\n if (el.hasAttribute('hidden')) return true;\n if (el.hasAttribute('inert')) return true;\n if (el.getAttribute('aria-hidden') === 'true') return true;\n\n const cs = getComputedStyle(el as HTMLElement);\n return cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0';\n };\n\n const walk = (el: Element) => {\n if (isHidden(el)) {\n if (!el.hasAttribute('aria-hidden')) {\n el.setAttribute('aria-hidden', 'true');\n changed.push(el);\n }\n return;\n }\n for (const c of el.children) walk(c);\n };\n\n for (const c of document.body.children) walk(c);\n });\n\n return await page.content();\n } finally {\n await page.evaluate(() => (window as any).__undoAriaHidden?.()).catch(() => {});\n }\n}\n","import type { Locator } from '@playwright/test';\n\nexport async function scrollToCenter(locator: Locator) {\n const count = await locator.count();\n if (!count) return;\n\n await locator.evaluate((el) => {\n el.scrollIntoView({ block: 'center', inline: 'center', behavior: 'instant' });\n });\n}\n","const translations = {\n accept: [\n \"Aanvaar\",\n \"Aanvaar alles\",\n \"Stem saam\",\n \"Laat toe\",\n \"Laat alles toe\",\n \"OK\",\n \"Reg so\",\n \"Ek verstaan\",\n \"Gaan voort\",\n \"Stoor en aanvaar\",\n \"Bevestig\"\n ],\n reject: [\n \"Verwerp\",\n \"Verwerp alles\",\n \"Weier\",\n \"Moenie toelaat nie\",\n \"Slegs noodsaaklik\",\n \"Net noodsaaklike koekies\",\n \"Gaan voort sonder koekies\",\n \"Nee dankie\",\n \"Moenie aanvaar nie\",\n \"Weier alles\"\n ],\n close: [\n \"Sluit\",\n \"Kanselleer\",\n \"Maak toe\",\n \"Verwyder\",\n \"Nie nou nie\",\n \"Nee dankie\",\n \"Later\",\n \"×\",\n \"Slaan oor\",\n \"Maak venster toe\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"موافق\", \"أوافق\", \"قبول\", \"قبول الكل\", \"الموافقة على الكل\", \"السماح\", \"حسنًا\", \"تم\", \"تمام\", \"متابعة\", \"تابع\", \"حفظ والموافقة\", \"حفظ والقبول\"],\n reject: [\"رفض\", \"رفض الكل\", \"عدم الموافقة\", \"عدم السماح\", \"الضرورية فقط\", \"الأساسية فقط\", \"المتابعة بدون ملفات تعريف الارتباط\", \"الاستمرار بدون ملفات تعريف الارتباط\", \"لا شكرًا\", \"لا، شكرًا\"],\n close: [\"إغلاق\", \"إلغاء\", \"تجاهل\", \"ليس الآن\", \"لا شكرًا\", \"لاحقًا\", \"×\", \"إخفاء\", \"تخطي\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Qəbul et\",\n \"Hamısını qəbul et\",\n \"Razıyam\",\n \"Təsdiq et\",\n \"İcazə ver\",\n \"Hamısına icazə ver\",\n \"OK\",\n \"Oldu\",\n \"Başa düşdüm\",\n \"Anladım\",\n \"Davam et\",\n \"Saxla və qəbul et\"\n ],\n reject: [\n \"Rədd et\",\n \"Hamısını rədd et\",\n \"İmtina et\",\n \"İcazə vermə\",\n \"Yalnız zəruri kukilər\",\n \"Yalnız zəruri\",\n \"Kukilərsiz davam et\",\n \"Heç birinə icazə vermə\",\n \"Qəbul etmirəm\",\n \"Yox, sağ olun\"\n ],\n close: [\n \"Bağla\",\n \"Ləğv et\",\n \"Geri\",\n \"Keç\",\n \"İndi yox\",\n \"Sonra\",\n \"Yox, sağ olun\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Приеми\", \"Приеми всички\", \"Съгласявам се\", \"Съгласен съм\", \"Разреши\", \"Разреши всички\", \"ОК\", \"Добре\", \"Разбрах\", \"Продължи\", \"Запази и приеми\", \"Да, приемам\"],\n reject: [\"Откажи\", \"Откажи всички\", \"Отказвам\", \"Отхвърли\", \"Само необходимите\", \"Само задължителните\", \"Само основните\", \"Продължи без бисквитки\", \"Не, благодаря\", \"Забрани\", \"Забрани всички\", \"Не позволявам\"],\n close: [\"Затвори\", \"Отказ\", \"Отмени\", \"Скрий\", \"Не сега\", \"По-късно\", \"Не, благодаря\", \"Готово\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"স্বীকার করুন\",\n \"সব স্বীকার করুন\",\n \"সম্মতি দিচ্ছি\",\n \"সম্মত\",\n \"অনুমতি দিন\",\n \"সব অনুমতি দিন\",\n \"ঠিক আছে\",\n \"বোঝা গেল\",\n \"চালিয়ে যান\",\n \"সংরক্ষণ করে স্বীকার\",\n \"সেভ করে চালিয়ে যান\",\n \"আমি রাজি\"\n ],\n reject: [\n \"প্রত্যাখ্যান করুন\",\n \"সব প্রত্যাখ্যান করুন\",\n \"নামঞ্জুর\",\n \"অনুমতি দেব না\",\n \"শুধু প্রয়োজনীয়\",\n \"শুধুমাত্র দরকারি\",\n \"কুকি ছাড়াই চালিয়ে যান\",\n \"না, ধন্যবাদ\",\n \"না\",\n \"সম্মতি দিচ্ছি না\"\n ],\n close: [\n \"বন্ধ করুন\",\n \"বাতিল\",\n \"ক্যান্সেল\",\n \"এখন নয়\",\n \"পরে\",\n \"না, ধন্যবাদ\",\n \"দেখেছি\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Prihvati\", \"Prihvati sve\", \"Slažem se\", \"Dozvoli\", \"Dozvoli sve\", \"U redu\", \"OK\", \"Razumijem\", \"Nastavi\", \"Sačuvaj i prihvati\", \"Potvrdi\", \"Prihvati i nastavi\"],\n reject: [\"Odbij\", \"Odbij sve\", \"Ne prihvatam\", \"Ne dozvoli\", \"Samo neophodni\", \"Samo obavezni\", \"Nastavi bez kolačića\", \"Ne, hvala\", \"Onemogući sve\"],\n close: [\"Zatvori\", \"Otkaži\", \"Odustani\", \"Odbaci\", \"Ne sada\", \"Ne, hvala\", \"Kasnije\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Acceptar\",\n \"Acceptar-ho tot\",\n \"D'acord\",\n \"Permetre\",\n \"Permetre-ho tot\",\n \"OK\",\n \"Entesos\",\n \"Ho entenc\",\n \"Continuar\",\n \"Desa i accepta\",\n \"Sí, accepto\"\n ],\n reject: [\n \"Rebutjar\",\n \"Rebutjar-ho tot\",\n \"Denegar\",\n \"No permetre\",\n \"Només les necessàries\",\n \"Només essencials\",\n \"Continuar sense galetes\",\n \"No, gràcies\",\n \"Desactivar totes\",\n \"Continuar sense acceptar\"\n ],\n close: [\n \"Tancar\",\n \"Cancel·lar\",\n \"Descartar\",\n \"Ara no\",\n \"No, gràcies\",\n \"Més tard\",\n \"×\",\n \"Tanca la finestra\",\n \"Ometre\",\n \"Fer-ho més tard\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Přijmout\", \"Přijmout vše\", \"Souhlasím\", \"Povolit\", \"Povolit vše\", \"OK\", \"Rozumím\", \"Pokračovat\", \"Uložit a přijmout\", \"Potvrdit\"],\n reject: [\"Odmítnout\", \"Odmítnout vše\", \"Nesouhlasím\", \"Nepovolovat\", \"Pouze nezbytné\", \"Jen nezbytné\", \"Pouze nutné cookies\", \"Pouze základní\", \"Pokračovat bez cookies\", \"Ne, díky\"],\n close: [\"Zavřít\", \"Zrušit\", \"Skrýt\", \"Ne teď\", \"Později\", \"Ne, díky\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"accepter\",\n \"accepter alle\",\n \"accepter alle cookies\",\n \"godkend\",\n \"tillad\",\n \"tillad alle\",\n \"ok\",\n \"okay\",\n \"forstået\",\n \"fortsæt\",\n \"gå videre\",\n \"gem og accepter\",\n \"gem indstillinger\",\n \"accepter valg\"\n ],\n reject: [\n \"afvis\",\n \"afvis alle\",\n \"afvis alle cookies\",\n \"afslå\",\n \"tillad ikke\",\n \"kun nødvendige\",\n \"kun nødvendige cookies\",\n \"kun påkrævede\",\n \"fortsæt uden cookies\",\n \"nej tak\",\n \"begræns til nødvendige\"\n ],\n close: [\n \"luk\",\n \"annuller\",\n \"skjul\",\n \"ikke nu\",\n \"nej tak\",\n \"senere\",\n \"×\",\n \"måske senere\",\n \"luk besked\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Akzeptieren\",\n \"Alle akzeptieren\",\n \"Zustimmen\",\n \"Ich stimme zu\",\n \"Erlauben\",\n \"Alle erlauben\",\n \"Zulassen\",\n \"Alles zulassen\",\n \"OK\",\n \"Okay\",\n \"Verstanden\",\n \"Weiter\",\n \"Speichern & akzeptieren\",\n \"Speichern und fortfahren\",\n \"Alles klar\"\n ],\n reject: [\n \"Ablehnen\",\n \"Alle ablehnen\",\n \"Nicht erlauben\",\n \"Nicht zustimmen\",\n \"Nur notwendige\",\n \"Nur notwendige Cookies\",\n \"Nur essenzielle\",\n \"Nur erforderliche\",\n \"Ohne Cookies fortfahren\",\n \"Nein danke\",\n \"Zugriff verweigern\",\n \"Ablehnen und schließen\"\n ],\n close: [\n \"Schließen\",\n \"Abbrechen\",\n \"Ausblenden\",\n \"Jetzt nicht\",\n \"Nein danke\",\n \"Später\",\n \"×\",\n \"Fenster schließen\",\n \"Verwerfen\",\n \"Zurück\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Αποδοχή\",\n \"Αποδοχή όλων\",\n \"Συμφωνώ\",\n \"Εντάξει\",\n \"ΟΚ\",\n \"Το κατάλαβα\",\n \"Συνέχεια\",\n \"Επιτρέπω\",\n \"Επιτρέπω όλα\",\n \"Αποθήκευση και αποδοχή\",\n \"Προχώρησε\"\n ],\n reject: [\n \"Απόρριψη\",\n \"Απόρριψη όλων\",\n \"Άρνηση\",\n \"Μη αποδοχή\",\n \"Μόνο τα απαραίτητα\",\n \"Μόνο τα αναγκαία\",\n \"Συνέχεια χωρίς cookies\",\n \"Χωρίς cookies\",\n \"Όχι, ευχαριστώ\"\n ],\n close: [\n \"Κλείσιμο\",\n \"Κλείσε\",\n \"Άκυρο\",\n \"Ακύρωση\",\n \"Παράβλεψη\",\n \"Όχι τώρα\",\n \"Αργότερα\",\n \"Επιστροφή\",\n \"×\",\n \"Χ\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"accept\", \"accept all\", \"agree\", \"allow\", \"allow all\", \"ok\", \"okay\", \"got it\", \"continue\", \"save & accept\"],\n reject: [\"reject\", \"reject all\", \"decline\", \"deny\", \"only necessary\", \"necessary only\", \"only essential\", \"essential only\", \"continue without cookies\", \"no thanks\"],\n close: [\"close\", \"cancel\", \"dismiss\", \"not now\", \"no thanks\", \"later\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Aceptar\", \"Aceptar todo\", \"Estoy de acuerdo\", \"Permitir\", \"Permitir todo\", \"OK\", \"De acuerdo\", \"Entendido\", \"Continuar\", \"Guardar y aceptar\", \"Sí, acepto\"],\n reject: [\"Rechazar\", \"Rechazar todo\", \"Denegar\", \"No permitir\", \"Solo las necesarias\", \"Solo lo esencial\", \"Continuar sin cookies\", \"No, gracias\", \"Seguir sin aceptar\", \"No aceptar\"],\n close: [\"Cerrar\", \"Cancelar\", \"Descartar\", \"Ahora no\", \"No, gracias\", \"Más tarde\", \"×\", \"Omitir\", \"Ignorar\", \"Volver\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Nõustun\", \"Olen nõus\", \"Luba kõik\", \"Luba\", \"OK\", \"Olgu\", \"Sain aru\", \"Jätka\", \"Salvesta ja nõustu\", \"Kinnita\"],\n reject: [\"Keeldu\", \"Keeldu kõigist küpsistest\", \"Ära luba\", \"Ainult vajalikud\", \"Vaid hädavajalikud\", \"Jätka ilma küpsisteta\", \"Ei, aitäh\", \"Ära salvesta\"],\n close: [\"Sulge\", \"Tühista\", \"Loobu\", \"Mitte praegu\", \"Ei, aitäh\", \"Hiljem\", \"Pane kinni\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Onartu\", \"Guztiak onartu\", \"Ados\", \"Baimendu\", \"Guztiak baimendu\", \"Ulertuta\", \"Jarraitu\", \"Onartzen dut\", \"Gorde eta onartu\", \"OK\"],\n reject: [\"Ez onartu\", \"Guztiak ukatu\", \"Ukatu\", \"Ez baimendu\", \"Ezeztatu\", \"Beharrezkoak bakarrik\", \"Funtsezkoak bakarrik\", \"Cookie-rik gabe jarraitu\", \"Onartu gabe jarraitu\", \"Ez, eskerrik asko\"],\n close: [\"Itxi\", \"Ezeztatu\", \"Baztertu\", \"Orain ez\", \"Ez, eskerrik asko\", \"Geroago\", \"Utzi\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"پذیرفتن\", \"پذیرفتن همه\", \"قبول می‌کنم\", \"موافقم\", \"اجازه می‌دهم\", \"باشه\", \"تأیید\", \"ادامه\", \"ذخیره و پذیرش\", \"تأیید و ادامه\"],\n reject: [\"رد کردن\", \"رد همه\", \"عدم پذیرش\", \"اجازه نمی‌دهم\", \"فقط ضروری‌ها\", \"فقط موارد لازم\", \"ادامه بدون کوکی\", \"بدون کوکی ادامه بده\", \"نه، ممنون\", \"نمی‌خواهم\", \"نپذیرفتن\"],\n close: [\"بستن\", \"لغو\", \"انصراف\", \"الان نه\", \"فعلاً نه\", \"بعداً\", \"×\", \"بازگشت\", \"خروج\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Hyväksy\",\n \"Hyväksy kaikki\",\n \"Salli\",\n \"Salli kaikki\",\n \"OK\",\n \"Okei\",\n \"Selvä\",\n \"Jatka\",\n \"Tallenna ja hyväksy\",\n \"Suostun\",\n \"Vahvista\"\n ],\n reject: [\n \"Hylkää\",\n \"Hylkää kaikki\",\n \"Kieltäydy\",\n \"Älä salli\",\n \"Vain välttämättömät\",\n \"Vain pakolliset\",\n \"Jatka ilman evästeitä\",\n \"Ei kiitos\",\n \"Estä\",\n \"Älä hyväksy\"\n ],\n close: [\n \"Sulje\",\n \"Peruuta\",\n \"Piilota\",\n \"Ei nyt\",\n \"Ei kiitos\",\n \"Myöhemmin\",\n \"Valmis\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accepter\",\n \"Tout accepter\",\n \"J'accepte\",\n \"Autoriser\",\n \"Tout autoriser\",\n \"OK\",\n \"D'accord\",\n \"Compris\",\n \"Continuer\",\n \"Enregistrer et accepter\",\n \"Valider\",\n \"Accepter et continuer\"\n ],\n reject: [\n \"Refuser\",\n \"Tout refuser\",\n \"Je refuse\",\n \"Refuser tout\",\n \"N'autoriser que l'essentiel\",\n \"Essentiels uniquement\",\n \"Uniquement le nécessaire\",\n \"Continuer sans cookies\",\n \"Non merci\",\n \"Ne pas autoriser\",\n \"Refuser et continuer\"\n ],\n close: [\n \"Fermer\",\n \"Annuler\",\n \"Ignorer\",\n \"Pas maintenant\",\n \"Non merci\",\n \"Plus tard\",\n \"×\",\n \"Fermer la fenêtre\",\n \"Masquer\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Glac\",\n \"Glac leis\",\n \"Glac le gach rud\",\n \"Aontaím\",\n \"Ceadaigh\",\n \"Ceadaigh gach rud\",\n \"OK\",\n \"Ceart go leor\",\n \"Tuigim\",\n \"Lean ar aghaidh\",\n \"Sábháil agus glac\"\n ],\n reject: [\n \"Diúltaigh\",\n \"Diúltaigh gach rud\",\n \"Diúltaím\",\n \"Ná glac\",\n \"Ná ceadaigh\",\n \"Na cinn riachtanacha amháin\",\n \"Gan ach na riachtanacha\",\n \"Lean ar aghaidh gan fhianáin\",\n \"Gan fhianáin\",\n \"Níl, go raibh maith agat\"\n ],\n close: [\n \"Dún\",\n \"Cealaigh\",\n \"Cuir ar ceal\",\n \"Scoir\",\n \"Ná bac leis\",\n \"Ní anois\",\n \"Níos déanaí\",\n \"Ar ball\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"אשר\",\n \"אשר הכל\",\n \"מסכים\",\n \"אני מסכים\",\n \"אפשר\",\n \"אפשר הכל\",\n \"בסדר\",\n \"אוקיי\",\n \"הבנתי\",\n \"המשך\",\n \"שמור ואשר\",\n \"שמור והמשך\",\n \"קבל הכל\"\n ],\n reject: [\n \"דחה\",\n \"דחה הכל\",\n \"סרב\",\n \"אל תאשר\",\n \"אל תאפשר\",\n \"רק הכרחי\",\n \"הכרחי בלבד\",\n \"המשך ללא קובצי Cookie\",\n \"המשך בלי עוגיות\",\n \"לא תודה\",\n \"אל תשמור\",\n \"בטל הסכמה\"\n ],\n close: [\n \"סגור\",\n \"סגירה\",\n \"בטל\",\n \"ביטול\",\n \"לא עכשיו\",\n \"מאוחר יותר\",\n \"אחר כך\",\n \"×\",\n \"סגור חלון\",\n \"חזרה\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"स्वीकार करें\",\n \"सभी स्वीकार करें\",\n \"मैं सहमत हूँ\",\n \"अनुमति दें\",\n \"सभी को अनुमति दें\",\n \"ठीक है\",\n \"जारी रखें\",\n \"स्वीकार करके आगे बढ़ें\",\n \"सहेजें और स्वीकारें\",\n \"हाँ\"\n ],\n reject: [\n \"अस्वीकार करें\",\n \"सभी अस्वीकार करें\",\n \"इंकार करें\",\n \"अनुमति न दें\",\n \"केवल आवश्यक\",\n \"सिर्फ आवश्यक\",\n \"केवल आवश्यक कुकीज़\",\n \"कुकीज़ के बिना जारी रखें\",\n \"नहीं, धन्यवाद\",\n \"स्वीकार न करें\"\n ],\n close: [\n \"बंद करें\",\n \"रद्द करें\",\n \"खारिज करें\",\n \"अभी नहीं\",\n \"नहीं, धन्यवाद\",\n \"बाद में\",\n \"×\",\n \"वापस\",\n \"बाहर निकलें\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Prihvati\", \"Prihvati sve\", \"Slažem se\", \"Dopusti\", \"Dopusti sve\", \"U redu\", \"OK\", \"Razumijem\", \"Nastavi\", \"Spremi i prihvati\", \"Spremi postavke\", \"Potvrdi\"],\n reject: [\"Odbij\", \"Odbij sve\", \"Odbijam\", \"Ne prihvaćam\", \"Ne dopuštam\", \"Samo nužni\", \"Samo osnovno\", \"Nastavi bez kolačića\", \"Bez dodatnih kolačića\", \"Ne, hvala\"],\n close: [\"Zatvori\", \"Odustani\", \"Odbaci\", \"Zanemari\", \"Ne sada\", \"Ne, hvala\", \"Kasnije\", \"×\", \"Zatvori prozor\", \"Zatvori obavijest\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Elfogadom\", \"Mindet elfogadom\", \"Hozzájárulok\", \"Engedélyezem\", \"Összes elfogadása\", \"Összes engedélyezése\", \"OK\", \"Oké\", \"Értettem\", \"Tovább\", \"Rendben\", \"Beállítások mentése\", \"Mentés és elfogadom\"],\n reject: [\"Elutasítom\", \"Mindet elutasítom\", \"Nem fogadom el\", \"Nem engedélyezem\", \"Csak a szükségeseket\", \"Csak a nélkülözhetetlenek\", \"Csak alapbeállítások\", \"Csak kötelezők\", \"Folytatás sütik nélkül\", \"Köszönöm, nem\", \"Nem kérem\"],\n close: [\"Bezárás\", \"Bezár\", \"Mégse\", \"Most nem\", \"Nem most\", \"Később\", \"Nem kérem\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Ընդունել\", \"Ընդունել բոլորը\", \"Համաձայն եմ\", \"Թույլատրել\", \"Թույլատրել բոլորը\", \"Լավ\", \"OK\", \"Հասկացա\", \"Շարունակել\", \"Պահպանել և ընդունել\", \"Հաստատել\"],\n reject: [\"Մերժել\", \"Մերժել բոլորը\", \"Չեմ համաձայնվում\", \"Չթույլատրել\", \"Միայն անհրաժեշտը\", \"Միայն էականը\", \"Միայն պարտադիրները\", \"Շարունակել առանց քուքիների\", \"Ոչ, շնորհակալություն\"],\n close: [\"Փակել\", \"Չեղարկել\", \"Անտեսել\", \"Ոչ հիմա\", \"Ոչ, շնորհակալություն\", \"Հետո\", \"Փակել պատուհանը\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Setuju\", \"Setujui semua\", \"Terima\", \"Terima semua\", \"Izinkan\", \"Izinkan semua\", \"OK\", \"Oke\", \"Baik\", \"Saya mengerti\", \"Lanjutkan\", \"Simpan & setujui\", \"Simpan pengaturan\"],\n reject: [\"Tolak\", \"Tolak semua\", \"Jangan izinkan\", \"Hanya yang diperlukan\", \"Esensial saja\", \"Yang penting saja\", \"Lanjut tanpa cookie\", \"Tidak, terima kasih\"],\n close: [\"Tutup\", \"Batal\", \"Abaikan\", \"Tidak sekarang\", \"Nanti saja\", \"Lewati dulu\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Samþykkja\", \"Samþykkja allt\", \"Ég samþykki\", \"Leyfa\", \"Leyfa allt\", \"Allt í lagi\", \"Í lagi\", \"OK\", \"Skil\", \"Halda áfram\", \"Vista og samþykkja\", \"Staðfesta\", \"Samþykkja og halda áfram\"],\n reject: [\"Hafna\", \"Hafna öllu\", \"Neita\", \"Neita öllum\", \"Leyfi ekki\", \"Aðeins nauðsynlegar\", \"Einungis nauðsynlegar\", \"Halda áfram án vafrakaka\", \"Engar vafrakökur\", \"Nei, takk\"],\n close: [\"Loka\", \"Hætta við\", \"Hunsa\", \"Ekki núna\", \"Nei, takk\", \"Síðar\", \"Seinna\", \"×\", \"Loka glugga\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Aceptar\", \"Aceptar todo\", \"Estoy de acuerdo\", \"Permitir\", \"Permitir todo\", \"OK\", \"Vale\", \"Entendido\", \"Continuar\", \"Guardar y aceptar\", \"Aceptar y continuar\", \"Sí, acepto\"],\n reject: [\"Rechazar\", \"Rechazar todo\", \"Declinar\", \"Denegar\", \"Solo necesarias\", \"Solo lo esencial\", \"Continuar sin cookies\", \"No, gracias\", \"Rechazar opcionales\", \"No aceptar\", \"Usar solo las imprescindibles\"],\n close: [\"Cerrar\", \"Cancelar\", \"Descartar\", \"Ahora no\", \"No, gracias\", \"Más tarde\", \"×\", \"Omitir\", \"Volver\", \"Cerrar ventana\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"同意する\", \"すべて同意\", \"許可する\", \"すべて許可\", \"OK\", \"はい\", \"わかりました\", \"続行\", \"同意して続行\", \"保存して同意\", \"保存して続行\"],\n reject: [\"拒否する\", \"すべて拒否\", \"同意しない\", \"許可しない\", \"必須のみ\", \"必要最低限のみ\", \"必要なもののみ許可\", \"同意せずに続行\", \"Cookieなしで続行\", \"今回は見送る\"],\n close: [\"閉じる\", \"キャンセル\", \"今はしない\", \"後で\", \"×\", \"スキップ\", \"取り消し\", \"今はやめておく\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"ვეთანხმები\",\n \"მიღება\",\n \"დადასტურება\",\n \"დაშვება\",\n \"ყველაფრის მიღება\",\n \"ყველას დაშვება\",\n \"კარგი\",\n \"გასაგებია\",\n \"გაგრძელება\",\n \"შენახვა და თანხმობა\",\n \"შენახვა და მიღება\"\n ],\n reject: [\n \"უარყოფა\",\n \"ყველაფრის უარყოფა\",\n \"უარის თქმა\",\n \"არ დავუშვა\",\n \"მხოლოდ აუცილებელი\",\n \"მხოლოდ აუცილებელი ქუქი-ფაილები\",\n \"გაგრძელება ქუქი-ფაილების გარეშე\",\n \"არა, მადლობა\"\n ],\n close: [\n \"დახურვა\",\n \"გაუქმება\",\n \"დამალვა\",\n \"ახლა არა\",\n \"არა, მადლობა\",\n \"მოგვიანებით\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"동의\", \"모두 동의\", \"허용\", \"전체 허용\", \"확인\", \"알겠습니다\", \"계속\", \"동의하고 계속\", \"저장하고 동의\", \"적용\"],\n reject: [\"거부\", \"모두 거부\", \"동의 안 함\", \"허용 안 함\", \"필수만 허용\", \"필수 항목만\", \"쿠키 없이 계속\", \"건너뛰기\", \"괜찮습니다\"],\n close: [\"닫기\", \"취소\", \"숨기기\", \"지금은 안 함\", \"나중에\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Sutinku\", \"Leisti\", \"Leisti viską\", \"Gerai\", \"Supratau\", \"Tęsti\", \"Patvirtinti\", \"Išsaugoti ir sutikti\", \"OK\"],\n reject: [\"Atmesti\", \"Atmesti visus\", \"Atsisakyti\", \"Neleisti\", \"Tik būtini slapukai\", \"Tik esminiai slapukai\", \"Tęsti be slapukų\", \"Ne, ačiū\"],\n close: [\"Uždaryti\", \"Užverti\", \"Atšaukti\", \"Ne dabar\", \"Vėliau\", \"Ačiū, ne\", \"Grįžti\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Piekrītu\",\n \"Pieņemt\",\n \"Pieņemt visu\",\n \"Atļaut\",\n \"Atļaut visu\",\n \"Labi\",\n \"OK\",\n \"Sapratu\",\n \"Turpināt\",\n \"Apstiprināt\",\n \"Apstiprināt izvēli\",\n \"Saglabāt un piekrist\",\n \"Saglabāt iestatījumus\"\n ],\n reject: [\n \"Noraidīt\",\n \"Noraidīt visu\",\n \"Nepiekrist\",\n \"Neatļaut\",\n \"Neatļaut nevienu\",\n \"Tikai nepieciešamās\",\n \"Tikai būtiskās sīkdatnes\",\n \"Turpināt bez sīkdatnēm\",\n \"Nē, paldies\",\n \"Aizliegt\",\n \"Atteikties\"\n ],\n close: [\n \"Aizvērt\",\n \"Aizvērt logu\",\n \"Atcelt\",\n \"Nerādīt tagad\",\n \"Ne tagad\",\n \"Nē, paldies\",\n \"Vēlāk\",\n \"×\",\n \"Aizvērt paziņojumu\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accepteren\",\n \"Alles accepteren\",\n \"Ik ga akkoord\",\n \"Toestaan\",\n \"Alles toestaan\",\n \"OK\",\n \"Oké\",\n \"Begrepen\",\n \"Doorgaan\",\n \"Opslaan en accepteren\",\n \"Akkoord\",\n \"Verder\",\n \"Ja, prima\"\n ],\n reject: [\n \"Weigeren\",\n \"Alles weigeren\",\n \"Afwijzen\",\n \"Niet toestaan\",\n \"Alleen noodzakelijke cookies\",\n \"Alleen essentiële cookies\",\n \"Alleen strikt noodzakelijke cookies\",\n \"Verder zonder cookies\",\n \"Nee, bedankt\",\n \"Alleen functioneel\",\n \"Minimale instellingen\"\n ],\n close: [\n \"Sluiten\",\n \"Annuleren\",\n \"Afbreken\",\n \"Niet nu\",\n \"Nee, bedankt\",\n \"Later\",\n \"×\",\n \"Terug\",\n \"Venster sluiten\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Godta\",\n \"Godta alle\",\n \"Aksepter\",\n \"Aksepter alle\",\n \"Tillat\",\n \"Tillat alle\",\n \"OK\",\n \"Greit\",\n \"Forstått\",\n \"Fortsett\",\n \"Gå videre\",\n \"Lagre og godta\",\n \"Lagre og aksepter\",\n \"Jeg samtykker\",\n \"Bekreft\"\n ],\n reject: [\n \"Avslå\",\n \"Avslå alle\",\n \"Avvis\",\n \"Avvis alle\",\n \"Ikke tillat\",\n \"Kun nødvendige\",\n \"Bare nødvendige\",\n \"Kun essensielle\",\n \"Kun nødvendige informasjonskapsler\",\n \"Fortsett uten informasjonskapsler\",\n \"Fortsett uten cookies\",\n \"Nei takk\"\n ],\n close: [\n \"Lukk\",\n \"Avbryt\",\n \"Skjul\",\n \"Ikke nå\",\n \"Nei takk\",\n \"Senere\",\n \"Tilbake\",\n \"Lukk uten å lagre\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Akceptuję\",\n \"Akceptuję wszystkie\",\n \"Zgadzam się\",\n \"Zezwól\",\n \"Zezwól na wszystkie\",\n \"OK\",\n \"Okej\",\n \"Rozumiem\",\n \"Kontynuuj\",\n \"Zapisz i zaakceptuj\",\n \"Potwierdź\"\n ],\n reject: [\n \"Odrzuć\",\n \"Odrzuć wszystkie\",\n \"Nie zgadzam się\",\n \"Odmów\",\n \"Tylko niezbędne\",\n \"Wyłącznie niezbędne\",\n \"Kontynuuj bez zgody\",\n \"Kontynuuj bez plików cookie\",\n \"Nie, dziękuję\",\n \"Zabroń\"\n ],\n close: [\n \"Zamknij\",\n \"Anuluj\",\n \"Ukryj\",\n \"Nie teraz\",\n \"Nie, dziękuję\",\n \"Później\",\n \"×\",\n \"Zamknij okno\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Aceitar\",\n \"Aceitar tudo\",\n \"Concordo\",\n \"Permitir\",\n \"Permitir tudo\",\n \"OK\",\n \"Percebi\",\n \"Entendi\",\n \"Continuar\",\n \"Guardar e aceitar\",\n \"Aceitar e continuar\",\n \"Concordar e prosseguir\"\n ],\n reject: [\n \"Rejeitar\",\n \"Rejeitar tudo\",\n \"Recusar\",\n \"Não permitir\",\n \"Apenas o necessário\",\n \"Só o essencial\",\n \"Apenas cookies essenciais\",\n \"Continuar sem cookies\",\n \"Continuar sem aceitar\",\n \"Não, obrigado\"\n ],\n close: [\n \"Fechar\",\n \"Cancelar\",\n \"Dispensar\",\n \"Agora não\",\n \"Não, obrigado\",\n \"Mais tarde\",\n \"Voltar\",\n \"Fechar janela\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accept\",\n \"Accept toate\",\n \"Sunt de acord\",\n \"Permite\",\n \"Permite tot\",\n \"OK\",\n \"În regulă\",\n \"Am înțeles\",\n \"Continuă\",\n \"Salvează și acceptă\",\n \"De acord\",\n \"Accept cookie‑urile\"\n ],\n reject: [\n \"Refuz\",\n \"Refuz toate\",\n \"Respinge\",\n \"Nu permit\",\n \"Doar necesare\",\n \"Numai esențiale\",\n \"Continuă fără cookie‑uri\",\n \"Nu, mulțumesc\",\n \"Respinge opționale\",\n \"Dezactivează tot\"\n ],\n close: [\n \"Închide\",\n \"Anulează\",\n \"Renunță\",\n \"Nu acum\",\n \"Nu, mulțumesc\",\n \"Mai târziu\",\n \"×\",\n \"Închide fereastra\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Принять\", \"Принять все\", \"Согласиться\", \"Разрешить\", \"Разрешить все\", \"ОК\", \"Хорошо\", \"Понятно\", \"Продолжить\", \"Сохранить и принять\", \"Сохранить выбор\"],\n reject: [\"Отклонить\", \"Отклонить все\", \"Отказаться\", \"Запретить\", \"Только необходимые\", \"Только обязательные\", \"Только строго необходимые\", \"Продолжить без файлов cookie\", \"Не принимать\", \"Нет, спасибо\"],\n close: [\"Закрыть\", \"Отмена\", \"Скрыть\", \"Не сейчас\", \"Нет, спасибо\", \"Позже\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Súhlasím\", \"Súhlasím so všetkým\", \"Prijať\", \"Prijať všetko\", \"Povoliť\", \"Povoliť všetko\", \"OK\", \"Dobre\", \"Rozumiem\", \"Pokračovať\", \"Uložiť a prijať\", \"Súhlasím s cookies\"],\n reject: [\"Odmietnuť\", \"Odmietnuť všetko\", \"Nesúhlasím\", \"Nepovoliť\", \"Len nevyhnutné\", \"Iba nevyhnutné\", \"Len základné\", \"Pokračovať bez cookies\", \"Nie, ďakujem\", \"Bez ďalších cookies\"],\n close: [\"Zavrieť\", \"Zrušiť\", \"Skryť\", \"Teraz nie\", \"Neskôr\", \"Nie, ďakujem\", \"Späť\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Sprejmi\", \"Sprejmi vse\", \"Strinjam se\", \"Dovoli\", \"Dovoli vse\", \"V redu\", \"OK\", \"Razumem\", \"Nadaljuj\", \"Shrani in sprejmi\", \"Potrdi\", \"Shrani nastavitve\"],\n reject: [\"Zavrni\", \"Zavrni vse\", \"Ne sprejemam\", \"Ne dovoli\", \"Samo nujno\", \"Le nujni piškotki\", \"Nadaljuj brez piškotkov\", \"Ne, hvala\", \"Onemogoči vse\", \"Zavrni neobvezne\"],\n close: [\"Zapri\", \"Prekliči\", \"Ne zdaj\", \"Kasneje\", \"×\", \"Skrij\", \"Zapri obvestilo\", \"Nazaj\", \"Zapri okno\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Godkänn\",\n \"Godkänn alla\",\n \"Acceptera\",\n \"Acceptera alla\",\n \"Jag samtycker\",\n \"Tillåt\",\n \"Tillåt alla\",\n \"OK\",\n \"Okej\",\n \"Jag förstår\",\n \"Fortsätt\",\n \"Spara och godkänn\",\n \"Bekräfta\",\n \"Gå vidare\",\n \"Klart\"\n ],\n reject: [\n \"Avvisa\",\n \"Avvisa alla\",\n \"Avböj\",\n \"Neka\",\n \"Neka alla\",\n \"Endast nödvändiga\",\n \"Enbart nödvändiga\",\n \"Fortsätt utan kakor\",\n \"Nej tack\",\n \"Avstå\"\n ],\n close: [\n \"Stäng\",\n \"Avbryt\",\n \"Stäng fönster\",\n \"Inte nu\",\n \"Nej tack\",\n \"Senare\",\n \"Hoppa över\",\n \"Tillbaka\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Kubali\", \"Kubali yote\", \"Ruhusu\", \"Ruhusu yote\", \"Sawa\", \"Sawa sawa\", \"Nimeelewa\", \"Endelea\", \"Hifadhi na kubali\", \"Nakubali\"],\n reject: [\"Kataa\", \"Kataa yote\", \"Usiruhusu\", \"Usikubali\", \"Muhimu tu\", \"Ya lazima pekee\", \"Endelea bila vidakuzi\", \"Hapana, asante\"],\n close: [\"Funga\", \"Ghairi\", \"Ondoa\", \"Puuza\", \"Tupilia mbali\", \"Si sasa\", \"Baadaye\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"ஏற்கவும்\", \"அனைத்தையும் ஏற்கவும்\", \"உடன்படுகிறேன்\", \"அனுமதிக்கவும்\", \"அனைத்தையும் அனுமதிக்கவும்\", \"சரி\", \"ஓகே\", \"புரிந்தது\", \"தொடரவும்\", \"சேமித்து ஏற்கவும்\"],\n reject: [\"நிராகரிக்கவும்\", \"அனைத்தையும் நிராகரிக்கவும்\", \"மறுக்கவும்\", \"அனுமதிக்க வேண்டாம்\", \"தேவையானவை மட்டும்\", \"முக்கியமானவை மட்டும்\", \"குக்கீகள் இல்லாமல் தொடரவும்\", \"இல்லை, நன்றி\"],\n close: [\"மூடவும்\", \"ரத்து செய்யவும்\", \"தவிர்க்கவும்\", \"இப்போது வேண்டாம்\", \"இல்லை, நன்றி\", \"பின்னர்\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"ยอมรับ\",\n \"ยอมรับทั้งหมด\",\n \"เห็นด้วย\",\n \"อนุญาต\",\n \"อนุญาตทั้งหมด\",\n \"ตกลง\",\n \"โอเค\",\n \"รับทราบ\",\n \"ดำเนินการต่อ\",\n \"บันทึกและยอมรับ\",\n \"บันทึกการตั้งค่าและยอมรับ\",\n \"ยืนยัน\"\n ],\n reject: [\n \"ปฏิเสธ\",\n \"ปฏิเสธทั้งหมด\",\n \"ไม่ยอมรับ\",\n \"ไม่อนุญาต\",\n \"เฉพาะคุกกี้ที่จำเป็น\",\n \"ใช้เฉพาะที่จำเป็น\",\n \"ไปต่อโดยไม่ใช้คุกกี้\",\n \"ไม่ ขอบคุณ\",\n \"ข้าม\"\n ],\n close: [\n \"ปิด\",\n \"ยกเลิก\",\n \"ปิดหน้าต่าง\",\n \"ปิดการแจ้งเตือน\",\n \"ยังไม่ใช่ตอนนี้\",\n \"ไว้ทีหลัง\",\n \"ทีหลัง\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Tanggapin\", \"Tanggapin lahat\", \"Sumang-ayon\", \"Payagan\", \"Payagan lahat\", \"OK\", \"Okay\", \"Sige\", \"Naintindihan\", \"Magpatuloy\", \"I-save at tanggapin\"],\n reject: [\"Tanggihan\", \"Tanggihan lahat\", \"Huwag payagan\", \"Kinakailangan lang\", \"Mga kinakailangan lang\", \"Mahahalaga lang\", \"Magpatuloy nang walang mga cookie\", \"Hindi, salamat\", \"Huwag na lang\"],\n close: [\"Isara\", \"Kanselahin\", \"Isantabi\", \"Hindi ngayon\", \"Huwag muna\", \"Mamaya\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Kabul et\",\n \"Tümünü kabul et\",\n \"Onayla\",\n \"İzin ver\",\n \"Tümüne izin ver\",\n \"Anladım\",\n \"Devam et\",\n \"Kaydet ve kabul et\",\n \"Ayarları kaydet\",\n \"Kabul ediyorum\"\n ],\n reject: [\n \"Reddet\",\n \"Tümünü reddet\",\n \"Kabul etmiyorum\",\n \"İzin verme\",\n \"Yalnızca gerekli olanlar\",\n \"Sadece zorunlu olanlar\",\n \"Gerekli olanlarla devam et\",\n \"Çerez olmadan devam et\",\n \"Çerezsiz devam et\",\n \"Hayır, teşekkürler\",\n \"Yalnızca zorunlu çerezlere izin ver\"\n ],\n close: [\n \"Kapat\",\n \"İptal\",\n \"Vazgeç\",\n \"Şimdilik değil\",\n \"Daha sonra\",\n \"Geri\",\n \"Pencereyi kapat\",\n \"×\",\n \"X\",\n \"Tamam\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Прийняти\", \"Прийняти все\", \"Погодитися\", \"Дозволити\", \"Дозволити все\", \"ОК\", \"Добре\", \"Зрозуміло\", \"Продовжити\", \"Зберегти та прийняти\", \"Підтвердити\", \"Так\", \"Гаразд\", \"Далі\"],\n reject: [\"Відхилити\", \"Відхилити все\", \"Відмовитися\", \"Не приймати\", \"Не дозволяти\", \"Лише необхідні\", \"Тільки необхідні\", \"Лише обов’язкові\", \"Продовжити без файлів cookie\", \"Без файлів cookie\", \"Ні, дякую\"],\n close: [\"Закрити\", \"Скасувати\", \"Закрити вікно\", \"Не зараз\", \"Пізніше\", \"Пропустити\", \"Готово\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"قبول کریں\",\n \"سب قبول کریں\",\n \"قبول ہے\",\n \"میں متفق ہوں\",\n \"اجازت دیں\",\n \"تمام کی اجازت دیں\",\n \"ٹھیک ہے\",\n \"اوکے\",\n \"جاری رکھیں\",\n \"آگے بڑھیں\",\n \"محفوظ کریں اور قبول کریں\",\n \"ہاں\"\n ],\n reject: [\n \"رد کریں\",\n \"سب رد کریں\",\n \"انکار کریں\",\n \"اجازت نہ دیں\",\n \"صرف ضروری\",\n \"صرف لازمی\",\n \"صرف بنیادی\",\n \"کوکیز کے بغیر جاری رکھیں\",\n \"نہیں، شکریہ\",\n \"قبول نہیں\",\n \"منع کریں\",\n \"اختیارات محدود کریں\"\n ],\n close: [\n \"بند کریں\",\n \"منسوخ کریں\",\n \"خارج کریں\",\n \"ابھی نہیں\",\n \"بعد میں\",\n \"نہیں، شکریہ\",\n \"×\",\n \"واپس\",\n \"چھپائیں\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Đồng ý\", \"Tôi đồng ý\", \"Chấp nhận\", \"Chấp nhận tất cả\", \"Cho phép\", \"Cho phép tất cả\", \"OK\", \"Đã hiểu\", \"Tiếp tục\", \"Lưu và chấp nhận\"],\n reject: [\"Từ chối\", \"Từ chối tất cả\", \"Không đồng ý\", \"Không cho phép\", \"Chỉ bắt buộc\", \"Chỉ cho phép cần thiết\", \"Tiếp tục mà không cần cookie\", \"Không, cảm ơn\"],\n close: [\"Đóng\", \"Hủy\", \"Bỏ qua\", \"Không phải bây giờ\", \"Để sau\", \"Không, cảm ơn\", \"×\", \"Tắt\", \"Ẩn\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"同意\", \"全部同意\", \"接受\", \"全部接受\", \"允许\", \"全部允许\", \"确定\", \"好的\", \"我知道了\", \"继续\", \"保存并接受\", \"继续并同意\"],\n reject: [\"拒绝\", \"全部拒绝\", \"不同意\", \"不允许\", \"仅保留必要项\", \"仅限必要\", \"仅启用必要功能\", \"仅使用必要 Cookie\", \"继续但不使用 Cookie\", \"不用了,谢谢\", \"暂不同意\"],\n close: [\"关闭\", \"取消\", \"忽略\", \"暂不\", \"稍后\", \"以后再说\", \"返回\", \"×\"]\n};\n\nexport default translations;\n","import af from './af';\nimport ar from './ar';\nimport az from './az';\nimport bg from './bg';\nimport bn from './bn';\nimport bs from './bs';\nimport ca from './ca';\nimport cs from './cs';\nimport da from './da';\nimport de from './de';\nimport el from './el';\nimport en from './en';\nimport es from './es';\nimport et from './et';\nimport eu from './eu';\nimport fa from './fa';\nimport fi from './fi';\nimport fr from './fr';\nimport ga from './ga';\nimport he from './he';\nimport hi from './hi';\nimport hr from './hr';\nimport hu from './hu';\nimport hy from './hy';\nimport id from './id';\nimport is from './is';\nimport it from './it';\nimport ja from './ja';\nimport ka from './ka';\nimport ko from './ko';\nimport lt from './lt';\nimport lv from './lv';\nimport nl from './nl';\nimport no from './no';\nimport pl from './pl';\nimport pt from './pt';\nimport ro from './ro';\nimport ru from './ru';\nimport sk from './sk';\nimport sl from './sl';\nimport sv from './sv';\nimport sw from './sw';\nimport ta from './ta';\nimport th from './th';\nimport tl from './tl';\nimport tr from './tr';\nimport uk from './uk';\nimport ur from './ur';\nimport vi from './vi';\nimport zh from './zh';\n\nexport const languages = {\n af, ar, az, bg, bn, bs, ca, cs, da, de, el, en, es, et, eu, fa, fi, fr, ga, he, hi, hr, hu, hy, id, is, it, ja, ka,\n ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, ta, th, tl, tr, uk, ur, vi, zh,\n} as const;\n\nexport type Lang = keyof typeof languages;\n\nexport function normalizeLang(input: string): Lang {\n const code = input.toLowerCase() as keyof typeof languages;\n if (code in languages) return code as Lang;\n return 'en';\n}\n\nexport function getTranslations(lang: string): { accept: string[], reject: string[], close: string[] } {\n const code = normalizeLang(lang);\n return languages[code];\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { getTranslations } from './translations';\n\ntype Options = {\n timeoutMs?: number; // max sweep time\n preferReject?: boolean; // click \"Reject\"/\"Decline\" where possible\n lang?: string; // Interface language, used for accept/reject/close button texts\n pollIntervalMs?: number; // how often we probe when nothing happened\n settleAfterActionMs?: number; // give the DOM time to settle after a click\n quietPeriodMs?: number; // stop if nothing happened for this long\n minSweepMs?: number; // always sweep at least this long (to catch late banners)\n maxActions?: number; // safety: don't click forever on re-spawning modals\n verbose?: boolean;\n};\n\ninterface TrRegExps {\n accept: RegExp;\n reject: RegExp;\n close: RegExp;\n}\n\nconst knownCMPSelectors: Array<{ name: string; accept: string[]; reject: string[] }> = [\n { name: 'OneTrust', accept: ['#onetrust-accept-btn-handler'], reject: ['#onetrust-reject-all-handler'] },\n {\n name: 'Cookiebot',\n accept: ['#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'],\n reject: ['#CybotCookiebotDialogBodyLevelButtonDecline'],\n },\n { name: 'Didomi', accept: ['button.didomi-accept-all'], reject: ['button.didomi-reject-all'] },\n {\n name: 'Quantcast',\n accept: ['button[qc-cmp2-action=\"accept_all\"]'],\n reject: ['button[qc-cmp2-action=\"reject_all\"]'],\n },\n {\n name: 'TrustArc',\n accept: ['#truste-consent-button'],\n reject: ['#truste-reject-button', '#truste-consent-required'],\n },\n { name: 'Iubenda', accept: ['button.iubenda-cs-accept-btn'], reject: ['button.iubenda-cs-reject-btn'] },\n {\n name: 'CookieYes',\n accept: ['#wt-cli-accept-all-btn', '#cookie_action_close_header'],\n reject: ['#wt-cli-reject-btn'],\n },\n { name: 'Osano', accept: ['.osano-cm-accept-all'], reject: ['.osano-cm-reject-all'] },\n { name: 'Klaro', accept: ['.cm-btn-accept'], reject: ['.cm-btn-decline'] },\n];\n\nfunction escapeRegex(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizePhrase(p: string): string {\n // collapse whitespace to \\s+ to match various spacing and NBSPs\n return escapeRegex(p.trim()).replace(/\\s+/g, '\\\\s+');\n}\n\nfunction buildRegexFromTranslations(phrases: string[], opts?: { anchorWhole?: boolean; flags?: string }): RegExp {\n const unique = Array.from(new Set(phrases.map(normalizePhrase))).filter((s) => s.length > 0);\n const body = unique.length ? unique.join('|') : '';\n const source = opts?.anchorWhole ? `^(?:${body})$` : `(?:${body})`;\n return new RegExp(source, opts?.flags ?? 'i');\n}\n\nasync function tryClick(page: Page, selectors: string[], _label: string) {\n for (const s of selectors) {\n const el = page.locator(s).first();\n if (await el.count().catch(() => 0)) {\n try {\n await el.scrollIntoViewIfNeeded({ timeout: 250 });\n await el.click({ timeout: 500 });\n return true;\n } catch {}\n }\n }\n return false;\n}\n\nasync function closeNativeJsAlerts(page: Page) {\n page.on(\n 'dialog',\n /* v8 ignore next — callback runs in browser context, not Node */\n (d) => d.accept().catch(() => {}),\n );\n}\n\n// 1) Known cookie CMPs (quick wins)\nasync function sweepKnownCMPs(page: Page, preferReject: boolean): Promise<boolean> {\n for (const cmp of knownCMPSelectors) {\n if (preferReject && (await tryClick(page, cmp.reject, `${cmp.name} reject`))) return true;\n if (await tryClick(page, cmp.accept, `${cmp.name} accept`)) return true;\n if (!preferReject && (await tryClick(page, cmp.reject, `${cmp.name} reject`))) return true;\n }\n return false;\n}\n\n// 2) Role/text-based generic approach (works surprisingly often)\nasync function clickByRoleAndText(page: Page, preferReject: boolean, regex: TrRegExps): Promise<boolean> {\n // Dialogs\n const dialogs = page.getByRole('dialog');\n if (await dialogs.count().catch(() => 0)) {\n const target = preferReject\n ? dialogs.getByRole('button', { name: regex.reject }).first()\n : dialogs.getByRole('button', { name: regex.accept }).first();\n\n if (await target.count().catch(() => 0)) {\n try {\n await target.click({ timeout: 700 });\n return true;\n } catch {}\n }\n // fallback: any accept/reject in dialog\n const any =\n (await dialogs.getByRole('button', { name: regex.accept }).first().count()) ||\n (await dialogs.getByRole('button', { name: regex.reject }).first().count());\n if (any) {\n try {\n const btn = dialogs.getByRole('button', { name: regex.accept }).first();\n await ((await btn.count()) ? btn : dialogs.getByRole('button', { name: regex.reject }).first()).click({\n timeout: 700,\n });\n return true;\n } catch {}\n }\n // close-icon\n const close = dialogs.getByRole('button', { name: regex.close }).first();\n if (await close.count().catch(() => 0)) {\n try {\n await close.click({ timeout: 700 });\n return true;\n } catch {}\n }\n }\n\n // Random buttons (no dialog role)\n const generic = page.getByRole('button', { name: preferReject ? regex.reject : regex.accept }).first();\n if (await generic.count().catch(() => 0)) {\n try {\n await generic.click({ timeout: 700 });\n return true;\n } catch {}\n }\n return false;\n}\n\n// 3) Heuristic for “promo/newsletter” modals (email field + close button)\nasync function sweepNewsletter(page: Page, regex: TrRegExps): Promise<boolean> {\n const modalLike = page.locator('*:visible').filter({\n has: page.locator('input[type=\"email\"],input[placeholder*=\"email\" i]'),\n });\n if (await modalLike.count().catch(() => 0)) {\n const close = modalLike.getByRole('button', { name: regex.close }).first();\n if (await close.count().catch(() => 0)) {\n try {\n await close.click({ timeout: 700 });\n return true;\n } catch {}\n }\n // click outside the modal (overlay)\n /* v8 ignore start */\n const overlay = page.locator('div[role=\"presentation\"], .modal-backdrop, .overlay, .ReactModal__Overlay');\n if (await overlay.count().catch(() => 0)) {\n try {\n await overlay.first().click({ timeout: 500, position: { x: 5, y: 5 } });\n return true;\n } catch {}\n }\n /* v8 ignore stop */\n }\n return false;\n}\n\n// 4) Full-screen overlay heuristic (fixed + large + high z-index)\nasync function sweepOverlays(page: Page, regex: TrRegExps): Promise<boolean> {\n const acceptRxSource = regex.accept.source; // serialize for page.evaluate closure safety\n const acceptRxFlags = regex.accept.flags;\n\n return await page\n .evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n ([source, flags]) => {\n const acceptRx = new RegExp(source, flags);\n const isBig = (el: Element) => {\n const r = (el as HTMLElement).getBoundingClientRect?.();\n return r && r.width > window.innerWidth * 0.6 && r.height > window.innerHeight * 0.4;\n };\n const candidates = Array.from(document.querySelectorAll<HTMLElement>('body *'))\n .filter((el) => {\n const s = getComputedStyle(el);\n if (!s) return false;\n const fixed = s.position === 'fixed' || s.position === 'sticky';\n const z = parseInt(s.zIndex || '0', 10);\n return fixed && z >= 1000 && isBig(el) && (el as HTMLElement).offsetParent !== null;\n })\n .slice(0, 5);\n\n for (const el of candidates) {\n // try a close button inside\n const btn = el.querySelector<HTMLElement>(\n '[aria-label*=”close” i], button[aria-label*=”close” i], button:has(svg), .close, [data-close], .btn-close',\n );\n\n if (btn) {\n btn.click();\n return true;\n }\n\n // otherwise: click a visible “accept/agree/ok”\n const clickByText = (rx: RegExp) => {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_ELEMENT);\n let n: Node | null;\n while ((n = walker.nextNode())) {\n const e = n as HTMLElement;\n if (!e) continue;\n if (!(e as HTMLElement).offsetParent) continue;\n const text = (e as HTMLElement).innerText?.trim();\n\n if (text && rx.test(text)) {\n (e as HTMLElement).click();\n return true;\n }\n }\n return false;\n };\n if (clickByText(acceptRx)) return true;\n }\n return false;\n },\n /* v8 ignore stop */\n [acceptRxSource, acceptRxFlags],\n )\n .catch(() => false);\n}\n\nexport async function suppressInterferences(page: Page, opts: Options = {}) {\n const timeoutMs = opts.timeoutMs ?? 4000;\n const preferReject = opts.preferReject ?? false;\n\n const pollIntervalMs = opts.pollIntervalMs ?? 120;\n const settleAfterActionMs = opts.settleAfterActionMs ?? 500;\n const quietPeriodMs = opts.quietPeriodMs ?? 800;\n const minSweepMs = opts.minSweepMs ?? 500;\n const maxActions = opts.maxActions ?? 6;\n\n // Build regexes from translations so callers can provide i18n\n const { accept, reject, close } = getTranslations(opts.lang ?? 'en');\n const regex = {\n accept: buildRegexFromTranslations(accept, { anchorWhole: true }),\n reject: buildRegexFromTranslations(reject, { anchorWhole: true }),\n close: buildRegexFromTranslations(close, { anchorWhole: false }),\n };\n\n await closeNativeJsAlerts(page);\n\n let actions = 0;\n const startedAt = Date.now();\n let lastActivityAt = startedAt;\n\n while (Date.now() < lastActivityAt + timeoutMs) {\n // Try sweepers (short-circuit on first success)\n const did =\n (await sweepKnownCMPs(page, preferReject)) ||\n (await clickByRoleAndText(page, preferReject, regex)) ||\n (await sweepNewsletter(page, regex)) ||\n (await sweepOverlays(page, regex));\n\n if (did) {\n actions += 1;\n lastActivityAt = Date.now();\n\n // Optional: bail if we are hitting a loop of re-spawning popups\n if (actions >= maxActions) {\n if (opts.verbose) console.log(`[suppressInterferences] Max actions ${maxActions} reached, stopping.`);\n break;\n }\n\n // Let the DOM settle; some UIs spawn a second layer after the first click\n await sleep(settleAfterActionMs);\n continue;\n }\n\n // Nothing clicked this iteration — if we've been quiet long enough (and passed a minimum sweep window), stop early\n const quietFor = Date.now() - lastActivityAt;\n const ranFor = Date.now() - startedAt;\n\n if (quietFor >= quietPeriodMs && ranFor >= minSweepMs) {\n /* v8 ignore start */\n if (opts.verbose) console.log(`[suppressInterferences] Quiet for ${quietFor}ms, stopping early.`);\n /* v8 ignore stop */\n break;\n }\n\n // Brief pause before probing again\n await sleep(pollIntervalMs);\n }\n}\n","import type { Page } from '@playwright/test';\nimport * as Diff from 'diff';\nimport { formatHtml } from './format-html';\nimport { scrubHtml } from './scrub-html';\nimport { isPage } from './utils/type-check';\n\nasync function format(rawHtml: string, url: string) {\n const html = await scrubHtml({ html: rawHtml, url });\n return await formatHtml(html);\n}\n\nexport async function unifiedHtmlDiff(\n old: { html: string; url: string } | Page,\n current: { html: string; url: string } | Page,\n): Promise<string> {\n if (isPage(old)) old = { html: await old.content(), url: old.url() };\n if (isPage(current)) current = { html: await current.content(), url: current.url() };\n\n const [a, b] = await Promise.all([format(old.html, old.url), format(current.html, current.url)]);\n\n return Diff.createTwoFilesPatch('before.html', 'after.html', a, b);\n}\n"]}
1
+ {"version":3,"sources":["../src/browser.ts","../src/fallback-locator.ts","../src/utils/pick-field-element.ts","../src/field/aria-select.ts","../src/utils/date.ts","../src/wait.ts","../src/field/calendar.ts","../src/field/composite-date.ts","../src/field/composite-select.ts","../src/field/composite-slider.ts","../src/field/composite-toggle.ts","../src/field/native-select.ts","../src/field/date-group.ts","../src/field/date-text-input.ts","../src/field/native-checkbox.ts","../src/field/native-date.ts","../src/field/native-input.ts","../src/field/otp.ts","../src/field/radio-group.ts","../src/field/slider.ts","../src/field/toggle.ts","../src/field/index.ts","../src/format-html.ts","../src/fuzzy-locator.ts","../src/page-metadata.ts","../src/screenshot.ts","../src/utils/type-check.ts","../src/page-info.ts","../src/selector/date-selector.ts","../src/selector/field-selector.ts","../src/scrub-html.ts","../src/snapshot.ts","../src/scroll.ts","../src/translations/af.ts","../src/translations/ar.ts","../src/translations/az.ts","../src/translations/bg.ts","../src/translations/bn.ts","../src/translations/bs.ts","../src/translations/ca.ts","../src/translations/cs.ts","../src/translations/da.ts","../src/translations/de.ts","../src/translations/el.ts","../src/translations/en.ts","../src/translations/es.ts","../src/translations/et.ts","../src/translations/eu.ts","../src/translations/fa.ts","../src/translations/fi.ts","../src/translations/fr.ts","../src/translations/ga.ts","../src/translations/he.ts","../src/translations/hi.ts","../src/translations/hr.ts","../src/translations/hu.ts","../src/translations/hy.ts","../src/translations/id.ts","../src/translations/is.ts","../src/translations/it.ts","../src/translations/ja.ts","../src/translations/ka.ts","../src/translations/ko.ts","../src/translations/lt.ts","../src/translations/lv.ts","../src/translations/nl.ts","../src/translations/no.ts","../src/translations/pl.ts","../src/translations/pt.ts","../src/translations/ro.ts","../src/translations/ru.ts","../src/translations/sk.ts","../src/translations/sl.ts","../src/translations/sv.ts","../src/translations/sw.ts","../src/translations/ta.ts","../src/translations/th.ts","../src/translations/tl.ts","../src/translations/tr.ts","../src/translations/uk.ts","../src/translations/ur.ts","../src/translations/vi.ts","../src/translations/zh.ts","../src/translations/index.ts","../src/suppress-interferences.ts","../src/unified-html-diff.ts"],"names":["format","months","isRange","isArray","isDate","formatDate","caseInsensitiveExact","toNumber","options","matchesDateLoosely","digits","el","getToggleTarget","snapshot","JSDOM","sleep","translations"],"mappings":"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","file":"index.js","sourcesContent":["import type { Browser, BrowserContextOptions, Page } from '@playwright/test';\n\n// Launch a minimal, headless Chromium instance.\nexport async function browse(browser: Browser, options: BrowserContextOptions = {}): Promise<Page> {\n const context = await browser.newContext({\n viewport: { width: 1920, height: 1080 },\n userAgent:\n 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n locale: 'en-US',\n ...options,\n });\n\n // Safety net against bundler-injected helpers inside page.evaluate\n await context.addInitScript(\n /* v8 ignore next — callback runs in browser context, not Node */\n () => {\n // define __name as a no-op if present\n (window as any).__name = (window as any).__name || ((fn: any) => fn);\n },\n );\n\n return await context.newPage();\n}\n","import { Locator } from '@playwright/test';\n\ntype LocatorMethod = (...args: any[]) => any;\ntype ProxyProperty = string | symbol;\nexport const FALLBACK_LOCATOR_CANDIDATES = Symbol('letsrunit.playwright.fallback-locator-candidates');\n\nconst ACTION_METHODS = new Set([\n 'blur',\n 'check',\n 'clear',\n 'click',\n 'dblclick',\n 'dispatchEvent',\n 'dragTo',\n 'fill',\n 'focus',\n 'hover',\n 'press',\n 'pressSequentially',\n 'scrollIntoViewIfNeeded',\n 'selectOption',\n 'setChecked',\n 'setInputFiles',\n 'tap',\n 'type',\n 'uncheck',\n]);\n\nconst LOCATOR_CHAIN_METHODS = new Set([\n 'and',\n 'first',\n 'last',\n 'locator',\n 'nth',\n 'or',\n]);\n\nconst NO_WAIT_OPTION_INDEX: Record<string, number> = {\n dragTo: 1,\n fill: 1,\n press: 1,\n pressSequentially: 1,\n selectOption: 1,\n setInputFiles: 1,\n type: 1,\n};\n\nfunction buildOrLocator(candidates: Locator[]): Locator {\n let result = candidates[0];\n for (const candidate of candidates.slice(1)) {\n result = result.or(candidate);\n }\n return result;\n}\n\nasync function firstPresentFallback(candidates: Locator[]): Promise<Locator | null> {\n for (const candidate of candidates.slice(1)) {\n try {\n if ((await candidate.count()) > 0) return candidate;\n } catch {}\n }\n return null;\n}\n\nfunction withNoWaitTimeout(method: string, args: unknown[]): unknown[] {\n const next = [...args];\n const optionIndex = NO_WAIT_OPTION_INDEX[method] ?? 0;\n const current = next[optionIndex];\n\n if (current && typeof current === 'object') {\n next[optionIndex] = { ...(current as Record<string, unknown>), timeout: 0 };\n } else {\n next[optionIndex] = { timeout: 0 };\n }\n return next;\n}\n\nfunction handleExpect(primary: Locator, candidates: Locator[]) {\n return (expression: string, options: unknown) => {\n if (expression.includes('to.be.visible') || expression.includes('to.be.attached')) {\n return (buildOrLocator(candidates) as any)._expect(expression, options);\n }\n return (primary as any)._expect(expression, options);\n };\n}\n\nfunction handleAll(candidates: Locator[]) {\n return async () => {\n const all: Locator[] = [];\n for (const candidate of candidates) {\n all.push(...(await candidate.all()));\n }\n return all;\n };\n}\n\nfunction handleLocatorChain(prop: string, candidates: Locator[]) {\n return (...args: any[]) =>\n createFallbackLocator(\n candidates.map((candidate) => {\n const method = (candidate as any)[prop] as LocatorMethod;\n return method.apply(candidate, args);\n }),\n );\n}\n\nfunction handleCount(primary: Locator, candidates: Locator[]) {\n return async () => {\n const primaryCount = await primary.count();\n if (primaryCount > 0) return primaryCount;\n\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) return primaryCount;\n\n return fallback.count();\n };\n}\n\nfunction handleAction(prop: string, primary: Locator, candidates: Locator[], primaryMethod: LocatorMethod) {\n return async (...args: any[]) => {\n try {\n return await primaryMethod.apply(primary, args);\n } catch (error) {\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) throw error;\n const fallbackMethod = (fallback as any)[prop] as LocatorMethod;\n return fallbackMethod.apply(fallback, withNoWaitTimeout(prop, args));\n }\n };\n}\n\nfunction handleAsyncFallback(prop: string, primaryMethod: LocatorMethod, primary: Locator, candidates: Locator[]) {\n return (...args: any[]) => {\n const result = primaryMethod.apply(primary, args);\n if (!result || typeof result !== 'object' || typeof (result as Promise<unknown>).catch !== 'function') {\n return result;\n }\n\n return (result as Promise<unknown>).catch(async (error: unknown) => {\n const fallback = await firstPresentFallback(candidates);\n if (!fallback) throw error;\n const fallbackMethod = (fallback as any)[prop] as LocatorMethod;\n return fallbackMethod.apply(fallback, args);\n });\n };\n}\n\nfunction formatLocatorChain(candidates: Locator[]): string {\n const parts = candidates.map((candidate) => candidate.toString());\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0];\n return `${parts[0]} {fuzzy}`;\n}\n\nexport function createFallbackLocator(candidates: Locator[]): Locator {\n const primary = candidates[0];\n const unsupported = new Set(['filter', 'getByRole', 'getByLabel']);\n const passthroughMetaProperties = new Set(['constructor', '__proto__']);\n\n const proxy = new Proxy(primary as unknown as object, {\n get(_target, prop: ProxyProperty) {\n if (prop === FALLBACK_LOCATOR_CANDIDATES) return candidates;\n if (typeof prop !== 'string') return (primary as any)[prop];\n if (passthroughMetaProperties.has(prop)) return (primary as any)[prop];\n\n switch (prop) {\n case 'toString':\n return () => formatLocatorChain(candidates);\n case 'all':\n return handleAll(candidates);\n case '_expect':\n return handleExpect(primary, candidates);\n case 'count':\n return handleCount(primary, candidates);\n }\n\n if (unsupported.has(prop)) {\n return () => {\n throw new Error(`FallbackLocator does not support ${prop}`);\n };\n }\n\n if (LOCATOR_CHAIN_METHODS.has(prop)) {\n return handleLocatorChain(prop, candidates);\n }\n\n const primaryMethod = (primary as any)[prop] as LocatorMethod;\n if (typeof primaryMethod !== 'function') return primaryMethod;\n\n if (ACTION_METHODS.has(prop)) {\n return handleAction(prop, primary, candidates, primaryMethod);\n }\n\n return handleAsyncFallback(prop, primaryMethod, primary, candidates);\n },\n });\n\n return proxy as Locator;\n}\n\nexport function getFallbackLocatorCandidates(locator: Locator): Locator[] | null {\n return ((locator as any)[FALLBACK_LOCATOR_CANDIDATES] as Locator[] | undefined) ?? null;\n}\n","import type { Locator } from '@playwright/test';\nimport { getFallbackLocatorCandidates } from '../fallback-locator';\n\nasync function resolveConcreteFieldLocator(elements: Locator): Promise<Locator> {\n const fallbackCandidates = getFallbackLocatorCandidates(elements);\n if (!fallbackCandidates) return elements;\n\n for (const candidate of fallbackCandidates) {\n try {\n if ((await candidate.count()) > 0) return candidate;\n } catch {}\n }\n\n return elements;\n}\n\nexport async function pickFieldElement(elements: Locator): Promise<Locator> {\n elements = await resolveConcreteFieldLocator(elements);\n\n const count = await elements.count();\n if (count <= 1) return elements.first();\n\n const candidates: { el: Locator; tag: string; role: string | null; isVisible: boolean }[] = [];\n\n for (let i = 0; i < count; i++) {\n const el = elements.nth(i);\n const [tag, role, isVisible] = await el.evaluate((e) => [\n e.tagName.toLowerCase(),\n e.getAttribute('role')?.toLowerCase() || null,\n e.getAttribute('type') !== 'hidden' && e.getAttribute('aria-hidden') !== 'true',\n ]);\n candidates.push({ el, tag: tag as string, role: role as string | null, isVisible: isVisible as boolean });\n }\n\n // 1. If there is one of the elements is an input and the input is not hidden or has an aria indicating it is a (form) control, pick that element.\n const formControls = ['input', 'textarea', 'select'];\n const controlRoles = ['checkbox', 'radio', 'textbox', 'combobox', 'listbox', 'slider', 'spinbutton'];\n\n const primary = candidates.filter(\n (c) => (formControls.includes(c.tag) || (c.role && controlRoles.includes(c.role))) && c.isVisible,\n );\n if (primary.length === 1) return primary[0].el;\n\n // 2. If one element has an aria role that might be logical for a form component (like a `group`), pick that element.\n const groups = candidates.filter((c) => c.role === 'group');\n if (groups.length === 1) return groups[0].el;\n\n // 3. If one element contains the other element(s), pick the parent.\n const isParent = await elements.evaluateAll((elems) => {\n const results = elems.map((el, i) => {\n const others = elems.filter((_, j) => i !== j);\n return others.every((other) => el.contains(other));\n });\n const parentIndex = results.indexOf(true);\n return parentIndex !== -1 ? parentIndex : null;\n });\n\n if (isParent !== null) {\n return elements.nth(isParent);\n }\n\n return elements.first();\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nfunction cssAttrEquals(name: string, value: string): string {\n return `[${name}=${JSON.stringify(value)}]`;\n}\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nasync function getComboboxRoot(el: Loc['el'], options?: SetOptions) {\n const role = await el.getAttribute('role', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (role === 'combobox') return el;\n\n const byRole = el.locator('[role=\"combobox\"]').first();\n if ((await byRole.count()) > 0) return byRole;\n\n const popupInput = el\n .locator('input[aria-controls], input[aria-owns], input[aria-haspopup], textarea[aria-controls], textarea[aria-owns], textarea[aria-haspopup]')\n .first();\n if ((await popupInput.count()) > 0) return popupInput;\n\n return null;\n}\n\nasync function getControlledListbox(el: Loc['el'], options?: SetOptions) {\n const ids: string[] = [];\n for (const attr of ['aria-controls', 'aria-owns']) {\n const raw = await el.getAttribute(attr, options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (!raw) continue;\n ids.push(...raw.split(/\\s+/).filter(Boolean));\n }\n\n for (const id of ids) {\n const listbox = el.page().locator(`[role=\"listbox\"]${cssAttrEquals('id', id)}`).first();\n if ((await listbox.count()) > 0) return listbox;\n }\n\n return null;\n}\n\nasync function getVisibleListbox(el: Loc['el'], options?: SetOptions) {\n const listboxes = el.page().locator('[role=\"listbox\"]:visible');\n await listboxes.first().waitFor({ state: 'visible', timeout: options?.timeout }).catch(() => null);\n if ((await listboxes.count()) > 0) return listboxes.first();\n return null;\n}\n\nasync function didSelectionApply(\n root: Loc['el'],\n option: Loc['el'],\n before: string | null,\n options?: SetOptions,\n): Promise<boolean> {\n const ariaSelected = await option.getAttribute('aria-selected', options).catch(() => null);\n if (ariaSelected === 'true') return true;\n\n const optionId = await option.getAttribute('id', options).catch(() => null);\n const activeDescendant = await root.getAttribute('aria-activedescendant', options).catch(() => null);\n if (optionId && activeDescendant === optionId) return true;\n\n const after = await root\n .evaluate((node) => {\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node.value;\n }\n return node.textContent?.trim() ?? '';\n }, options)\n .catch(() => null);\n\n if (before !== null && after !== null && after !== before) return true;\n\n const listbox = await getVisibleListbox(root, options);\n if (!listbox) return true;\n\n return false;\n}\n\nexport async function selectAria({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n\n const root = await getComboboxRoot(el, options);\n if (!root) return false;\n\n let listbox = await getControlledListbox(root, options);\n\n const ariaExpanded = await root.getAttribute('aria-expanded', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaExpanded !== 'true') {\n await root.click(options);\n listbox = listbox ?? (await getControlledListbox(root, options));\n }\n\n listbox = listbox ?? (await getVisibleListbox(root, options));\n if (!listbox) return false;\n\n const stringValue = String(value);\n const before = await root\n .evaluate((node) => {\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n return node.value;\n }\n return node.textContent?.trim() ?? '';\n }, options)\n .catch(() => null);\n\n // 1. By value attribute\n const byValue = listbox.locator(\n `[role=\"option\"]${cssAttrEquals('value', stringValue)}, ` +\n `[role=\"option\"]${cssAttrEquals('data-value', stringValue)}, ` +\n `[role=\"option\"]${cssAttrEquals('ng-reflect-value', stringValue)}`,\n );\n if ((await byValue.count()) >= 1) {\n const option = byValue.first();\n await option.click(options);\n return await didSelectionApply(root, option, before, options);\n }\n\n // 2. By accessible name (case-insensitive)\n const byName = listbox.getByRole('option', { name: caseInsensitiveExact(stringValue) });\n if ((await byName.count()) >= 1) {\n const option = byName.first();\n await option.click(options);\n return await didSelectionApply(root, option, before, options);\n }\n\n return false;\n}\n","import { getWeekNumber } from '@letsrunit/utils';\n\nexport function formatDateForInput(date: Date, type: string | null): string {\n const pad = (n: number) => String(n).padStart(2, '0');\n const yyyy = date.getFullYear();\n const mm = pad(date.getMonth() + 1);\n const dd = pad(date.getDate());\n const hh = pad(date.getHours());\n const min = pad(date.getMinutes());\n\n switch (type) {\n case 'number':\n return date.getTime().toString();\n case 'datetime-local':\n return `${yyyy}-${mm}-${dd}T${hh}:${min}`;\n case 'month':\n return `${yyyy}-${mm}`;\n case 'week': {\n const week = getWeekNumber(date);\n return `${yyyy}-W${pad(week)}`;\n }\n case 'time':\n return `${hh}:${min}`;\n case 'date':\n default:\n return `${yyyy}-${mm}-${dd}`;\n }\n}\n\nexport function formatDate(d: Date, format: string): string {\n const dd = String(d.getDate()).padStart(2, '0');\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n const yyyy = String(d.getFullYear());\n return format.replace('DD', dd).replace('MM', mm).replace('YYYY', yyyy);\n}\n\nexport function getMonthNames(locale?: string): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'long' });\n return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)));\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Locator, Page } from '@playwright/test';\n\nexport async function waitForIdle(page: Page, timeout = 2500) {\n await page.waitForLoadState('domcontentloaded');\n try {\n await page.waitForLoadState('networkidle', { timeout });\n } catch {}\n}\n\nexport async function waitForMeta(page: Page, timeout = 2500) {\n await waitForIdle(page);\n\n page.getByRole('navigation');\n\n await page\n .waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n () => {\n const head = document.head;\n if (!head) return false;\n\n return Boolean(\n document.title.trim() ||\n head.querySelector('meta[property^=\"og:\"]') ||\n head.querySelector('meta[name^=\"twitter:\"]') ||\n head.querySelector('script[type=\"application/ld+json\"]'),\n );\n },\n /* v8 ignore stop */\n { timeout },\n )\n .catch(() => {});\n}\n\n/** Wait until the DOM hasn't changed for `quiet` (default 500ms). */\nexport async function waitForDomIdle(\n page: Page,\n { quiet = 500, timeout = 10_000 }: { quiet?: number; timeout?: number } = {},\n) {\n await page.waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (q) =>\n new Promise<boolean>((resolve) => {\n let last = performance.now();\n\n const obs = new MutationObserver(() => (last = performance.now()));\n obs.observe(document, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n });\n\n const tick = () => {\n if (performance.now() - last >= q) {\n obs.disconnect();\n resolve(true);\n return;\n }\n requestAnimationFrame(tick);\n };\n tick();\n }),\n /* v8 ignore stop */\n quiet,\n { timeout },\n );\n}\n\n// Wait until there are no running Web Animations on the calendar subtree.\n// This helps with libraries that slide months using WAAPI (common in React UI libs).\nexport async function waitForAnimationsToFinish(root: Locator) {\n await root.page().waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (el) => {\n const animations = (el as HTMLElement).getAnimations?.({ subtree: true }) ?? [];\n return animations.every((a) => a.playState !== 'running');\n },\n /* v8 ignore stop */\n await root.elementHandle(),\n );\n\n await root.evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n () => new Promise<void>((r) => requestAnimationFrame(() => requestAnimationFrame(() => r()))),\n );\n}\n\nexport async function waitForUrlChange(page: Page, prevUrl: string, timeout: number) {\n try {\n await page.waitForFunction(\n /* v8 ignore next — callback runs in browser context, not Node */\n (u) => location.href !== u,\n prevUrl,\n { timeout },\n );\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function waitUntilEnabled(page: Page, target: Locator, timeout: number) {\n // Poll for not disabled && aria-disabled != \"true\"\n await target.waitFor({ state: 'attached', timeout }).catch(() => {});\n const handle = await target.elementHandle().catch(() => null);\n if (!handle) return;\n\n await page\n .waitForFunction(\n /* v8 ignore start — callback runs in browser context, not Node */\n (el) => {\n if (!el || !(el as Element).isConnected) return true; // detached → treat as settled\n const aria = (el as HTMLElement).getAttribute('aria-disabled');\n const disabled =\n (el as HTMLButtonElement).disabled ||\n aria === 'true' ||\n (el as HTMLElement).getAttribute('disabled') !== null;\n return !disabled;\n },\n /* v8 ignore stop */\n handle,\n { timeout },\n )\n .catch(() => {});\n}\n\nexport async function waitAfterInteraction(\n page: Page,\n target: Locator,\n opts: { prevUrl?: string; navTimeout?: number; settleTimeout?: number; quietMs?: number } = {},\n) {\n const navTimeout = opts.navTimeout ?? 8_000;\n const settleTimeout = opts.settleTimeout ?? 6_000;\n const quietMs = opts.quietMs ?? 500;\n\n const prevUrl = opts.prevUrl ?? page.url();\n const kind = await elementKind(target).catch(() => 'other');\n\n if (kind === 'link') {\n // SPA or full nav: wait for URL change; if it changed, wait for DOM to settle.\n const urlChanged = await waitForUrlChange(page, prevUrl, navTimeout);\n if (urlChanged) {\n // Avoid 'networkidle' for SPAs with websockets/long-polling.\n await page.waitForLoadState('domcontentloaded').catch(() => {});\n await waitForDomIdle(page, { quiet: quietMs, timeout: navTimeout }).catch(() => {});\n return;\n }\n // Link didn’t navigate (preventDefault, same hash, etc.) → fall back.\n await waitForDomIdle(page, { quiet: quietMs }).catch(() => {});\n return;\n }\n\n if (kind === 'button' && (await target.isDisabled({ timeout: 1_000 }).catch(() => false))) {\n // Buttons often disable during in-flight work, or disappear on success.\n await Promise.race([\n waitUntilEnabled(page, target, settleTimeout).catch(() => {}),\n target.waitFor({ state: 'hidden', timeout: settleTimeout }).catch(() => {}),\n target.waitFor({ state: 'detached', timeout: settleTimeout }).catch(() => {}),\n waitForUrlChange(page, prevUrl, settleTimeout).catch(() => {}),\n ]);\n await sleep(1000); // Grace periode for redirect\n await waitForDomIdle(page, { quiet: quietMs }).catch(() => {});\n return;\n }\n}\n\n/* ---------- helpers ---------- */\n\nasync function elementKind(target: Locator): Promise<'link' | 'button' | 'other'> {\n const PROBE = 1_000;\n const role = await target.getAttribute('role', { timeout: PROBE }).catch(() => null);\n if (role === 'link') return 'link';\n if (role === 'button') return 'button';\n\n const tag = await target\n .evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n (el) => el.tagName.toLowerCase(),\n null,\n { timeout: PROBE },\n )\n .catch(() => '');\n if (tag === 'a') return 'link';\n\n if (tag === 'button') return 'button';\n if (tag === 'input') {\n const type = await target.getAttribute('type', { timeout: PROBE }).catch(() => null);\n if (type === 'button' || type === 'submit' || type === 'reset') return 'button';\n }\n\n return 'other';\n}\n","import { isArray, isDate, isRange, uniqueItem } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { formatDate, formatDateForInput, getMonthNames } from '../utils/date';\nimport { waitForAnimationsToFinish } from '../wait';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype MonthYear = { month: number; year: number };\n\nasync function getDialog(root: Locator, options?: SetOptions) {\n const role = await root.getAttribute('role', options).catch(() => null);\n const hasPopup = await root.getAttribute('aria-haspopup', options).catch(() => null);\n\n if (role !== 'combobox' && !hasPopup) return null;\n\n const ariaControls = await root.getAttribute('aria-controls', options).catch(() => null);\n if (!ariaControls) return null;\n\n const calendar = root.page().locator(`#${ariaControls}`);\n if ((await calendar.count()) === 0) {\n await root.click(options);\n }\n\n const count = await calendar.count();\n return count > 0 ? calendar : null;\n}\n\nasync function isCalendarGrid(grid: Locator): Promise<boolean> {\n const cells = grid.locator('td, [role=\"gridcell\"]');\n const cellCount = await cells.count();\n if (cellCount < 28 || cellCount > 80) return false; // Sanity check\n\n const texts = await cells.allTextContents();\n const days = texts\n .map((t) => t.trim())\n .filter((t) => /^\\d{1,2}$/.test(t))\n .map(Number)\n .filter((n) => n >= 1 && n <= 31);\n\n // Expect sequential numbering from 1 to at least 28. Ignore other cells with other content.\n const last = days.reduce((max, cur) => (cur === max + 1 ? cur : max), 0);\n return last >= 28;\n}\n\nfunction isDayToken(text: string): boolean {\n const day = Number(text.trim());\n return Number.isInteger(day) && day >= 1 && day <= 31;\n}\n\nasync function isStructuralCalendar(root: Locator): Promise<boolean> {\n const candidates = root.locator('button, [role=\"button\"], [tabindex], div, span').filter({ visible: true });\n const count = await candidates.count();\n if (count < 28) return false;\n\n const tokens = (await candidates.allInnerTexts()).map((text) => text.trim()).filter(isDayToken);\n if (tokens.length < 28 || tokens.length > 120) return false;\n\n const daySet = new Set(tokens.map(Number));\n const hasStart = [1, 2, 3, 4, 5, 6, 7].some((day) => daySet.has(day));\n const hasMiddle = [22, 23, 24, 25, 26, 27, 28].some((day) => daySet.has(day));\n\n return daySet.size >= 28 && hasStart && hasMiddle;\n}\n\nfunction dayCellSelector(hasGridCells: boolean): string {\n return hasGridCells\n ? 'td, [role=\"gridcell\"]'\n : 'button, [role=\"button\"], [tabindex], div, span';\n}\n\nexport async function getCalendar(\n root: Locator,\n options?: SetOptions,\n): Promise<{ calendar: Locator; tables: Locator[] } | null> {\n const gridSelector = 'table, [role=\"grid\"]';\n\n // 1. Identify the container (either the root itself or a linked dialog/popup)\n let container: Locator | null =\n (await root.locator(gridSelector).count()) > 0 ? root : await getDialog(root, options);\n\n // Fallback: Check if the root itself is a valid grid (e.g. inline MUI DateCalendar)\n /* v8 ignore start */\n if (!container && (await isCalendarGrid(root))) {\n return { calendar: root, tables: [root] };\n }\n /* v8 ignore stop */\n if (!container && (await isStructuralCalendar(root))) {\n return { calendar: root, tables: [root] };\n }\n if (!container) return null;\n\n // 2. Find all valid calendar grids within the container\n // This handles both <table> and <div role=\"grid\">\n const found = await container.locator(gridSelector).all();\n const tables: Locator[] = [];\n\n // If the container itself matches the selector, check it first\n /* v8 ignore next */\n if (await isCalendarGrid(container)) tables.push(container);\n\n for (const grid of found) {\n if (await isCalendarGrid(grid)) {\n tables.push(grid);\n }\n }\n\n // 3. Deduplicate (prevents issues if container == grid)\n const uniqueTables = tables.filter((t, i, self) => self.indexOf(t) === i);\n\n if (uniqueTables.length > 0) {\n return { calendar: container, tables: uniqueTables };\n }\n\n if (await isStructuralCalendar(container)) {\n return { calendar: container, tables: [container] };\n }\n\n return null;\n}\n\nfunction uniqueMonthYearPairs(pairs: MonthYear[]): MonthYear[] {\n const map = pairs.reduce(\n (acc, r) => acc.set(`${r.year}-${r.month}`, r),\n new Map<string, { month: number; year: number }>(),\n );\n return Array.from(map.values());\n}\n\nfunction inferYearForMonth(target: Date, month: number): number {\n const ty = target.getFullYear();\n const tm = target.getMonth();\n const targetTotal = ty * 12 + tm;\n\n const candidates = [ty - 1, ty, ty + 1].map((y) => ({ year: y, total: y * 12 + month }));\n candidates.sort((a, b) => Math.abs(a.total - targetTotal) - Math.abs(b.total - targetTotal));\n return candidates[0].year;\n}\n\nexport async function getCurrentMonthsAndYears(root: Locator, target: Date): Promise<MonthYear[]> {\n const lang = await root.page().locator('html').getAttribute('lang').catch(() => undefined);\n const locales = lang && !lang.startsWith('en') ? [lang, 'en-US'] : ['en-US'];\n\n const text = await root.innerText();\n const monthSets = locales.map(getMonthNames);\n\n // Look for month year pairs\n const pairs = monthSets.flatMap((months) => {\n const matches = text.matchAll(new RegExp(`(${months.join('|')})\\\\W*(\\\\d{4})`, 'gi'));\n return Array.from(matches)\n .map((m) => ({\n month: months.findIndex((x) => x.toLowerCase() === m[1].toLowerCase()),\n year: Number.parseInt(m[2], 10),\n }))\n .filter((r) => r.month !== -1);\n });\n\n if (pairs.length) {\n return uniqueMonthYearPairs(pairs);\n }\n\n // Fallback looking for months only\n const months = monthSets\n .flatMap((ms) => ms.map((name, i) => (new RegExp(name, 'i').test(text) ? i : -1)))\n .filter(uniqueItem)\n .filter((i) => i >= 0)\n .sort((a, b) => a - b);\n\n const years = (text.match(/\\b20\\d{2}\\b/g) ?? [])\n .map((y) => Number.parseInt(y, 10))\n .filter(uniqueItem)\n .sort((a, b) => a - b);\n\n if (!months.length) return [];\n\n if (years.length === 1) {\n return months.map((month) => ({ month, year: years[0] }));\n }\n\n // Heuristic: months >= July belong to y0 and <= June belongs to y1\n if (years.length === 2) {\n return months\n .map((month) => ({ month, year: month >= 6 ? years[0] : years[1] }))\n .sort((a, b) => a.year * 12 + a.month - (b.year * 12 + b.month));\n }\n\n // Year can't be determined, infer from target date\n return months\n .map((month) => ({ month, year: inferYearForMonth(target, month) }))\n .sort((a, b) => a.year * 12 + a.month - (b.year * 12 + b.month));\n}\n\nasync function navigateToMonth(\n root: Locator,\n target: Date,\n options?: SetOptions & { wait?: number; retry?: number },\n): Promise<boolean> {\n const currentMonths = await getCurrentMonthsAndYears(root, target);\n if (currentMonths.length === 0) return false;\n\n const targetTotal = target.getFullYear() * 12 + target.getMonth();\n if (currentMonths.find((m) => m.year * 12 + m.month === targetTotal)) {\n return true;\n }\n\n const firstMonthTotal = currentMonths[0].year * 12 + currentMonths[0].month;\n const diff = targetTotal - firstMonthTotal;\n\n const prevSelector = [\n '[aria-label*=\"prev\"]',\n '[aria-label*=\"Prev\"]',\n '[aria-label*=\"previous\"]',\n '[aria-label*=\"Previous\"]',\n '[class*=\"prev\"]',\n '[class*=\"Prev\"]',\n '[title*=\"prev\"]',\n '[title*=\"Prev\"]',\n 'button:has-text(\"Previous\")',\n 'button:has-text(\"Prev\")',\n ].join(', ');\n const nextSelector = [\n '[aria-label*=\"next\"]',\n '[aria-label*=\"Next\"]',\n '[class*=\"next\"]',\n '[class*=\"Next\"]',\n '[title*=\"next\"]',\n '[title*=\"Next\"]',\n 'button:has-text(\"Next\")',\n ].join(', ');\n\n const btn = diff < 0 ? root.locator(prevSelector).filter({ visible: true }).first() : root.locator(nextSelector).filter({ visible: true }).first();\n\n if (!(await btn.count())) return false;\n\n for (let i = 0; i < Math.abs(diff); i++) {\n await btn.click(options);\n await root.page().waitForTimeout(options?.wait ?? 50);\n }\n\n await waitForAnimationsToFinish(root);\n\n const afterMonths = await getCurrentMonthsAndYears(root, target);\n if (afterMonths.some((m) => m.year * 12 + m.month === targetTotal)) return true;\n\n if ((options?.retry ?? 0) < 3) {\n const retry = (options?.retry ?? 0) + 1;\n return await navigateToMonth(root, target, { ...options, wait: 50 + 50 * retry, retry }); // Retry max 3x\n }\n\n return false;\n}\n\nasync function setDayByAriaLabel(table: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const formats = ['DD/MM/YYYY', 'MM/DD/YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD'];\n const candidateLabels = [value.toDateString(), ...formats.map((fmt) => formatDate(value, fmt))];\n\n const cells = (\n await Promise.all(\n candidateLabels.map(async (label) => {\n const cell = table.locator(`[aria-label=\"${label}\"], [aria-label*=\"${label}\"]`).first();\n return (await cell.isVisible(options)) ? cell : null;\n }),\n )\n ).filter((l): l is Locator => l !== null);\n\n if (cells.length === 0) return false;\n\n /* v8 ignore start */\n if (cells.length === 1) {\n await cells[0].click(options);\n return true;\n }\n /* v8 ignore stop */\n\n // Disambiguate using day 22 in case of dd/mm/yyyy vs mm/dd/yyyy\n const probeDate = new Date(value.getFullYear(), value.getMonth(), 22);\n const probeResults = await Promise.all(\n formats.map(async (fmt) => {\n const label = formatDate(probeDate, fmt);\n const cell = table.locator(`[aria-label=\"${label}\"], [aria-label*=\"${label}\"]`).first();\n return (await cell.isVisible(options)) ? fmt : null;\n }),\n );\n\n const finalFormat = probeResults.find((fmt) => fmt !== null);\n const finalCell = finalFormat\n ? table\n .locator(`[aria-label=\"${formatDate(value, finalFormat)}\"], [aria-label*=\"${formatDate(value, finalFormat)}\"]`)\n .first()\n : cells[0];\n\n await finalCell.click(options);\n return true;\n}\n\nasync function setDayByByCellText(table: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const day = value.getDate();\n const gridCells = table.locator('td, [role=\"gridcell\"]').filter({ visible: true });\n const hasGridCells = (await gridCells.count()) > 0;\n const cells = table.locator(dayCellSelector(hasGridCells)).filter({ visible: true });\n\n const allTexts = await cells.allInnerTexts();\n const foundIndices = allTexts.map((text, i) => (text.trim() === String(day) ? i : -1)).filter((i) => i !== -1);\n\n if (foundIndices.length === 0) return false;\n\n const ordered =\n foundIndices.length === 1 || day < 15 ? foundIndices : [...foundIndices].reverse();\n\n for (const index of ordered) {\n const cell = cells.nth(index);\n try {\n await cell.click(options);\n return true;\n } catch {\n // If this candidate is not interactable, continue to the next matching day node.\n }\n }\n\n return false;\n}\n\nasync function setDates(calendar: Locator, tables: Locator[], dates: Date[], options?: SetOptions): Promise<void> {\n let method: 'aria' | 'text' | undefined = undefined;\n\n for (const date of dates) {\n if (!(await navigateToMonth(calendar, date, options))) {\n throw new Error(`Failed to navigate to \"${formatDateForInput(date, 'month')}\"`);\n }\n\n const currentMonths = await getCurrentMonthsAndYears(calendar, date);\n const targetTotal = date.getFullYear() * 12 + date.getMonth();\n const tableIndex = currentMonths.findIndex((m) => m.year * 12 + m.month === targetTotal);\n const table = tables[tableIndex] ?? tables[0];\n\n if (method !== 'text' && (await setDayByAriaLabel(table, date, options))) {\n method ??= 'aria';\n continue;\n }\n\n if (method !== 'aria' && (await setDayByByCellText(table, date, options))) {\n method ??= 'text';\n continue;\n }\n\n throw new Error(`Failed to set date \"${formatDateForInput(date, 'date')}\"`);\n }\n}\n\nexport async function setCalendarDate({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n const dates = isArray(value, isDate) ? value : isRange(value) ? [value.from, value.to] : [value];\n\n const { calendar, tables } = (await getCalendar(el, options)) ?? {};\n if (!calendar || !tables || tables.length === 0) return false;\n\n try {\n await setDates(calendar, tables, dates, options);\n } finally {\n // Close the dialog\n if (tag === 'input') {\n await el.page().keyboard.press('Escape').catch();\n await el.blur().catch();\n }\n }\n\n return true;\n}\n","import { isArray, isDate, isRange } from '@letsrunit/utils';\nimport type { Range } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { setCalendarDate } from './calendar';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction toDates(value: Date | Date[] | Range<Date>): Date[] {\n if (isRange(value)) return [value.from, value.to];\n if (isArray(value, isDate)) return value;\n return [value];\n}\n\nfunction formatDate(date: Date, pattern: 'iso' | 'dmy' | 'mdy' | 'ymd'): string {\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n const mm = String(m).padStart(2, '0');\n const dd = String(d).padStart(2, '0');\n\n if (pattern === 'iso' || pattern === 'ymd') return `${y}-${mm}-${dd}`;\n if (pattern === 'dmy') return `${dd}/${mm}/${y}`;\n return `${mm}/${dd}/${y}`;\n}\n\nfunction digits(value: string): number[] {\n return (value.match(/\\d+/g) ?? []).map((v) => Number.parseInt(v, 10));\n}\n\nfunction matchesDateLoosely(value: string, target: Date): boolean {\n const nums = digits(value);\n if (nums.length < 3) return false;\n return nums.includes(target.getFullYear()) && nums.includes(target.getMonth() + 1) && nums.includes(target.getDate());\n}\n\nasync function commitInput(input: Locator, text: string, options?: SetOptions): Promise<string> {\n await input.click(options);\n await input.clear(options);\n await input.fill(text, options);\n await input.press('Enter', options).catch(() => null);\n await input.evaluate((node) => (node as HTMLInputElement).blur(), options).catch(() => null);\n await input.evaluate(() => new Promise(requestAnimationFrame)).catch(() => null);\n return input.inputValue(options).catch(() => '');\n}\n\nasync function setSingleInputDate(input: Locator, value: Date, options?: SetOptions): Promise<boolean> {\n const patterns: Array<'iso' | 'dmy' | 'mdy' | 'ymd'> = ['iso', 'dmy', 'mdy', 'ymd'];\n\n for (const pattern of patterns) {\n const readBack = await commitInput(input, formatDate(value, pattern), options);\n if (matchesDateLoosely(readBack, value)) return true;\n }\n\n return false;\n}\n\nasync function getDateInputs(el: Locator, options?: SetOptions): Promise<Locator[]> {\n const rootTag = await el.evaluate((node) => node.tagName.toLowerCase(), options);\n if (rootTag === 'input') return [el];\n\n const inputs = el.locator('input[type=\"text\"], input:not([type]), input');\n const count = await inputs.count();\n if (count === 0) return [];\n\n const result: Locator[] = [];\n for (let i = 0; i < count; i++) {\n const candidate = inputs.nth(i);\n const visible = await candidate.isVisible(options).catch(() => false);\n if (!visible) continue;\n result.push(candidate);\n }\n return result;\n}\n\nasync function asLoc(el: Locator, options?: SetOptions): Promise<Loc> {\n const tag = await el.evaluate((node) => node.tagName.toLowerCase(), options);\n const type = await el\n .getAttribute('type', options)\n .then((s) => s && s.toLowerCase())\n .catch(() => null);\n return { el, tag, type };\n}\n\nasync function getPickerRootFromInput(input: Locator): Promise<Locator | null> {\n const picker = input\n .locator('xpath=ancestor::*[.//input and .//*[@aria-label=\"calendar\"]][1]')\n .first();\n if ((await picker.count()) > 0) return picker;\n return null;\n}\n\nasync function setByCalendar(input: Locator, date: Date, options?: SetOptions): Promise<boolean> {\n const picker = await getPickerRootFromInput(input);\n if (!picker) return false;\n const pickerLoc = await asLoc(picker, options);\n return setCalendarDate(pickerLoc, date, options);\n}\n\nexport async function setCompositeDate({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n const dates = toDates(value as Date | Date[] | Range<Date>);\n const inputs = await getDateInputs(el, options);\n if (inputs.length === 0) return false;\n\n if (dates.length === 1) {\n const singleInput = await setSingleInputDate(inputs[0], dates[0], options);\n if (singleInput) return true;\n return setByCalendar(inputs[0], dates[0], options);\n }\n\n if (inputs.length < 2) return false;\n\n const first = await setSingleInputDate(inputs[0], dates[0], options);\n const second = await setSingleInputDate(inputs[1], dates[1], options);\n if (first && second) return true;\n\n const firstCal = await setByCalendar(inputs[0], dates[0], options);\n const secondCal = await setByCalendar(inputs[1], dates[1], options);\n return firstCal && secondCal;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nasync function openControl(el: Locator, options?: SetOptions): Promise<void> {\n const activator = el\n .locator('button[aria-haspopup], [role=\"button\"][aria-haspopup], input[readonly]')\n .first();\n if ((await activator.count()) > 0) {\n await activator.click(options);\n return;\n }\n await el.click(options);\n}\n\nfunction getPopupCandidates(page: any): Locator {\n return page.locator(\n [\n '[role=\"listbox\"]:visible',\n '[role=\"menu\"]:visible',\n '[role=\"dialog\"]:visible',\n '[role=\"presentation\"]:visible',\n '.cdk-overlay-pane:visible',\n ].join(', '),\n );\n}\n\nasync function looksLikeCompositeSelect(el: Locator, options?: SetOptions): Promise<boolean> {\n const role = await el.getAttribute('role', options).catch(() => null);\n if (role === 'combobox' || role === 'listbox') return false;\n\n if ((await el.locator('input[type=\"radio\"], input[type=\"checkbox\"]').count()) > 0) return false;\n if ((await el.locator('[role=\"slider\"], [aria-valuenow]').count()) > 0) return false;\n\n const cues = el.locator(\n [\n '[aria-haspopup]',\n '[aria-controls]',\n '[aria-owns]',\n 'input[readonly]',\n 'button[aria-haspopup]',\n ].join(', '),\n );\n return (await cues.count()) > 0;\n}\n\nasync function getOptionFromPopup(popup: Locator, value: string, options?: SetOptions): Promise<Locator | null> {\n const byValue = popup.locator(\n `[value=${JSON.stringify(value)}], [data-value=${JSON.stringify(value)}], [aria-label=${JSON.stringify(value)}]`,\n );\n if ((await byValue.count()) > 0) return byValue.first();\n\n const byRole = popup.getByRole('option', { name: caseInsensitiveExact(value) });\n if ((await byRole.count()) > 0) return byRole.first();\n\n const byText = popup.getByText(caseInsensitiveExact(value), { exact: true });\n if ((await byText.count()) > 0) return byText.first();\n\n return null;\n}\n\nasync function getPopupOptions(popup: Locator): Promise<Locator> {\n return popup.locator(\n [\n '[role=\"option\"]',\n '[title]',\n ].join(', '),\n );\n}\n\nfunction toNumber(value: string | null): number | null {\n if (!value) return null;\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : null;\n}\n\nasync function getContextNumericValue(el: Locator, options?: SetOptions): Promise<number | null> {\n const labelled = el.page().getByLabel('result').first();\n if ((await labelled.count()) > 0) {\n const text = await labelled.textContent(options).catch(() => null);\n const parsed = toNumber(text);\n if (parsed !== null) return parsed;\n }\n return null;\n}\n\nasync function getRootText(el: Locator, options?: SetOptions): Promise<string> {\n return (\n (await el\n .evaluate((node) => (node.textContent ?? '').replace(/\\s+/g, ' ').trim(), options)\n .catch(() => '')) || ''\n );\n}\n\nexport async function setCompositeSelect({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n if (!(await looksLikeCompositeSelect(el, options))) return false;\n\n const stringValue = String(value);\n const before = await getRootText(el, options);\n const popupsBefore = await getPopupCandidates(el.page()).count();\n\n await openControl(el, options);\n\n const popups = await getPopupCandidates(el.page());\n await popups.first().waitFor({ state: 'visible', timeout: options?.timeout }).catch(() => null);\n const count = await popups.count();\n if (count === 0) return false;\n\n const popup = popups.nth(Math.max(0, count - 1));\n const option = await getOptionFromPopup(popup, stringValue, options);\n if (option) {\n await option.click({ ...options, force: true });\n }\n\n const after = await getRootText(el, options);\n if (after && before && after !== before) return true;\n\n const popupsAfter = await getPopupCandidates(el.page()).count();\n if (option && (popupsAfter < popupsBefore || popupsAfter < count)) return true;\n\n const targetNum = toNumber(stringValue);\n if (targetNum === null) return false;\n\n const optionsLoc = await getPopupOptions(popup);\n const totalOptions = await optionsLoc.count();\n if (totalOptions === 0) return false;\n\n const labels: string[] = [];\n for (let i = 0; i < totalOptions; i++) {\n const candidate = optionsLoc.nth(i);\n const label =\n (await candidate.getAttribute('title', options).catch(() => null)) ||\n (await candidate.textContent(options).catch(() => '')) ||\n '';\n const normalized = label.replace(/\\s+/g, ' ').trim();\n if (!normalized) continue;\n if (!labels.includes(normalized)) labels.push(normalized);\n }\n\n for (const label of labels) {\n await openControl(el, options);\n const activePopups = getPopupCandidates(el.page());\n const activePopupCount = await activePopups.count();\n if (activePopupCount === 0) continue;\n const activePopup = activePopups.nth(Math.max(0, activePopupCount - 1));\n\n let candidate = activePopup.locator(`[title=${JSON.stringify(label)}]`).first();\n if ((await candidate.count()) === 0) {\n candidate = activePopup.getByText(caseInsensitiveExact(label), { exact: true }).first();\n }\n if ((await candidate.count()) === 0) continue;\n\n await candidate.click({ ...options, force: true });\n\n const numeric = await getContextNumericValue(el, options);\n if (numeric !== null && Math.abs(numeric - targetNum) < 0.001) return true;\n }\n\n const current = await getContextNumericValue(el, options);\n if (current === null) return false;\n\n await openControl(el, options);\n await el.focus(options).catch(() => null);\n const page = el.page();\n const key = targetNum > current ? 'ArrowDown' : 'ArrowUp';\n\n for (let i = 0; i < 20; i++) {\n await page.keyboard.press(key);\n await page.keyboard.press('Enter');\n const numeric = await getContextNumericValue(el, options);\n if (numeric !== null && Math.abs(numeric - targetNum) < 0.001) return true;\n await openControl(el, options);\n await el.focus(options).catch(() => null);\n }\n\n return false;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function getSliderHandle(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const byAria = el.locator('[aria-valuenow], [role=\"slider\"]').first();\n if ((await byAria.count()) > 0) return byAria;\n\n const focusables = el.locator('[tabindex]');\n if ((await focusables.count()) > 0) return focusables.first();\n\n const buttons = el.locator('button');\n if ((await buttons.count()) > 0) return buttons.first();\n\n return null;\n}\n\nfunction toNumber(value: string | null): number | null {\n if (!value) return null;\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : null;\n}\n\nasync function getValueFromHandle(handle: Locator, options?: SetOptions): Promise<number | null> {\n const fromAria = await handle.getAttribute('aria-valuenow', options).catch(() => null);\n const parsedAria = toNumber(fromAria);\n if (parsedAria !== null) return parsedAria;\n\n const fromText = await handle.textContent(options).catch(() => null);\n return toNumber(fromText);\n}\n\nasync function getValueFromContext(el: Locator, options?: SetOptions): Promise<number | null> {\n const labelled = el.page().getByLabel('result').first();\n if ((await labelled.count()) > 0) {\n const text = await labelled.textContent(options).catch(() => null);\n const parsed = toNumber(text);\n if (parsed !== null) return parsed;\n }\n\n const siblingNumber = await el\n .evaluate((node) => {\n const parent = node.parentElement;\n if (!parent) return null;\n for (const child of Array.from(parent.children)) {\n if (child === node) continue;\n const text = (child.textContent ?? '').trim();\n if (!text) continue;\n const n = Number.parseFloat(text);\n if (Number.isFinite(n)) return n;\n }\n return null;\n }, options)\n .catch(() => null);\n\n return typeof siblingNumber === 'number' ? siblingNumber : null;\n}\n\nasync function readValue(el: Locator, handle: Locator, options?: SetOptions): Promise<number | null> {\n const fromHandle = await getValueFromHandle(handle, options);\n if (fromHandle !== null) return fromHandle;\n return getValueFromContext(el, options);\n}\n\nexport async function setCompositeSlider({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'number') return false;\n\n const handle = await getSliderHandle(el, options);\n if (!handle) return false;\n\n const initial = await readValue(el, handle, options);\n if (initial === null) return false;\n if (Math.abs(initial - value) < 0.001) return true;\n\n await handle.focus(options);\n const page = el.page();\n const key = value > initial ? 'ArrowRight' : 'ArrowLeft';\n const maxPresses = Math.max(1, Math.min(200, Math.abs(Math.round(value - initial)) * 2));\n\n for (let i = 0; i < maxPresses; i++) {\n await page.keyboard.press(key);\n const current = await readValue(el, handle, options);\n if (current !== null && Math.abs(current - value) < 0.001) return true;\n }\n\n const finalValue = await readValue(el, handle, options);\n return finalValue !== null && Math.abs(finalValue - value) < 0.001;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function getToggleTarget(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const candidates = el.locator('button, [role=\"button\"], [role=\"switch\"], [role=\"checkbox\"], [aria-checked], [tabindex]');\n if ((await candidates.count()) === 0) return null;\n\n const visible = candidates.filter({ visible: true });\n if ((await visible.count()) > 0) return visible.first();\n\n return candidates.first();\n}\n\nasync function readToggleState(target: Locator, options?: SetOptions): Promise<boolean | null> {\n const ariaChecked = await target.getAttribute('aria-checked', options).catch(() => null);\n if (ariaChecked === 'true') return true;\n if (ariaChecked === 'false') return false;\n\n const checked = await target.getAttribute('checked', options).catch(() => null);\n if (checked !== null) return checked !== 'false';\n\n const className = await target.getAttribute('class', options).catch(() => null);\n if (className) {\n const lower = className.toLowerCase();\n if (/(^|\\s|-)checked(\\s|$|-)/.test(lower)) return true;\n if (/(^|\\s|-)unchecked(\\s|$|-)/.test(lower)) return false;\n if (/switch/.test(lower)) return /checked/.test(lower);\n }\n\n return null;\n}\n\nexport async function setCompositeToggle({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n\n const target = await getToggleTarget(el, options);\n if (!target) return false;\n\n const initial = await readToggleState(target, options);\n if (initial === null) return false;\n\n const desired = Boolean(value);\n if (initial !== desired) {\n await target.click(options);\n }\n\n const next = await readToggleState(target, options);\n return next === desired;\n}\n","import { diffArray, isRange, type Scalar } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nexport async function clearSelect(el: Locator, opts?: SetOptions) {\n const isMultiple = await el.evaluate((e) => (e as HTMLSelectElement).multiple, opts);\n const options = await el.evaluate(\n (e) =>\n Array.from((e as HTMLSelectElement).options).map((o) => ({\n value: o.value,\n disabled: o.disabled,\n })),\n opts,\n );\n\n if (isMultiple) {\n await el.selectOption([], opts);\n return;\n }\n\n const empty = options.find((o) => o.value === '' && !o.disabled);\n if (empty) {\n await el.selectOption({ value: '' }, opts);\n return;\n }\n\n const firstEnabled = options.find((o) => !o.disabled);\n if (firstEnabled) {\n await el.selectOption({ value: firstEnabled.value }, opts);\n }\n}\n\nasync function multiSelect(el: Locator, value: Scalar[], opts?: SetOptions) {\n const isMultiple = await el.evaluate((e) => (e as HTMLSelectElement).multiple, opts);\n if (!isMultiple) throw new Error('Select is not multiple');\n\n const requested = value.map((v) => String(v));\n const selected = await el.selectOption(requested, opts);\n\n const missing = diffArray(selected, requested);\n if (missing.length > 0) {\n throw new Error(`Options not found in select: ${missing.join(', ')}`);\n }\n}\n\nasync function singleSelect(el: Locator, value: string, opts?: SetOptions) {\n const result = await el.selectOption(value, opts);\n\n if (result.length === 0) {\n throw new Error(`Option \"${value}\" not found in select`);\n }\n}\n\nexport async function selectNative({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (tag !== 'select') return false;\n\n if (value instanceof Date || isRange(value)) {\n return false;\n }\n\n if (value === null) {\n await clearSelect(el, options);\n return true;\n }\n\n if (Array.isArray(value)) {\n if (value.some((v) => v instanceof Date)) return false;\n await multiSelect(el, value, options);\n return true;\n }\n\n await singleSelect(el, String(value), options);\n return true;\n}\n","import type { Locator } from '@playwright/test';\nimport { clearSelect } from './native-select';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype CandidateInfo = {\n el: Locator;\n tag: string;\n type: string | null;\n name: string | null;\n id: string | null;\n ariaLabel: string | null;\n placeholder: string | null;\n min: string | null;\n max: string | null;\n inputMode: string | null;\n attrs: Record<string, string>;\n options: { value: string; text: string }[];\n};\n\ntype Score = { day: number; month: number; year: number };\n\nasync function getCandidateLocs(el: Locator, options?: SetOptions): Promise<CandidateInfo[]> {\n const candidates = await el.locator('input, select').all();\n if (candidates.length < 2 || candidates.length > 3) return [];\n\n return Promise.all(\n candidates.map(async (c) => {\n const info = await c.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement | HTMLSelectElement;\n const attrs: Record<string, string> = {};\n for (const attr of e.attributes) {\n attrs[attr.name] = attr.value;\n }\n\n let options: { value: string; text: string }[] = [];\n if (e.tagName.toLowerCase() === 'select') {\n options = Array.from((e as HTMLSelectElement).options).map((o) => ({\n value: o.value,\n text: o.text,\n }));\n }\n\n return {\n tag: e.tagName.toLowerCase(),\n type: e.getAttribute('type'),\n name: e.getAttribute('name'),\n id: e.getAttribute('id'),\n ariaLabel: e.getAttribute('aria-label'),\n placeholder: e.getAttribute('placeholder'),\n min: e.getAttribute('min'),\n max: e.getAttribute('max'),\n inputMode: e.getAttribute('inputmode'),\n attrs,\n options,\n };\n },\n /* v8 ignore stop */\n options,\n );\n return { el: c, ...info };\n }),\n );\n}\n\nfunction scoreByAttributes(candidateLocs: CandidateInfo[]): Score[] {\n const scores: Score[] = candidateLocs.map(() => ({ day: 0, month: 0, year: 0 }));\n\n candidateLocs.forEach((loc, i) => {\n const text = [loc.name, loc.id, loc.ariaLabel, loc.placeholder, ...Object.values(loc.attrs)]\n .join(' ')\n .toLowerCase();\n\n // 1. Text signals\n if (/\\b(day|dd|d)\\b/i.test(text)) scores[i].day += 5;\n if (/\\b(month|mm|m)\\b/i.test(text)) scores[i].month += 5;\n if (/\\b(year|yyyy|yy|y)\\b/i.test(text)) scores[i].year += 5;\n\n // 2. Attribute signals\n if (loc.max) {\n const max = parseInt(loc.max, 10);\n if (max >= 1 && max <= 31) scores[i].day += 2;\n if (max >= 1 && max <= 12) scores[i].month += 2;\n if (max > 1900) scores[i].year += 2;\n }\n\n if (loc.tag === 'select') {\n if (loc.options.length >= 12 && loc.options.length <= 13) {\n scores[i].month += 3;\n }\n const allNumeric = loc.options.every((o) => !isNaN(parseInt(o.value, 10)) || !o.value);\n if (allNumeric && loc.options.length >= 12 && loc.options.length <= 13) {\n scores[i].month += 2;\n }\n }\n });\n\n return scores;\n}\n\nasync function behavioralProbe(candidateLocs: CandidateInfo[], scores: Score[], options?: SetOptions) {\n const sorted = [...scores].sort((a, b) => Math.max(b.day, b.month, b.year) - Math.max(a.day, a.month, a.year));\n if (sorted[0].day < 2 && sorted[0].month < 2 && sorted[0].year < 2) {\n for (let i = 0; i < candidateLocs.length; i++) {\n const loc = candidateLocs[i];\n if (loc.tag === 'input') {\n const can_be_day = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '31';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_day) scores[i].day += 1;\n\n const cannot_be_day = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '32';\n const valid = !e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (cannot_be_day) scores[i].day += 1;\n\n const can_be_month = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '12';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_month) scores[i].month += 1;\n\n const cannot_be_month = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '13';\n const valid = !e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (cannot_be_month) scores[i].month += 1;\n\n const can_be_year = await loc.el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n (node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '2033';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n },\n /* v8 ignore stop */\n options,\n );\n if (can_be_year) scores[i].year += 1;\n }\n }\n }\n}\n\nfunction applyTieBreakers(candidateLocs: CandidateInfo[], scores: Score[]) {\n // Tie-breaker: typical order D-M-Y or Y-M-D\n if (candidateLocs.length === 3) {\n scores[0].day += 0.1;\n scores[1].month += 0.1;\n scores[2].year += 0.1;\n }\n}\n\nfunction resolveDateFields(\n scores: Score[],\n): { day: number; month: number; year: number } | null {\n const result: { day?: number; month?: number; year?: number } = {};\n const used = new Set<number>();\n\n for (const field of ['year', 'month', 'day'] as const) {\n let bestIdx = -1;\n let bestScore = -1;\n for (let i = 0; i < scores.length; i++) {\n if (!used.has(i) && scores[i][field] > bestScore) {\n bestScore = scores[i][field];\n bestIdx = i;\n }\n }\n if (bestIdx !== -1 && bestScore > 0) {\n result[field] = bestIdx;\n used.add(bestIdx);\n }\n }\n\n if (result.day === undefined || result.month === undefined || result.year === undefined) {\n return null;\n }\n\n return result as { day: number; month: number; year: number };\n}\n\nasync function setMonthField(monthLoc: CandidateInfo, monthVal: number, options?: SetOptions) {\n if (monthLoc.tag === 'select') {\n const options_list = monthLoc.options;\n const valueMatch = options_list.find((o) => parseInt(o.value, 10) === monthVal);\n if (valueMatch) {\n await monthLoc.el.selectOption(valueMatch.value, options);\n } else {\n // Try to match by index (considering common 0-indexed or 1-indexed headers)\n // Usually month selects have 12 or 13 (with placeholder) options\n const offset = options_list.length === 13 ? 1 : 0;\n await monthLoc.el.selectOption({ index: monthVal - 1 + offset }, options);\n }\n } else {\n await monthLoc.el.fill(String(monthVal), options);\n }\n}\n\nasync function clearFields(locs: CandidateInfo[], options?: SetOptions) {\n for (const loc of locs) {\n if (loc.tag === 'select') {\n await clearSelect(loc.el, options);\n } else {\n await loc.el.clear(options);\n }\n }\n}\n\nexport async function setDateGroup({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && value !== null) return false;\n if (tag === 'input' || tag === 'textarea' || tag === 'select') return false;\n\n const candidateLocs = await getCandidateLocs(el, options);\n if (candidateLocs.length === 0) return false;\n\n if (value === null) {\n await clearFields(candidateLocs, options);\n return true;\n }\n\n const scores = scoreByAttributes(candidateLocs);\n await behavioralProbe(candidateLocs, scores, options);\n applyTieBreakers(candidateLocs, scores);\n\n const result = resolveDateFields(scores);\n\n if (!result) {\n const candidatesStr = candidateLocs.map((c) => `${c.tag}[name=${c.name}]`).join(', ');\n throw new Error(`Could not reliably detect date fields for ${tag}. Detected candidates: ${candidatesStr}`);\n }\n\n const dayVal = value.getDate();\n const monthVal = value.getMonth() + 1;\n const yearVal = value.getFullYear();\n\n await candidateLocs[result.day].el.fill(String(dayVal), options);\n await setMonthField(candidateLocs[result.month], monthVal, options);\n await candidateLocs[result.year].el.fill(String(yearVal), options);\n\n return true;\n}\n","import { cartesian, isArray, isDate, isRange, type Range } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\ntype DateOrder = Array<'day' | 'month' | 'year'>;\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction buildDateString(date: Date, order: DateOrder, sep: string, pad: boolean): string {\n const d = date.getDate();\n const m = date.getMonth() + 1;\n const y = date.getFullYear();\n\n const parts: Record<'day' | 'month' | 'year', string> = {\n day: pad ? pad2(d) : String(d),\n month: pad ? pad2(m) : String(m),\n year: String(y),\n };\n\n return order.map((p) => parts[p]).join(sep);\n}\n\nfunction parseDateString(value: string, order: DateOrder, sep: string): Date | null {\n const raw = value.trim();\n if (!raw) return null;\n\n const tokens = raw.split(sep);\n if (tokens.length !== 3) return null;\n\n const nums = tokens.map((t) => Number(t));\n if (nums.some((n) => !Number.isFinite(n))) return null;\n\n const map: Record<'day' | 'month' | 'year', number> = { day: 0, month: 0, year: 0 };\n for (let i = 0; i < 3; i++) map[order[i]] = nums[i];\n\n const year = map.year;\n const month = map.month;\n const day = map.day;\n\n if (month < 1 || month > 12) return null;\n if (day < 1 || day > 31) return null;\n\n const dt = new Date(year, month - 1, day);\n if (dt.getFullYear() !== year || dt.getMonth() !== month - 1 || dt.getDate() !== day) return null;\n\n return dt;\n}\n\nfunction matchesDateLoosely(value: string, date: Date): boolean {\n const digits = (value.match(/\\d+/g) ?? []).map((d) => Number.parseInt(d, 10));\n if (digits.length < 3) return false;\n\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n\n return digits.includes(year) && digits.includes(month) && digits.includes(day);\n}\n\nasync function inferLocaleAndPattern(el: Locator, options?: SetOptions): Promise<{\n locale: string;\n order: DateOrder;\n sep: string;\n}> {\n return el.evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n () => {\n const lang = document.documentElement.getAttribute('lang') || navigator.language || 'en-US';\n const dtf = new Intl.DateTimeFormat(lang, { year: 'numeric', month: '2-digit', day: '2-digit' });\n\n const parts = dtf.formatToParts(new Date(2033, 10, 22)); // 22 Nov 2033, disambiguates day vs month\n const order: Array<'day' | 'month' | 'year'> = [];\n let sep = '/';\n\n for (const p of parts) {\n if (p.type === 'day' || p.type === 'month' || p.type === 'year') order.push(p.type);\n if (p.type === 'literal') {\n const lit = p.value.trim();\n if (lit) sep = lit;\n }\n }\n\n // Fallback if Intl returns something odd\n const finalOrder = order.length === 3 ? order : (['day', 'month', 'year'] as const);\n\n return { locale: lang, order: finalOrder as any, sep };\n },\n /* v8 ignore stop */\n options,\n );\n}\n\nasync function fillAndReadBack(el: Locator, s: string, options?: SetOptions, nextInput?: Locator): Promise<string> {\n await el.clear(options);\n await el.fill(s, options);\n\n if (nextInput) {\n await nextInput.focus(options);\n } else {\n await el.evaluate((el) => el.blur(), options);\n }\n\n // Some frameworks need a tiny tick.\n await el.evaluate(() => new Promise(requestAnimationFrame));\n\n return await el.inputValue(options);\n}\n\nfunction isAmbiguous(value: Date | Date[] | Range<Date>, value2?: Date): boolean {\n if (value2 && value instanceof Date) value = [value, value2];\n return toDateArray(value).every((date) => date.getDate() <= 12);\n}\n\nfunction toDateArray(value: Date | Date[] | Range<Date>): Date[] {\n return isRange(value) ? [value.from, value.to] : isArray(value) ? value : [value];\n}\n\nasync function setDateValue(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n order: DateOrder,\n sep: string,\n pad: boolean,\n options?: SetOptions,\n nextInput?: Locator,\n): Promise<boolean> {\n const dates = toDateArray(value);\n const glue = isRange(value) ? ' - ' : ',';\n\n const s = dates.map((d) => buildDateString(d, order, sep, pad)).join(glue);\n const back = await fillAndReadBack(el, s, options, nextInput);\n if (!back) return false;\n\n const backParts = back.split(glue);\n const failed =\n backParts.length !== dates.length ||\n dates.some((date, i) => {\n const part = backParts[i]?.trim();\n if (!part) return true;\n\n const parsed = parseDateString(part, order, sep);\n if (parsed && sameYMD(parsed, date)) return false;\n\n return !matchesDateLoosely(part, date);\n });\n\n return !failed;\n}\n\nasync function tryProbe(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n order: DateOrder,\n sep: string,\n pad: boolean,\n options?: SetOptions,\n nextInput?: Locator,\n): Promise<boolean | null> {\n const baseDate = isRange(value) ? value.from : isArray(value) ? value[0] : value;\n const y = baseDate.getFullYear();\n const m = baseDate.getMonth();\n const probeMonths = [m, m - 1, m + 1];\n\n for (const month of probeMonths) {\n const probeValue = isRange(value)\n ? { from: new Date(y, month, 22), to: new Date(y, month, 23) }\n : new Date(y, month, 22);\n\n const success = await setDateValue(el, probeValue, order, sep, pad, options, nextInput);\n if (success) return true;\n }\n\n return null;\n}\n\nfunction sameYMD(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nasync function formatCombinations(el: Locator, options?: SetOptions) {\n const { order: localeOrder, sep: localeSep } = await inferLocaleAndPattern(el, options);\n\n const orders: DateOrder[] = [\n localeOrder,\n ['year', 'month', 'day'], // ISO order\n ['day', 'month', 'year'],\n ['month', 'day', 'year'],\n ];\n\n const seenOrders = new Set<string>();\n const uniqueOrders: DateOrder[] = [];\n for (const o of orders) {\n const key = o.join(',');\n if (!seenOrders.has(key)) {\n seenOrders.add(key);\n uniqueOrders.push(o);\n }\n }\n\n const seps = Array.from(new Set([localeSep, '-', '/', '.']));\n const pads = [true, false];\n\n const combinations = cartesian(uniqueOrders, seps, pads);\n\n // Re-order combinations to ensure that locale and iso is second\n const score = ([o, s]: (typeof combinations)[number]) =>\n o.join(s) === localeOrder.join(localeSep) ? 0 : o.join(s) === 'year-month-day'? 1 : 2;\n combinations.sort((a, b) => score(a) - score(b));\n\n return { combinations, localeSep };\n}\n\nasync function setInputValue(\n el: Locator,\n value: Date | Date[] | Range<Date>,\n el2?: Locator,\n value2?: Date,\n options?: SetOptions,\n): Promise<boolean> {\n if (await el.evaluate((el) => (el as HTMLInputElement).readOnly, options)) return false;\n if (el2 && (await el2.evaluate((el) => (el as HTMLInputElement).readOnly, options))) return false;\n\n const { combinations, localeSep } = await formatCombinations(el, options);\n let fallbackMatch: [DateOrder, string, boolean] | null = null;\n\n for (const [order, sep, pad] of combinations) {\n // Optimization: for non-locale separators, only try padded\n if (sep !== localeSep && !pad) continue;\n\n const success = await setDateValue(el, value, order, sep, pad, options, el2);\n if (!success) continue;\n\n if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n if (!success2) continue;\n }\n\n if (!isAmbiguous(value, value2)) return true; // Done\n\n const probeResult = await tryProbe(el, value, order, sep, pad, options, el2);\n\n if (probeResult === true) {\n await setDateValue(el, value, order, sep, pad, options, el2);\n if (el2 && value2) await setDateValue(el2, value2, order, sep, pad, options);\n return true; // Done\n }\n\n // Maybe out of range? Keep as fallback\n if (probeResult === null && !fallbackMatch) fallbackMatch = [order, sep, pad];\n }\n\n if (fallbackMatch) {\n const [order, sep, pad] = fallbackMatch;\n const success = await setDateValue(el, value, order, sep, pad, options, el2);\n\n if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n return success && success2;\n }\n\n return success;\n }\n\n return false;\n}\n\nexport async function setDateTextInput({ el, tag, type }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (!(value instanceof Date) && !isArray(value, isDate) && !isRange(value, isDate)) return false;\n\n if (tag === 'textarea' || tag === 'select') return false;\n\n if (tag !== 'input' && isRange(value, isDate)) {\n const inputs = el.locator('input[type=text], input:not([type])');\n if ((await inputs.count()) === 2) {\n return await setInputValue(inputs.nth(0), value.from, inputs.nth(1), value.to, options);\n }\n }\n\n if (tag === 'input' && type && type !== 'text') return false;\n\n let input = el;\n\n if (tag !== 'input') {\n const inputs = el.locator('input[type=text], input:not([type])');\n if ((await inputs.count()) !== 1) return false;\n input = inputs.nth(0);\n }\n\n return await setInputValue(input, value, undefined, undefined, options);\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setNativeCheckbox({ el, tag, type }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n if (tag === 'select' || tag === 'textarea' || tag === 'button') return false;\n\n let target = el;\n\n if (tag !== 'input' || (type !== 'checkbox' && type !== 'radio')) {\n target = el.locator('input[type=checkbox], input[type=radio]');\n if ((await target.count()) !== 1) return false;\n }\n\n if (value) {\n await target.check(options);\n } else {\n await target.uncheck(options);\n }\n\n return true;\n}\n","import { isDate, isRange, type Range } from '@letsrunit/utils';\nimport { formatDateForInput } from '../utils/date';\nimport type { Loc, SetOptions, Value } from './types';\n\nasync function setSingleDate({ el, tag, type }: Loc, value: Date, options?: SetOptions): Promise<boolean> {\n let target = el;\n let targetType = type;\n\n if (tag !== 'input' || !type || !['date', 'datetime-local', 'month', 'week', 'time'].includes(type)) {\n const inputs = el.locator(\n 'input[type=date], input[type=datetime-local], input[type=month], input[type=week], input[type=time]',\n );\n if ((await inputs.count()) === 1) {\n const isVisible = await inputs.evaluate(\n /* v8 ignore next — callback runs in browser context, not Node */\n (e) => {\n const style = window.getComputedStyle(e);\n return style.display !== 'none' && style.visibility !== 'hidden' && e.getAttribute('type') !== 'hidden';\n },\n );\n if (isVisible) {\n target = inputs;\n targetType = (await target.getAttribute('type', options)) || null;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n if (!targetType) return false;\n\n const val = formatDateForInput(value, targetType);\n await target.fill(val, options);\n\n return true;\n}\n\nasync function setDateRange({ el, tag }: Loc, value: Range<Date>, options?: SetOptions): Promise<boolean> {\n if (tag === 'input' || tag === 'select' || tag === 'textarea' || tag === 'button') return false;\n\n const inputs = el.locator('input[type=date]');\n if ((await inputs.count()) !== 2) return false;\n\n const from = formatDateForInput(value.from, 'date');\n const to = formatDateForInput(value.to, 'date');\n\n await inputs.nth(0).fill(from, options);\n await inputs.nth(1).fill(to, options);\n\n return true;\n}\n\nexport async function setNativeDate(loc: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (value instanceof Date) {\n return await setSingleDate(loc, value, options);\n }\n\n if (isRange(value, isDate)) {\n return await setDateRange(loc, value, options);\n }\n\n return false;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setNativeInput({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (tag !== 'input' && tag !== 'textarea') return false;\n\n if (value === null) {\n await el.clear(options);\n return true;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n await el.fill(String(value), options);\n return true;\n }\n\n return false;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nexport async function setOtpValue({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'string') return false;\n if (tag === 'input' || tag === 'select' || tag === 'button' || tag === 'textarea') return false;\n\n const chars = value.replace(/\\W/g, '').split('');\n if (chars.length < 3 || chars.length > 8) return false;\n\n // Find all text inputs as child of el\n const inputs = await el.locator('input[type=\"text\"], input:not([type])').all();\n\n // Check if the number of input matches the number of characters. If not, return false.\n if (inputs.length !== chars.length) return false;\n\n // Fill out each input with one character.\n for (let i = 0; i < chars.length; i++) {\n await inputs[i].fill(chars[i], options);\n }\n\n return true;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nfunction caseInsensitiveExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^${escaped}$`, 'i');\n}\n\nfunction caseInsensitiveLooseExact(value: string): RegExp {\n const escaped = value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`^\\\\s*${escaped}\\\\s*$`, 'i');\n}\n\nexport async function setRadioGroup(\n { el }: Loc,\n value: Value,\n options?: SetOptions,\n): Promise<boolean> {\n if (typeof value !== 'string' && typeof value !== 'number') return false;\n\n const stringValue = String(value);\n if (stringValue.includes('\\n') || stringValue.includes('\"')) return false;\n\n // 1. Native: exact value attribute\n const radio = el.locator(`input[type=radio][value=\"${stringValue}\"]`);\n if ((await radio.count()) === 1) {\n await radio.check(options);\n return true;\n }\n\n // 2. Native: by label text\n const radioByLabel = el.getByLabel(stringValue, { exact: true }).locator('input[type=radio]');\n if ((await radioByLabel.count()) === 1) {\n await radioByLabel.check(options);\n return true;\n }\n\n // 2b. Native wrappers: label text contains value\n const wrappedRadio = el.locator('label').filter({ hasText: caseInsensitiveLooseExact(stringValue) }).locator('input[type=radio]');\n if ((await wrappedRadio.count()) >= 1) {\n const wrappedLabel = el.locator('label').filter({ hasText: caseInsensitiveLooseExact(stringValue) }).first();\n await wrappedLabel.click({ ...options, force: true });\n return true;\n }\n\n const ariaRadios = el.getByRole('radio');\n const hasAriaRadios = (await ariaRadios.count()) > 0;\n\n // 3. ARIA: by accessible name\n if (hasAriaRadios) {\n const ariaRadioByName = el.getByRole('radio', { name: caseInsensitiveExact(stringValue) });\n if ((await ariaRadioByName.count()) >= 1) {\n const item = ariaRadioByName.first();\n const ariaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaChecked !== 'true') await item.click(options);\n\n const nextAriaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === 'true';\n }\n\n // 4. ARIA: by value-like attributes\n const ariaRadioByValue = el.locator(\n `[role=\"radio\"][value=\"${stringValue}\"], ` +\n `[role=\"radio\"][data-value=\"${stringValue}\"], ` +\n `[role=\"radio\"][aria-label=\"${stringValue}\"]`,\n );\n if ((await ariaRadioByValue.count()) >= 1) {\n const item = ariaRadioByValue.first();\n const ariaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (ariaChecked !== 'true') await item.click(options);\n\n const nextAriaChecked = await item.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === 'true';\n }\n }\n\n // 5. Native: click role radio by accessible name as last resort\n const roleRadio = el.getByRole('radio', { name: caseInsensitiveLooseExact(stringValue) });\n if ((await roleRadio.count()) >= 1) {\n await roleRadio.first().click(options);\n return await roleRadio.first().isChecked(options).catch(() => false);\n }\n\n // 6. Fallback: iterate label text manually\n const labels = el.locator('label');\n const labelCount = await labels.count();\n for (let i = 0; i < labelCount; i++) {\n const label = labels.nth(i);\n const text = (await label.textContent(options).catch(() => ''))?.replace(/\\s+/g, ' ').trim().toLowerCase();\n if (text !== stringValue.trim().toLowerCase()) continue;\n\n await label.click({ ...options, force: true });\n return true;\n }\n\n return false;\n}\n","import type { Locator } from '@playwright/test';\nimport type { Loc, SetOptions, Value } from './types';\n\nexport async function setSliderValue({ el, tag }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'number') return false;\n if (['input', 'select', 'button', 'textarea'].includes(tag)) return false;\n\n const slider = await getSliderElement(el, options);\n if (!slider) return false;\n\n const { min, max, orientation, valuenow: initialValue } = await getSliderAttributes(slider, options);\n if (value < min || value > max) {\n throw new Error(`Value ${value} is out of range [${min}, ${max}]`);\n }\n if (initialValue === null) return false;\n if (initialValue === value) return true;\n\n const { centerX, centerY } = await prepareMouse(slider, options);\n const page = slider.page();\n\n let unresponsive = false;\n try {\n const ratio = await calculateRatio(slider, initialValue, value, centerX, centerY, orientation, options);\n await seekValue(slider, initialValue, value, centerX, centerY, orientation, ratio, options);\n } catch (e) {\n if (e instanceof Error && e.message === 'Slider appears to be disabled or unresponsive') {\n unresponsive = true;\n } else {\n throw e;\n }\n } finally {\n await page.mouse.up();\n }\n\n if (unresponsive) {\n return setSliderByKeyboard(slider, initialValue, value, options);\n }\n\n return true;\n}\n\nasync function prepareMouse(slider: Locator, options?: SetOptions) {\n await slider.scrollIntoViewIfNeeded(options);\n\n const box = await slider.boundingBox(options);\n if (!box) throw new Error('Slider has no bounding box');\n\n // If height/width is 0, we use a small offset to ensure we hit the element's area\n const centerX = box.x + (box.width || 10) / 2;\n const centerY = box.y + (box.height || 10) / 2;\n const page = slider.page();\n\n await page.mouse.move(centerX, centerY);\n await page.mouse.down();\n\n return { centerX, centerY };\n}\n\nasync function seekValue(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n centerX: number,\n centerY: number,\n orientation: string,\n ratio: number,\n options?: SetOptions,\n) {\n const page = slider.page();\n\n for (let i = 0; i < 4; i++) {\n const distance = (targetValue - initialValue) / ratio;\n await moveMouse(page, centerX, centerY, orientation, distance);\n\n const currentValAttr = await slider.getAttribute('aria-valuenow', options);\n const currentVal = parseFloat(currentValAttr || '0');\n if (currentVal === targetValue) break;\n\n if (distance !== 0) {\n const newRatio = (currentVal - initialValue) / distance;\n if (newRatio !== 0) ratio = newRatio;\n }\n }\n}\n\nasync function calculateRatio(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n centerX: number,\n centerY: number,\n orientation: string,\n options?: SetOptions,\n): Promise<number> {\n const page = slider.page();\n const testMove = targetValue > initialValue ? 20 : -20;\n await moveMouse(page, centerX, centerY, orientation, testMove);\n\n const valAfterMoveAttr = await slider.getAttribute('aria-valuenow', options);\n const valAfterMove = parseFloat(valAfterMoveAttr || '0');\n const diff = valAfterMove - initialValue;\n\n if (diff === 0) {\n throw new Error('Slider appears to be disabled or unresponsive');\n }\n\n return diff / testMove;\n}\n\nasync function getSliderElement(el: Locator, options?: SetOptions): Promise<Locator | null> {\n const role = await el.getAttribute('role', options).catch(() => null);\n if (role === 'slider') return el;\n\n const sliderByRole = el.getByRole('slider');\n if ((await sliderByRole.count()) > 0) return sliderByRole.first();\n\n const sliderByAria = el.locator('[aria-valuenow][aria-valuemin][aria-valuemax]');\n if ((await sliderByAria.count()) > 0) return sliderByAria.first();\n\n const sliderByValueNow = el.locator('[aria-valuenow]');\n if ((await sliderByValueNow.count()) > 0) return sliderByValueNow.first();\n\n return null;\n}\n\nasync function getSliderAttributes(slider: Locator, options?: SetOptions) {\n const [minStr, maxStr, orient, nowStr] = await Promise.all([\n slider.getAttribute('aria-valuemin', options),\n slider.getAttribute('aria-valuemax', options),\n slider.getAttribute('aria-orientation', options),\n slider.getAttribute('aria-valuenow', options),\n ]);\n\n return {\n min: parseFloat(minStr || '0'),\n max: parseFloat(maxStr || '100'),\n orientation: orient || 'horizontal',\n valuenow: nowStr !== null ? parseFloat(nowStr) : null,\n };\n}\n\nasync function moveMouse(page: any, centerX: number, centerY: number, orientation: string, distance: number) {\n if (orientation === 'vertical') {\n await page.mouse.move(centerX, centerY - distance);\n } else {\n await page.mouse.move(centerX + distance, centerY);\n }\n}\n\nasync function setSliderByKeyboard(\n slider: Locator,\n initialValue: number,\n targetValue: number,\n options?: SetOptions,\n): Promise<boolean> {\n const stepStr = await slider.getAttribute('aria-valuestep', options).catch(() => null);\n const step = stepStr ? parseFloat(stepStr) : 1;\n const presses = Math.round(Math.abs(targetValue - initialValue) / step);\n const key = targetValue > initialValue ? 'ArrowRight' : 'ArrowLeft';\n\n await slider.focus(options);\n const page = slider.page();\n for (let i = 0; i < presses; i++) {\n await page.keyboard.press(key);\n }\n\n const nowStr = await slider.getAttribute('aria-valuenow', options).catch(() => null);\n const reached = nowStr !== null && Math.abs(parseFloat(nowStr) - targetValue) < 0.001;\n return reached;\n}\n","import type { Loc, SetOptions, Value } from './types';\n\nasync function getToggleTarget(el: Loc['el'], options?: SetOptions): Promise<Loc['el'] | null> {\n const role = await el.getAttribute('role', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n if (role === 'checkbox' || role === 'switch') return el;\n\n const byRole = el.locator('[role=\"switch\"], [role=\"checkbox\"]').first();\n if ((await byRole.count()) > 0) return byRole;\n\n const byState = el.locator('[aria-checked]').first();\n if ((await byState.count()) > 0) return byState;\n\n return null;\n}\n\nexport async function setToggle({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n if (typeof value !== 'boolean' && value !== null) return false;\n\n const target = await getToggleTarget(el, options);\n if (!target) return false;\n\n const ariaChecked = await target.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n const isChecked = ariaChecked === 'true';\n\n if (Boolean(value) !== isChecked) await target.click(options);\n\n const nextAriaChecked = await target.getAttribute('aria-checked', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n );\n return nextAriaChecked === String(Boolean(value));\n}\n","import { chain, isArray, isRange } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { pickFieldElement } from '../utils/pick-field-element';\nimport { selectAria } from './aria-select';\nimport { setCalendarDate } from './calendar';\nimport { setCompositeDate } from './composite-date';\nimport { setCompositeSelect } from './composite-select';\nimport { setCompositeSlider } from './composite-slider';\nimport { setCompositeToggle } from './composite-toggle';\nimport { setDateGroup } from './date-group';\nimport { setDateTextInput } from './date-text-input';\nimport { setNativeCheckbox } from './native-checkbox';\nimport { setNativeDate } from './native-date';\nimport { setNativeInput } from './native-input';\nimport { selectNative } from './native-select';\nimport { setOtpValue } from './otp';\nimport { setRadioGroup } from './radio-group';\nimport { setSliderValue } from './slider';\nimport { setToggle } from './toggle';\nimport type { Loc, SetOptions, Value } from './types';\n\nfunction toString(value: Value): string {\n if (isRange(value)) return `${String(value.from)} - ${String(value.to)}`;\n if (isArray(value)) return value.map((v) => String(v)).join('\\n');\n return String(value);\n}\n\nasync function setFallback({ el }: Loc, value: Value, options?: SetOptions): Promise<boolean> {\n await el.fill(toString(value), options); // Will likely fail, but will have a good error.\n return true;\n}\n\nexport async function setFieldValue(el: Locator, value: Value, options?: SetOptions): Promise<void> {\n const setValue = chain(\n // native\n selectNative,\n selectAria,\n setNativeCheckbox,\n setRadioGroup,\n setNativeDate,\n setNativeInput,\n // aria / components\n setToggle,\n setDateTextInput,\n setDateGroup,\n setCalendarDate,\n setOtpValue,\n setSliderValue,\n // generic non-semantic composite controls\n setCompositeToggle,\n setCompositeSelect,\n setCompositeSlider,\n setCompositeDate,\n // fallback (eg contenteditable or will fail)\n setFallback,\n );\n\n el = await pickFieldElement(el);\n\n const tag = await el.evaluate((e) => e.tagName.toLowerCase(), options);\n const type = (\n await el.getAttribute('type', options).catch(\n /* v8 ignore next — attribute might be missing or element might have detached during the check */\n () => null,\n )\n )?.toLowerCase();\n const loc = { el, tag, type: type || null };\n\n await setValue(loc, value, options);\n}\n","import type { Page } from '@playwright/test';\nimport rehypeFormat from 'rehype-format';\nimport rehypeParse from 'rehype-parse';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\nexport async function formatHtml(page: string | Page) {\n const html = typeof page === 'string' ? page : await page.content();\n\n const file = await unified()\n .use(rehypeParse, { fragment: true })\n .use(rehypeFormat, { indent: 2 }) // collapses existing whitespace and formats nodes\n .use(rehypeStringify)\n .process(html);\n \n return String(file);\n}\n","import { Locator, Page } from '@playwright/test';\nimport { createFallbackLocator } from './fallback-locator';\n\nfunction debug(...args: unknown[]) {\n if (process.env.LETSRUNIT_DEBUG_FUZZY_LOCATOR === '1') {\n // eslint-disable-next-line no-console\n console.log('[fuzzyLocator]', ...args);\n }\n}\n\n/**\n * Locates an element using Playwright selectors, with ordered runtime fallbacks.\n */\nexport async function fuzzyLocator(page: Page, selector: string): Promise<Locator> {\n debug('input selector:', selector);\n const candidates = buildFuzzyCandidates(page, selector);\n debug('enabled fallbacks:', candidates.length > 1 ? String(candidates.length - 1) : '(none)');\n return createFallbackLocator(candidates);\n}\n\nfunction buildFuzzyCandidates(page: Page, selector: string): Locator[] {\n const primary = page.locator(selector);\n const candidates: Array<{ name: string; locator: Locator | null }> = [\n { name: 'relaxNameToHasText', locator: tryRelaxNameToHasText(page, selector) },\n { name: 'tagInsteadOfRole', locator: tryTagInsteadOfRole(page, selector) },\n { name: 'roleNameProximity', locator: tryRoleNameProximity(page, selector) },\n { name: 'fieldAlternative', locator: tryFieldAlternative(page, selector) },\n { name: 'asField', locator: tryAsField(page, selector) },\n ];\n\n const all = [primary];\n for (const candidate of candidates) {\n if (!candidate.locator) continue;\n debug('enabling fallback:', candidate.name, candidate.locator.toString());\n all.push(candidate.locator);\n }\n return all;\n}\n\n// Preserve the selector but relax [name=\"...\"] to [has-text=\"...\"]\n// This keeps all other parts of the selector intact (prefix/suffix, additional filters).\n// Examples:\n// - role=link[name=\"Foo\"] → role=link:has-text=\"Foo\"\n// - css=button[name=\"Save\"i]:visible → css=button:visible:has-text=\"Save\"\n// - [name=\"Hello\"] → :has-text=\"Hello\"\nfunction tryRelaxNameToHasText(page: Page, selector: string): Locator | null {\n const matchAnyNameFull = selector.match(/^(role=.*)\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchAnyNameFull) return null;\n const [, pre, nameText, post] = matchAnyNameFull;\n const containsSelector = `${pre}${post}`;\n return page.locator(containsSelector, { hasText: nameText });\n}\n\n// Try using the tag name for `link`, `button` and `option` instead fo the aria role.\n// This keeps all other parts of the selector intact (prefix/suffix, additional filters).\n// Examples:\n// - role=button[name=\"Foo\"] → css=button:has-text=\"Save\"\nfunction tryTagInsteadOfRole(page: Page, selector: string): Locator | null {\n const matchAnyNameFull = selector.match(/^role=(link|button|option)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchAnyNameFull) return null;\n const [, role, nameText, post] = matchAnyNameFull;\n const tag = role === 'link' ? 'a' : role;\n const containsSelector = `css=${tag}${post}`;\n return page.locator(containsSelector, { hasText: nameText });\n}\n\n// If a role selector with a name filter fails, try proximity-based fallback while\n// preserving the role and any remainder of the selector.\n// Example: role=switch[name=\"Adres tonen\"i] → text=Adres tonen >> xpath=following-sibling::* >> role=switch\nfunction tryRoleNameProximity(page: Page, selector: string): Locator | null {\n const matchRole = selector.match(/^role=(\\w+)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchRole) return null;\n const [, role, name, rest] = matchRole;\n const proximitySelector = `text=${name} >> xpath=following-sibling::* >> role=${role}${rest}`;\n return page.locator(proximitySelector);\n}\n\n// Try alternatives if field is not found\n// field=\"foo\" → #foo > input (only when name is a valid CSS identifier)\nfunction tryFieldAlternative(page: Page, selector: string): Locator | null {\n const matchField = selector.match(/^field=\"([^\"]+)\"i?$/i);\n if (!matchField) return null;\n const [, field] = matchField;\n // Skip if the name contains characters invalid in a CSS ID selector\n if (!/^[a-zA-Z0-9_-]+$/.test(field)) return null;\n return page.locator(`#${field} > input`);\n}\n\n// Try matching using the field selector in case of role mismatch\nfunction tryAsField(page: Page, selector: string): Locator | null {\n const matchRole = selector.match(/^role=(\\w+)\\s*\\[name=\"([^\"]+)\"i?](.*)$/i);\n if (!matchRole) return null;\n\n const [, role, name, rest] = matchRole;\n\n // Only allow ARIA roles that correspond to field-like controls\n const fieldRoles = new Set([\n 'button', // Sometimes used for date pickers or checkboxes\n 'textbox',\n 'searchbox',\n 'combobox',\n 'spinbutton',\n 'slider',\n 'checkbox',\n 'switch',\n 'radio',\n 'radiogroup',\n 'listbox',\n 'option',\n ]);\n\n if (!fieldRoles.has(role.toLowerCase())) return null;\n\n return page.locator(`field=${name}${rest}`);\n}\n","import { JSDOM } from 'jsdom';\nimport type { PageInfo, Snapshot } from './types';\n\nexport function extractPageMetadata(snapshot: Pick<Snapshot, 'url' | 'html'>): Omit<PageInfo, 'screenshot'> {\n const dom = new JSDOM(snapshot.html, { url: snapshot.url });\n const doc = dom.window.document;\n\n return {\n url: resolveCanonicalUrl(doc, snapshot.url),\n name: firstNonEmpty(\n metaContent(doc, 'property', 'og:title'),\n metaContent(doc, 'name', 'twitter:title'),\n doc.title,\n ),\n description: firstNonEmpty(\n metaContent(doc, 'name', 'description'),\n metaContent(doc, 'property', 'og:description'),\n metaContent(doc, 'name', 'twitter:description'),\n ),\n image: resolveUrl(\n snapshot.url,\n firstNonEmpty(\n metaContent(doc, 'property', 'og:image'),\n metaContent(doc, 'name', 'twitter:image'),\n ),\n ),\n logo: resolveUrl(snapshot.url, firstLinkHref(doc, ['link[rel~=\"apple-touch-icon\"]', 'link[rel~=\"icon\"]'])),\n author: firstNonEmpty(metaContent(doc, 'name', 'author')),\n publisher: firstNonEmpty(\n metaContent(doc, 'property', 'article:publisher'),\n metaContent(doc, 'name', 'publisher'),\n metaContent(doc, 'property', 'og:site_name'),\n ),\n lang: firstNonEmpty(doc.documentElement.lang),\n favicon: resolveUrl(snapshot.url, firstLinkHref(doc, ['link[rel~=\"icon\"]', 'link[rel=\"shortcut icon\"]'])),\n };\n}\n\nfunction metaContent(doc: Document, attr: 'name' | 'property', value: string): string | undefined {\n return firstNonEmpty(doc.querySelector(`meta[${attr}=\"${value}\"]`)?.getAttribute('content') ?? undefined);\n}\n\nfunction firstLinkHref(doc: Document, selectors: string[]): string | undefined {\n for (const selector of selectors) {\n const href = firstNonEmpty(doc.querySelector(selector)?.getAttribute('href') ?? undefined);\n if (href) return href;\n }\n\n return undefined;\n}\n\nfunction resolveCanonicalUrl(doc: Document, fallbackUrl: string): string {\n return resolveUrl(fallbackUrl, firstLinkHref(doc, ['link[rel=\"canonical\"]'])) ?? fallbackUrl;\n}\n\nfunction resolveUrl(baseUrl: string, candidate?: string): string | undefined {\n const value = firstNonEmpty(candidate);\n if (!value) return undefined;\n\n try {\n return new URL(value, baseUrl).toString();\n } catch {\n return value;\n }\n}\n\nfunction firstNonEmpty(...values: Array<string | undefined>): string | undefined {\n return values.find((value) => value !== undefined && value.trim() !== '')?.trim();\n}\n","import { hashKey } from '@letsrunit/utils';\nimport type { LocatorScreenshotOptions, Page, PageScreenshotOptions } from '@playwright/test';\n\nexport async function screenshotElement(page: Page, selector: string, options?: LocatorScreenshotOptions): Promise<File> {\n const buffer = await page.locator(selector).first().screenshot(options);\n const filename = await hashKey('screenshot-{hash}.png', buffer);\n\n return new File([new Uint8Array(buffer)], filename, { type: 'image/png' });\n}\n\nexport async function screenshot(page: Page, options?: PageScreenshotOptions): Promise<File> {\n const buffer = options?.mask?.length ? await screenshotWithMask(page, options) : await page.screenshot(options);\n const filename = await hashKey(`screenshot-{hash}.png`, buffer);\n\n return new File([new Uint8Array(buffer)], filename, { type: 'image/png' });\n}\n\nasync function screenshotWithMask(page: Page, options: PageScreenshotOptions): Promise<Buffer> {\n const { mask: locators, ...otherOptions } = options;\n\n if (!locators?.length) throw new Error('No locators specified');\n\n // 1. Inject CSS + overlay\n await page.evaluate(() => {\n const doc = document;\n\n // Inject CSS once\n if (!doc.getElementById('lri-mask-style')) {\n const style = doc.createElement('style');\n style.id = 'lri-mask-style';\n style.textContent = `\n .lri-mask-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.65);\n pointer-events: none;\n z-index: 2147483646;\n }\n .lri-mask-highlight {\n position: relative !important;\n z-index: 2147483647 !important;\n box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.95);\n border-radius: 4px;\n }\n `;\n doc.head.appendChild(style);\n }\n\n if (!doc.getElementById('lri-mask-overlay')) {\n const overlay = doc.createElement('div');\n overlay.id = 'lri-mask-overlay';\n overlay.className = 'lri-mask-overlay';\n doc.body.appendChild(overlay);\n }\n });\n\n // 2. Resolve locators to element handles and add highlight class\n const handleGroups = await Promise.all(locators.map((loc) => loc.elementHandles()));\n const handles = handleGroups.flat();\n\n await Promise.all(\n handles.map((h) =>\n h.evaluate((el) => {\n (el as HTMLElement).classList.add('lri-mask-highlight');\n }),\n ),\n );\n\n try {\n // 3. Take screenshot with overlay in place\n return await page.screenshot(otherOptions);\n } finally {\n // 4. Cleanup: remove classes and overlay (keep CSS optional)\n await Promise.all(\n handles.map((h) =>\n h.evaluate((el) => {\n (el as HTMLElement).classList.remove('lri-mask-highlight');\n }),\n ),\n );\n\n await page.evaluate(() => {\n const overlay = document.getElementById('lri-mask-overlay');\n if (overlay) overlay.remove();\n\n // Optional: remove style as well if you want zero residue\n const style = document.getElementById('lri-mask-style');\n if (style) style.remove();\n });\n }\n}\n","import type { Page } from '@playwright/test';\n\nexport function isPage(page: any): page is Page {\n return typeof page.content === 'function'\n && typeof page.url === 'function'\n && typeof page.screenshot === 'function';\n}\n","import type { Page } from '@playwright/test';\nimport { extractPageMetadata } from './page-metadata';\nimport { screenshot as takeScreenshot } from './screenshot';\nimport type { PageInfo, Snapshot } from './types';\nimport { isPage } from './utils/type-check';\n\ntype PageLike = Page | Partial<Snapshot> & { url: string; html: string };\n\nexport async function extractPageInfo(page: PageLike): Promise<PageInfo> {\n const snapshot = isPage(page)\n ? {\n url: page.url(),\n html: await page.content(),\n screenshot: await takeScreenshot(page),\n }\n : page;\n\n return {\n ...extractPageMetadata(snapshot),\n screenshot: snapshot.screenshot,\n };\n}\n","export const createDateEngine = () => ({\n // Single match (Playwright will call this in some contexts)\n query(root: Element | Document, body: string): Element | null {\n const all = this.queryAll(root, body);\n return all[0] ?? null;\n },\n\n // All matches\n queryAll(root: Element | Document, body: string): Element[] {\n const targetDate = this._parseSelector(body);\n if (!targetDate) return [];\n\n const doc = root instanceof Document ? root : root.ownerDocument || document;\n const locale = doc.documentElement.lang || 'en-US';\n\n const candidates: { el: Element, type: 'full' | 'partial' }[] = [];\n const walker = doc.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null);\n\n let currentNode = walker.nextNode();\n while (currentNode) {\n const el = currentNode as Element;\n const { matched, type } = this._matchesDate(el, targetDate, locale, body);\n if (matched) {\n candidates.push({ el, type });\n }\n currentNode = walker.nextNode();\n }\n\n // Filter to keep only the most specific elements (the ones that don't have matching children)\n // AND prioritize elements that match exactly if multiple are found in a parent-child relationship.\n const results = candidates.filter(c => {\n // If any candidate is a child of el, then el is not the most specific.\n // BUT only if that child matches as much or more than the parent.\n // If the parent is a \"full\" match (with year) and child is only \"partial\", parent might be better.\n const el = c.el;\n const hasMatchingDescendant = candidates.some(other => {\n if (other.el === el || !el.contains(other.el)) return false;\n return !(c.type === 'full' && other.type === 'partial');\n });\n\n return !hasMatchingDescendant;\n\n }).map(c => c.el);\n\n // If no results found, we might want to look at elements whose descendants COLLECTIVELY match.\n // However, textContent already includes descendants.\n // If we have nothing, it might be because specificity filter removed everything.\n // If specificity filter removed something, we should check if we should keep it.\n\n if (results.length === 0 && candidates.length > 0) {\n // Check if we have multiple candidates that together might be why we failed.\n // Actually, let's just return all candidates that don't have matching descendants.\n // (That's what results is supposed to be).\n }\n\n return results;\n },\n\n _parseSelector(body: string): Date | null {\n const now = new Date();\n const trimmed = body.toLowerCase().trim();\n\n if (trimmed === 'today') return now;\n if (trimmed === 'tomorrow') {\n const d = new Date(now);\n d.setDate(d.getDate() + 1);\n return d;\n }\n if (trimmed === 'yesterday') {\n const d = new Date(now);\n d.setDate(d.getDate() - 1);\n return d;\n }\n\n // Relative: \\d+ \\w+ (?:ago|from now)\n const relativeMatch = trimmed.match(/^(\\d+)\\s+(day|month|year)s?\\s+(ago|from now)$/);\n if (relativeMatch) {\n const [_, amount, unit, direction] = relativeMatch;\n const d = new Date(now);\n const sign = direction === 'ago' ? -1 : 1;\n const val = parseInt(amount, 10) * sign;\n\n if (unit === 'day') d.setDate(d.getDate() + val);\n else if (unit === 'month') d.setMonth(d.getMonth() + val);\n else if (unit === 'year') d.setFullYear(d.getFullYear() + val);\n return d;\n }\n\n // \"today at 15:00\"\n const atMatch = trimmed.match(/^(today|tomorrow|yesterday)\\s+at\\s+(\\d{1,2}):(\\d{2})(?::(\\d{2}))?(?:\\s*(am|pm))?$/);\n if (atMatch) {\n const [_, dayStr, hourStr, min, sec, ampm] = atMatch;\n const d = new Date(now);\n if (dayStr === 'tomorrow') d.setDate(d.getDate() + 1);\n if (dayStr === 'yesterday') d.setDate(d.getDate() - 1);\n\n let hour = parseInt(hourStr, 10);\n if (ampm === 'pm' && hour < 12) hour += 12;\n if (ampm === 'am' && hour === 12) hour = 0;\n\n d.setHours(hour, parseInt(min, 10), parseInt(sec || '0', 10), 0);\n return d;\n }\n\n const absDate = new Date(body);\n if (!isNaN(absDate.getTime())) return absDate;\n\n return null;\n },\n\n _matchesDate(el: Element, targetDate: Date, locale: string, body: string): { matched: boolean, type: 'full' | 'partial' } {\n const text = el.textContent?.trim() || '';\n if (!text) return { matched: false, type: 'partial' };\n\n // Normalize text: replace non-breaking spaces, multi-spaces, etc.\n const normalizedText = text.replace(/\\s+/g, ' ').trim();\n const cleanText = normalizedText.toLowerCase().replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, ' ').replace(/\\s+/g, ' ').trim();\n\n const options: Intl.DateTimeFormatOptions[] = [\n { year: 'numeric', month: 'short', day: 'numeric' },\n { year: 'numeric', month: 'long', day: 'numeric' },\n { year: '2-digit', month: 'numeric', day: 'numeric' },\n { year: 'numeric', month: 'numeric', day: 'numeric' },\n { month: 'short', day: 'numeric' },\n { month: 'long', day: 'numeric' },\n ];\n\n let dateMatched = false;\n let matchType: 'full' | 'partial' = 'partial';\n\n for (const opt of options) {\n const formatter = new Intl.DateTimeFormat(locale, opt);\n const formatted = formatter.format(targetDate);\n\n const normalizedFormatted = formatted.replace(/\\s+/g, ' ').trim();\n const cleanFormatted = normalizedFormatted.toLowerCase().replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, ' ').replace(/\\s+/g, ' ').trim();\n\n if (normalizedText.includes(normalizedFormatted) || cleanText.includes(cleanFormatted)) {\n // If it's a numeric match and there's a year, check if the year matches correctly\n if (opt.year && opt.month === 'numeric' && opt.day === 'numeric') {\n const yearVal = targetDate.getFullYear().toString();\n const shortYearVal = yearVal.slice(-2);\n if (!normalizedText.includes(yearVal) && !normalizedText.includes(shortYearVal)) {\n continue;\n }\n }\n\n // If it's a month name match and there's a year, check if the year matches correctly\n if (opt.year && (opt.month === 'short' || opt.month === 'long')) {\n const yearVal = targetDate.getFullYear().toString();\n const otherYearMatch = normalizedText.match(/\\b\\d{4}\\b/g);\n if (otherYearMatch && !otherYearMatch.includes(yearVal)) {\n continue;\n }\n }\n\n dateMatched = true;\n if (opt.year) matchType = 'full';\n break;\n }\n\n // Try with different separators if numeric\n if (opt.month === 'numeric' && opt.day === 'numeric') {\n const parts = formatter.formatToParts(targetDate);\n const day = parts.find(p => p.type === 'day')?.value;\n const month = parts.find(p => p.type === 'month')?.value;\n const year = parts.find(p => p.type === 'year')?.value;\n\n if (day && month) {\n const seps = ['.', '-', '/', ' ', ''];\n const d2 = day.padStart(2, '0');\n const m2 = month.padStart(2, '0');\n\n const dayVariations = Array.from(new Set([day, d2]));\n const monthVariations = Array.from(new Set([month, m2]));\n\n let numericMatched = false;\n for (const sep of seps) {\n for (const d of dayVariations) {\n for (const m of monthVariations) {\n if (year) {\n const y2 = year.slice(-2);\n const yearVariations = Array.from(new Set([year, y2]));\n for (const y of yearVariations) {\n if (normalizedText.includes(`${d}${sep}${m}${sep}${y}`) ||\n normalizedText.includes(`${m}${sep}${d}${sep}${y}`) ||\n normalizedText.includes(`${y}${sep}${m}${sep}${d}`)) {\n numericMatched = true;\n matchType = 'full';\n break;\n }\n }\n }\n if (numericMatched) break;\n // Without year - only if NOT numeric (to avoid matching 2025 as 2026 without year)\n if (normalizedText.includes(`${d}${sep}${m}`) || normalizedText.includes(`${m}${sep}${d}`)) {\n // Only count as partial match if NO year is present in text at all\n if (!normalizedText.match(/\\d{4}/)) {\n numericMatched = true;\n matchType = 'partial';\n }\n }\n }\n if (numericMatched) break;\n }\n if (numericMatched) break;\n }\n if (numericMatched) {\n dateMatched = true;\n break;\n }\n }\n }\n }\n\n if (!dateMatched && normalizedText.includes(targetDate.toISOString().split('T')[0])) {\n dateMatched = true;\n matchType = 'full';\n }\n\n if (!dateMatched) return { matched: false, type: 'partial' };\n\n // If we have a full match (with year), it's strong.\n // If we have a partial match, we only accept it if the query itself doesn't specify a year\n // OR if the year is implicitly current year and the element also lacks it.\n const queryHasYear = body.match(/\\d{4}|'\\d{2}/);\n if (queryHasYear && matchType === 'partial') {\n // If query has year, we NEED year.\n return { matched: false, type: 'partial' };\n }\n\n // Strict year check: if query has year, it MUST match.\n // If query is relative (\"today\"), and element has a year, it MUST match the target year.\n const elementYearMatch = normalizedText.match(/\\b\\d{4}\\b/g);\n if (elementYearMatch && elementYearMatch.some(y => parseInt(y, 10) !== targetDate.getFullYear())) {\n // We only fail if the year found in text is NOT the target year.\n // But wait, what if \"Post date: Jan 4, 2026. Edit date: Jan 5, 2026\"\n // If we are looking for Jan 4, and we match the whole string, it has BOTH 2026.\n // So we should check if ANY of the years match?\n if (!elementYearMatch.includes(targetDate.getFullYear().toString())) {\n return { matched: false, type: 'partial' };\n }\n }\n\n // If query has time, we must also match time\n const queryStr = body.toLowerCase();\n const queryHasTime = queryStr.includes(' at ') || queryStr.includes(':') || (queryStr.includes('am') || queryStr.includes('pm'));\n\n if (queryHasTime) {\n const timeMatch = normalizedText.match(/(\\d{1,2})[:.](\\d{2})(?::(\\d{2}))?\\s*(am|pm|om|u)?/i);\n if (timeMatch) {\n const [_, h, m, s, ampm] = timeMatch;\n let hour = parseInt(h, 10);\n if (ampm?.toLowerCase() === 'pm' && hour < 12) hour += 12;\n if (ampm?.toLowerCase() === 'am' && hour === 12) hour = 0;\n\n if (hour !== targetDate.getHours() || parseInt(m, 10) !== targetDate.getMinutes()) {\n return { matched: false, type: 'full' }; // full because it matched date but wrong time\n }\n if (s && parseInt(s, 10) !== targetDate.getSeconds()) {\n return { matched: false, type: 'full' };\n }\n } else {\n // Query has time but element doesn't?\n // Check if ANY child has time. If we are doing collective matching, the parent should have it.\n return { matched: false, type: 'full' };\n }\n }\n\n return { matched: true, type: matchType };\n },\n});\n","export const createFieldEngine = () => ({\n // Helper: compile matcher from `field=...` body\n _compileMatcher(body: string): (s: string | null | undefined) => boolean {\n const trimmed = body.trim();\n\n // Support /regex/flags\n if (trimmed.startsWith('/') && trimmed.lastIndexOf('/') > 0) {\n const last = trimmed.lastIndexOf('/');\n const pattern = trimmed.slice(1, last);\n const flags = trimmed.slice(last + 1);\n const re = new RegExp(pattern, flags);\n return (s) => !!s && re.test(s);\n }\n\n const sanitize = (s: string) => s\n .toLowerCase()\n .replace(/[^\\w\\s]+/g, '')\n .replace(/\\s{2,}/g, ' ')\n .replace(/\\*\\s*$/, '')\n .trim();\n const needle = sanitize(trimmed.replace(/^\"(.*)\"(i?)$/, '$1'));\n\n return ((s) => !!s && sanitize(s) === needle);\n },\n\n // Single match (Playwright will call this in some contexts)\n query(root: Element | Document, body: string): Element | null {\n const all = this.queryAll(root, body);\n return all[0] ?? null;\n },\n\n // All matches\n queryAll(root: Element | Document, body: string): Element[] {\n const match = this._compileMatcher(body);\n\n // Candidate controls: native fields + common ARIA widgets\n const candidates = Array.from(\n root.querySelectorAll<HTMLElement>(\n [\n 'input',\n 'textarea',\n 'select',\n '[role=\"textbox\"]',\n '[role=\"combobox\"]',\n '[role=\"spinbutton\"]',\n '[role=\"slider\"]',\n '[role=\"switch\"]',\n '[role=\"checkbox\"]',\n '[role=\"radio\"]',\n '[role=\"radiogroup\"]',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n ].join(', '),\n ),\n );\n\n const byId = new Map<string, Element>();\n // Build quick lookup for aria-labelledby resolution\n Array.from(root.querySelectorAll<HTMLElement>('[id]')).forEach((el) => byId.set(el.id, el));\n\n function textFor(el: HTMLElement): string[] {\n const texts: string[] = [];\n\n // 1) Implicit <label> wrapping\n let parent: HTMLElement | null = el.parentElement;\n while (parent) {\n if (parent.tagName === 'LABEL') {\n texts.push(parent.textContent ?? '');\n break;\n }\n parent = parent.parentElement;\n }\n\n // 2) <label for=\"...\">\n let id = (el as HTMLElement).id;\n if (!id) { // support parent div/span id when element lacks one\n const p = el.parentElement as HTMLElement | null;\n if (p && (p.tagName === 'DIV' || p.tagName === 'SPAN') && p.id) {\n id = p.id;\n }\n }\n if (id) {\n const forLabels = Array.from(\n root.querySelectorAll<HTMLLabelElement>(`label[for=\"${CSS.escape(id)}\"]`),\n );\n forLabels.forEach((l) => texts.push(l.textContent ?? ''));\n }\n\n // 3) aria-label\n const ariaLabel = el.getAttribute('aria-label');\n if (ariaLabel) texts.push(ariaLabel);\n\n // 4) aria-labelledby\n const labelledBy = el.getAttribute('aria-labelledby');\n if (labelledBy) {\n const extAriaLabel = labelledBy.split(/\\s+/)\n .map((idref) => byId.get(idref))\n .filter((ref) => !!ref?.textContent.trim())\n .map((ref) => ref!.textContent)\n .join(' ');\n if (extAriaLabel) texts.push(extAriaLabel);\n }\n\n // 5) field name\n const name = el.getAttribute('name');\n if (name) texts.push(name);\n\n // 6) native placeholder on <input>/<textarea>, and some custom widgets mirror it as an attribute\n const ph = (el as HTMLInputElement).placeholder ?? el.getAttribute('placeholder');\n if (ph) texts.push(ph);\n\n // 7) Adjacent sibling <label> (handles <input/><label>Text</label> pattern without for/id)\n for (let sib = el.nextElementSibling; sib; sib = sib.nextElementSibling) {\n if (sib.tagName === 'LABEL') { texts.push(sib.textContent ?? ''); break; }\n }\n for (let sib = el.previousElementSibling; sib; sib = sib.previousElementSibling) {\n if (sib.tagName === 'LABEL') { texts.push(sib.textContent ?? ''); break; }\n }\n\n return texts;\n }\n\n // Filter candidates by label OR placeholder\n return candidates\n .map((el) => ({ el, texts: textFor(el) }))\n .filter(({ texts }) => texts.some(match))\n .map(({ el }) => el);\n },\n});\n","// Conservatively scrub HTML for LLMs while preserving semantics.\n// - Keeps structural tags (header/nav/main/section/article/aside/footer, headings, lists, tables, forms, etc.)\n// - Removes <head>, <script>, <style>, <template>, <noscript>, comments\n// - Drops nodes that are clearly hidden/inert via attributes (hidden, aria-hidden=\"true\", display:none, visibility:hidden, opacity:0)\n// - Strips event handlers (on*) and inline styles, keeps semantic attrs (id, class, role, aria-*, data-*, href, src, alt, etc.)\n// - Collapses whitespace in text nodes (but NOT inside <pre>/<code>)\n// - Does NOT change tag names, does NOT unwrap containers, does NOT reorder content\n\nimport { memoize } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport stringify from 'fast-json-stable-stringify';\nimport { JSDOM } from 'jsdom';\nimport { isPage } from './utils/type-check';\n\nexport type ScrubHtmlOptions = {\n /** Remove nodes that look hidden/inert by attributes. Default: true */\n dropHidden?: boolean;\n /** Remove the entire <head>. Default: true */\n dropHead?: boolean;\n /** Remove <svg> glyphs. Default: false */\n dropSvg?: boolean;\n /** Only keep <main> element. Default: false */\n pickMain?: boolean;\n /** Keep a conservative attribute allowlist (0=none, 1=normal, 2=aggressive). Default: 1 */\n stripAttributes?: 0 | 1 | 2;\n /** Normalize whitespace in text nodes (outside pre/code). Default: true */\n normalizeWhitespace?: boolean;\n /** Remove HTML comments. Default: true */\n dropComments?: boolean;\n /** Replace <br> within headings (h1–h6) with a space. Default: true */\n replaceBrInHeadings?: boolean;\n /** Limit lists to max items: -1 mean no limit. Default: -1 */\n limitLists?: number;\n /** Strip utility-framework classes (Tailwind, Bootstrap, UnoCSS, Windi) from class\n * attributes. Removes the attribute entirely when all classes are stripped. Default: true */\n dropUtilityClasses?: boolean;\n};\n\nconst HTML_MIN_ATTR_THRESHOLD = 250_000; // ~70k tokens\nconst HTML_LIMIT_LISTS_THRESHOLD = 400_000; // ~110k tokens\nconst HTML_MAIN_ONLY_THRESHOLD = 600_000; // ~170k tokens\n\nfunction getDefaults(contentLength: number): Required<ScrubHtmlOptions> {\n return {\n dropHidden: true,\n dropHead: true,\n dropSvg: false,\n pickMain: contentLength >= HTML_MAIN_ONLY_THRESHOLD,\n stripAttributes: contentLength >= HTML_MIN_ATTR_THRESHOLD ? 2 : 1,\n normalizeWhitespace: true,\n dropComments: true,\n replaceBrInHeadings: true,\n limitLists: contentLength >= HTML_LIMIT_LISTS_THRESHOLD ? 20 : -1,\n dropUtilityClasses: true,\n };\n}\n\n// Attributes we keep to preserve semantics and minimal usefulness\nconst ALLOWED_ATTRS = {\n match: new Set([\n // identity/semantics\n 'id',\n 'class',\n 'role',\n // internationalization\n 'lang',\n 'dir',\n\n // anchors & media\n 'href',\n 'title',\n 'target',\n 'rel',\n 'src',\n 'alt',\n 'width',\n 'height',\n 'loading',\n\n // tables\n 'scope',\n 'headers',\n 'colspan',\n 'rowspan',\n\n // forms (pure semantics—doesn’t change structure)\n 'name',\n 'value',\n 'type',\n 'for',\n 'placeholder',\n 'checked',\n 'selected',\n 'multiple',\n 'method',\n 'action',\n\n // time, figure, etc.\n 'datetime',\n ]),\n regexp:/^aria-[\\w-]+|^data-[\\w-]+$/i, // ARIA attributes & data-* attributes\n};\n\nconst ALLOWED_ATTRS_AGGRESSIVE = {\n match: new Set([\n // structuur / algemene selectors\n 'id',\n 'class',\n 'role',\n\n // links / media\n 'href',\n 'src',\n 'alt',\n 'title',\n\n // tables\n 'scope',\n\n // forms / velden\n 'name',\n 'type',\n 'for',\n 'placeholder',\n 'value',\n 'checked',\n 'selected',\n\n // ARIA voor Playwright getByRole/getByLabel\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n\n // veelgebruikte test selectors\n 'data-testid',\n 'data-test-id',\n 'data-cy',\n 'data-qa',\n ]),\n regexp: null,\n};\n\nconst HIDDEN_SELECTORS = [\n '[hidden]',\n '[inert]',\n '[aria-hidden=\"true\"]',\n '[style*=\"display:none\"]',\n '[style*=\"visibility:hidden\"]',\n '[style*=\"opacity:0\"]'\n].join(',');\n\n// Tags that are always removed (infra/noise)\nconst ALWAYS_DROP = [\n 'script', 'style', 'template', 'noscript', 'slot', 'object', 'embed'\n];\n\nexport async function scrubHtml(\n page: { html: string, url: string } | Page,\n opts: ScrubHtmlOptions = {},\n): Promise<string> {\n if (isPage(page)) page = { html: await page.content(), url: page.url() };\n return await memoizedScrubHtml(page, opts);\n}\n\nconst memoizedScrubHtml = memoize(realScrubHtml, {\n max: 16,\n ttl: 10 * 60_000,\n cacheKey: (args) => stringify({ html: args[0].html, url: args[0].url, ...args[1] }),\n});\n\n/**\n * Scrub HTML conservatively for LLMs without destroying semantics.\n */\nexport async function realScrubHtml(\n { html, url }: { html: string, url: string },\n opts: ScrubHtmlOptions = {},\n): Promise<string> {\n const o = { ...getDefaults(html.length), ...opts };\n const htmlForDom = preStripHtmlForJSDOM(html, o.dropHead);\n\n const dom = new JSDOM(htmlForDom, { url });\n const doc = dom.window.document;\n\n if (o.pickMain) pickMain(doc);\n dropInfraAndSvg(doc, Boolean(o.dropSvg));\n if (o.dropHidden) dropHiddenTrees(doc);\n if (o.stripAttributes) stripAttributesAndSanitize(doc, o.stripAttributes);\n if (o.dropComments) dropHtmlComments(doc);\n if (o.replaceBrInHeadings) replaceBrsInHeadings(doc);\n if (o.limitLists >= 0) limitListsAndRows(doc, o.limitLists);\n if (o.dropUtilityClasses) stripUtilityClasses(doc);\n if (o.normalizeWhitespace) normalizeWhitespace(doc.body);\n\n return doc.body.innerHTML;\n}\n\n/* ---------------- helpers ---------------- */\n\nfunction hasHiddenAncestor(el: Element): boolean {\n let p: Element | null = el.parentElement;\n while (p) {\n /* v8 ignore next — JSDOM might not have these attributes/values, but we want to check them if they exist */\n if (p.hasAttribute('hidden') || p.hasAttribute('inert') || p.getAttribute('aria-hidden') === 'true') return true;\n\n const style = p.getAttribute('style') || '';\n if (/\\bdisplay\\s*:\\s*none\\b/i.test(style)) return true;\n if (/\\bvisibility\\s*:\\s*hidden\\b/i.test(style)) return true;\n if (/\\bopacity\\s*:\\s*0(?:\\D|$)/i.test(style)) return true;\n\n p = p.parentElement;\n }\n return false;\n}\n\nfunction normalizeWhitespace(root: Element) {\n const preLike = new Set(['PRE', 'CODE', 'SAMP', 'KBD']);\n const doc = root.ownerDocument!;\n const walker = doc.createTreeWalker(root, 4 /*NodeFilter.SHOW_TEXT*/);\n const changes: Text[] = [];\n\n let node: Node | null;\n\n while ((node = walker.nextNode())) {\n const text = node as Text;\n const parent = text.parentElement;\n if (!parent) continue;\n if (preLike.has(parent.tagName)) continue; // don't touch pre/code\n\n const v = text.nodeValue ?? '';\n const collapsed = v.replace(/\\s+/g, ' ');\n if (collapsed !== v) changes.push(text);\n }\n\n for (const t of changes) {\n // extra trim around block-ish elements\n const parent = t.parentElement!;\n const isBlockish = /^(P|LI|DIV|SECTION|ARTICLE|ASIDE|HEADER|FOOTER|MAIN|NAV|H[1-6]|BLOCKQUOTE|FIGCAPTION|TD|TH)$/i.test(parent.tagName);\n t.nodeValue = (t.nodeValue || '').replace(/\\s+/g, ' ');\n if (isBlockish) t.nodeValue = (t.nodeValue || '').trim();\n }\n}\n\n// Split-out helper steps (top-level, no nested functions)\n\nfunction pickMain(doc: Document): boolean {\n const main = doc.querySelector('main');\n if (!main) return false;\n const clone = main.cloneNode(true);\n doc.body.innerHTML = '';\n doc.body.appendChild(clone);\n return true;\n}\n\nfunction preStripHtmlForJSDOM(html: string, dropHead: boolean): string {\n let out = html;\n if (dropHead) out = out.replace(/<head\\b[\\s\\S]*?<\\/head>/gi, '');\n\n // Prevent jsdom/cssom import-rule recursion while preserving body semantics.\n out = out.replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, '');\n out = out.replace(/<link\\b[^>]*\\brel\\s*=\\s*[\"']?stylesheet[\"']?[^>]*>/gi, '');\n return out;\n}\n\nfunction dropInfraAndSvg(doc: Document, dropSvg: boolean) {\n const toDrop = [...ALWAYS_DROP, dropSvg ? 'svg' : ''].filter(Boolean).join(',');\n if (!toDrop) return;\n doc.querySelectorAll(toDrop).forEach((el) => el.remove());\n}\n\nfunction dropHiddenTrees(doc: Document) {\n doc.querySelectorAll<HTMLElement>(HIDDEN_SELECTORS).forEach((el) => el.remove());\n const all = [...doc.body.querySelectorAll<HTMLElement>('*')];\n for (const el of all) {\n if (!el.isConnected) continue;\n if (hasHiddenAncestor(el)) el.remove();\n }\n}\n\nfunction stripAttributesAndSanitize(doc: Document, level: 0 | 1 | 2) {\n if (!level) return;\n\n const all = [...doc.body.querySelectorAll<HTMLElement>('*')];\n\n for (const el of all) {\n const isSvg = el.namespaceURI === 'http://www.w3.org/2000/svg';\n for (const { name } of [...el.attributes]) {\n const lower = name.toLowerCase();\n if (lower.startsWith('on')) {\n el.removeAttribute(name);\n continue;\n }\n if (lower === 'style') {\n el.removeAttribute(name);\n continue;\n }\n if (isSvg) continue; // keep svg attrs\n const allowed = level === 1 ? ALLOWED_ATTRS : ALLOWED_ATTRS_AGGRESSIVE;\n if (!allowed.match.has(lower) && !allowed.regexp?.test(name)) {\n el.removeAttribute(name);\n }\n }\n }\n\n // sanitize javascript: hrefs\n doc.querySelectorAll('a[href]').forEach((a) => {\n const href = a.getAttribute('href') || '';\n if (/^\\s*javascript:/i.test(href)) a.removeAttribute('href');\n });\n}\n\nfunction dropHtmlComments(doc: Document) {\n const nf = doc.defaultView?.NodeFilter;\n const SHOW_COMMENT = nf?.SHOW_COMMENT ?? 128; // fallback constant\n\n // createTreeWalker expects a NodeFilter mask\n const walker = doc.createTreeWalker(doc, SHOW_COMMENT as unknown as number);\n const toRemove: Comment[] = [];\n let n: Comment | null;\n\n while ((n = walker.nextNode() as Comment | null)) toRemove.push(n);\n toRemove.forEach((c) => c.parentNode?.removeChild(c));\n}\n\nfunction replaceBrsInHeadings(doc: Document) {\n doc.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach((h) => {\n h.querySelectorAll('br').forEach((br) => {\n const space = doc.createTextNode(' ');\n (br as Element).replaceWith(space);\n });\n });\n}\n\n// ---- Utility class detection ----\n\n// Any class containing ':' is a Tailwind/Windi/UnoCSS variant prefix (hover:, sm:, dark:focus:, …)\nconst UTILITY_VARIANT_RE = /:/;\n\n// Prefix-based utility patterns (Tailwind + Bootstrap)\nconst UTILITY_PREFIX_RE = /^-?(?:p[xytblrse]?|m[xytblrse]?|gap|space-[xy]|w|h|min-w|min-h|max-w|max-h|size|basis|inset|top|right|bottom|left|start|end|z|text|bg|border|ring|shadow|outline|fill|stroke|divide|accent|caret|from|via|to|decoration|font|leading|tracking|indent|line-clamp|columns|aspect|object|opacity|rotate|scale|translate|skew|transition|duration|ease|delay|animate|rounded|overflow|overscroll|scroll|snap|touch|cursor|pointer-events|select|resize|flex|grid|col|row|order|auto-cols|auto-rows|items|justify|content|self|place|float|clear|list|whitespace|break|hyphens|mix-blend|bg-blend|backdrop|d|g|fs|fw|lh|align|position)-/i;\n\n// Standalone keywords that are utilities on their own (no suffix)\nconst UTILITY_STANDALONE = new Set([\n 'flex', 'grid', 'block', 'hidden', 'inline', 'inline-block', 'inline-flex', 'inline-grid',\n 'contents', 'flow-root', 'list-item', 'table', 'container', 'truncate',\n 'grow', 'shrink', 'static', 'relative', 'absolute', 'fixed', 'sticky',\n 'visible', 'invisible', 'collapse', 'isolate',\n 'underline', 'overline', 'line-through', 'no-underline',\n 'uppercase', 'lowercase', 'capitalize', 'normal-case',\n 'italic', 'not-italic', 'antialiased', 'subpixel-antialiased',\n 'sr-only', 'not-sr-only', 'clearfix', 'row', 'col',\n]);\n\nconst SPACING_ALPHA_VALUES = new Set(['auto', 'px']);\n\nfunction isSpacingUtility(token: string): boolean {\n const match = token.match(/^-?([mp][xytblrse]?)-(.*)$/i);\n if (!match) return false;\n\n const value = match[2];\n if (!value) return false;\n\n if (/^[0-9./[\\]-]+$/.test(value)) return true;\n if (SPACING_ALPHA_VALUES.has(value.toLowerCase())) return true;\n return false;\n}\n\nfunction isUtilityClass(token: string): boolean {\n if (UTILITY_VARIANT_RE.test(token)) return true;\n const base = token.startsWith('-') ? token.slice(1) : token;\n if (UTILITY_STANDALONE.has(base)) return true;\n if (/^-?[mp][xytblrse]?-/i.test(token)) return isSpacingUtility(token);\n return UTILITY_PREFIX_RE.test(token);\n}\n\nfunction stripUtilityClasses(doc: Document) {\n for (const el of doc.body.querySelectorAll<Element>('[class]')) {\n const kept = [...el.classList].filter((t) => t && !isUtilityClass(t));\n if (kept.length === 0) el.removeAttribute('class');\n else el.setAttribute('class', kept.join(' '));\n }\n}\n\nfunction limitListsAndRows(doc: Document, limit: number) {\n // lists\n doc.querySelectorAll('ul, ol').forEach((list) => {\n const items = Array.from(list.children).filter((c) => c.tagName === 'LI');\n for (let i = limit; i < items.length; i++) items[i].remove();\n });\n\n // table rows\n const rowContainers = doc.querySelectorAll('table, thead, tbody, tfoot');\n rowContainers.forEach((container) => {\n const rows = Array.from(container.children).filter((c) => c.tagName === 'TR');\n for (let i = limit; i < rows.length; i++) rows[i].remove();\n });\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { screenshot } from './screenshot';\nimport { realScrubHtml } from './scrub-html';\nimport type { Snapshot } from './types';\nimport { waitForDomIdle } from './wait';\n\nexport type SnapshotOptions = {\n /** Strip utility-framework classes (Tailwind, Bootstrap, UnoCSS, Windi) from the captured HTML. Default: true. */\n dropUtilityClasses?: boolean;\n};\n\nexport async function snapshot(page: Page, opts: SnapshotOptions = {}): Promise<Snapshot> {\n await sleep(500);\n await waitForDomIdle(page);\n\n const [url, html, file] = await Promise.all([page.url(), getContentWithMarkedHidden(page), screenshot(page)]);\n\n const dropUtilityClasses = opts.dropUtilityClasses ?? true;\n\n const finalHtml = dropUtilityClasses\n ? await realScrubHtml({ html, url }, {\n dropHidden: false, dropHead: false, dropSvg: false, pickMain: false,\n stripAttributes: 0, normalizeWhitespace: false, dropComments: false,\n replaceBrInHeadings: false, limitLists: -1, dropUtilityClasses: true,\n })\n : html;\n\n return { url, html: finalHtml, screenshot: file };\n}\n\nasync function getContentWithMarkedHidden(page: Page): Promise<string> {\n try {\n await page.evaluate(() => {\n const changed: Element[] = [];\n\n // expose undo\n (window as any).__undoAriaHidden = () => {\n for (const el of changed) el.removeAttribute('aria-hidden');\n changed.length = 0;\n delete (window as any).__undoAriaHidden;\n };\n\n const isHidden = (el: Element): boolean => {\n if (el.hasAttribute('hidden')) return true;\n if (el.hasAttribute('inert')) return true;\n if (el.getAttribute('aria-hidden') === 'true') return true;\n\n const cs = getComputedStyle(el as HTMLElement);\n return cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0';\n };\n\n const walk = (el: Element) => {\n if (isHidden(el)) {\n if (!el.hasAttribute('aria-hidden')) {\n el.setAttribute('aria-hidden', 'true');\n changed.push(el);\n }\n return;\n }\n for (const c of el.children) walk(c);\n };\n\n for (const c of document.body.children) walk(c);\n });\n\n return await page.content();\n } finally {\n await page.evaluate(() => (window as any).__undoAriaHidden?.()).catch(() => {});\n }\n}\n","import type { Locator } from '@playwright/test';\n\nexport async function scrollToCenter(locator: Locator) {\n const count = await locator.count();\n if (!count) return;\n\n await locator.evaluate((el) => {\n el.scrollIntoView({ block: 'center', inline: 'center', behavior: 'instant' });\n });\n}\n","const translations = {\n accept: [\n \"Aanvaar\",\n \"Aanvaar alles\",\n \"Stem saam\",\n \"Laat toe\",\n \"Laat alles toe\",\n \"OK\",\n \"Reg so\",\n \"Ek verstaan\",\n \"Gaan voort\",\n \"Stoor en aanvaar\",\n \"Bevestig\"\n ],\n reject: [\n \"Verwerp\",\n \"Verwerp alles\",\n \"Weier\",\n \"Moenie toelaat nie\",\n \"Slegs noodsaaklik\",\n \"Net noodsaaklike koekies\",\n \"Gaan voort sonder koekies\",\n \"Nee dankie\",\n \"Moenie aanvaar nie\",\n \"Weier alles\"\n ],\n close: [\n \"Sluit\",\n \"Kanselleer\",\n \"Maak toe\",\n \"Verwyder\",\n \"Nie nou nie\",\n \"Nee dankie\",\n \"Later\",\n \"×\",\n \"Slaan oor\",\n \"Maak venster toe\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"موافق\", \"أوافق\", \"قبول\", \"قبول الكل\", \"الموافقة على الكل\", \"السماح\", \"حسنًا\", \"تم\", \"تمام\", \"متابعة\", \"تابع\", \"حفظ والموافقة\", \"حفظ والقبول\"],\n reject: [\"رفض\", \"رفض الكل\", \"عدم الموافقة\", \"عدم السماح\", \"الضرورية فقط\", \"الأساسية فقط\", \"المتابعة بدون ملفات تعريف الارتباط\", \"الاستمرار بدون ملفات تعريف الارتباط\", \"لا شكرًا\", \"لا، شكرًا\"],\n close: [\"إغلاق\", \"إلغاء\", \"تجاهل\", \"ليس الآن\", \"لا شكرًا\", \"لاحقًا\", \"×\", \"إخفاء\", \"تخطي\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Qəbul et\",\n \"Hamısını qəbul et\",\n \"Razıyam\",\n \"Təsdiq et\",\n \"İcazə ver\",\n \"Hamısına icazə ver\",\n \"OK\",\n \"Oldu\",\n \"Başa düşdüm\",\n \"Anladım\",\n \"Davam et\",\n \"Saxla və qəbul et\"\n ],\n reject: [\n \"Rədd et\",\n \"Hamısını rədd et\",\n \"İmtina et\",\n \"İcazə vermə\",\n \"Yalnız zəruri kukilər\",\n \"Yalnız zəruri\",\n \"Kukilərsiz davam et\",\n \"Heç birinə icazə vermə\",\n \"Qəbul etmirəm\",\n \"Yox, sağ olun\"\n ],\n close: [\n \"Bağla\",\n \"Ləğv et\",\n \"Geri\",\n \"Keç\",\n \"İndi yox\",\n \"Sonra\",\n \"Yox, sağ olun\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Приеми\", \"Приеми всички\", \"Съгласявам се\", \"Съгласен съм\", \"Разреши\", \"Разреши всички\", \"ОК\", \"Добре\", \"Разбрах\", \"Продължи\", \"Запази и приеми\", \"Да, приемам\"],\n reject: [\"Откажи\", \"Откажи всички\", \"Отказвам\", \"Отхвърли\", \"Само необходимите\", \"Само задължителните\", \"Само основните\", \"Продължи без бисквитки\", \"Не, благодаря\", \"Забрани\", \"Забрани всички\", \"Не позволявам\"],\n close: [\"Затвори\", \"Отказ\", \"Отмени\", \"Скрий\", \"Не сега\", \"По-късно\", \"Не, благодаря\", \"Готово\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"স্বীকার করুন\",\n \"সব স্বীকার করুন\",\n \"সম্মতি দিচ্ছি\",\n \"সম্মত\",\n \"অনুমতি দিন\",\n \"সব অনুমতি দিন\",\n \"ঠিক আছে\",\n \"বোঝা গেল\",\n \"চালিয়ে যান\",\n \"সংরক্ষণ করে স্বীকার\",\n \"সেভ করে চালিয়ে যান\",\n \"আমি রাজি\"\n ],\n reject: [\n \"প্রত্যাখ্যান করুন\",\n \"সব প্রত্যাখ্যান করুন\",\n \"নামঞ্জুর\",\n \"অনুমতি দেব না\",\n \"শুধু প্রয়োজনীয়\",\n \"শুধুমাত্র দরকারি\",\n \"কুকি ছাড়াই চালিয়ে যান\",\n \"না, ধন্যবাদ\",\n \"না\",\n \"সম্মতি দিচ্ছি না\"\n ],\n close: [\n \"বন্ধ করুন\",\n \"বাতিল\",\n \"ক্যান্সেল\",\n \"এখন নয়\",\n \"পরে\",\n \"না, ধন্যবাদ\",\n \"দেখেছি\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Prihvati\", \"Prihvati sve\", \"Slažem se\", \"Dozvoli\", \"Dozvoli sve\", \"U redu\", \"OK\", \"Razumijem\", \"Nastavi\", \"Sačuvaj i prihvati\", \"Potvrdi\", \"Prihvati i nastavi\"],\n reject: [\"Odbij\", \"Odbij sve\", \"Ne prihvatam\", \"Ne dozvoli\", \"Samo neophodni\", \"Samo obavezni\", \"Nastavi bez kolačića\", \"Ne, hvala\", \"Onemogući sve\"],\n close: [\"Zatvori\", \"Otkaži\", \"Odustani\", \"Odbaci\", \"Ne sada\", \"Ne, hvala\", \"Kasnije\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Acceptar\",\n \"Acceptar-ho tot\",\n \"D'acord\",\n \"Permetre\",\n \"Permetre-ho tot\",\n \"OK\",\n \"Entesos\",\n \"Ho entenc\",\n \"Continuar\",\n \"Desa i accepta\",\n \"Sí, accepto\"\n ],\n reject: [\n \"Rebutjar\",\n \"Rebutjar-ho tot\",\n \"Denegar\",\n \"No permetre\",\n \"Només les necessàries\",\n \"Només essencials\",\n \"Continuar sense galetes\",\n \"No, gràcies\",\n \"Desactivar totes\",\n \"Continuar sense acceptar\"\n ],\n close: [\n \"Tancar\",\n \"Cancel·lar\",\n \"Descartar\",\n \"Ara no\",\n \"No, gràcies\",\n \"Més tard\",\n \"×\",\n \"Tanca la finestra\",\n \"Ometre\",\n \"Fer-ho més tard\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Přijmout\", \"Přijmout vše\", \"Souhlasím\", \"Povolit\", \"Povolit vše\", \"OK\", \"Rozumím\", \"Pokračovat\", \"Uložit a přijmout\", \"Potvrdit\"],\n reject: [\"Odmítnout\", \"Odmítnout vše\", \"Nesouhlasím\", \"Nepovolovat\", \"Pouze nezbytné\", \"Jen nezbytné\", \"Pouze nutné cookies\", \"Pouze základní\", \"Pokračovat bez cookies\", \"Ne, díky\"],\n close: [\"Zavřít\", \"Zrušit\", \"Skrýt\", \"Ne teď\", \"Později\", \"Ne, díky\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"accepter\",\n \"accepter alle\",\n \"accepter alle cookies\",\n \"godkend\",\n \"tillad\",\n \"tillad alle\",\n \"ok\",\n \"okay\",\n \"forstået\",\n \"fortsæt\",\n \"gå videre\",\n \"gem og accepter\",\n \"gem indstillinger\",\n \"accepter valg\"\n ],\n reject: [\n \"afvis\",\n \"afvis alle\",\n \"afvis alle cookies\",\n \"afslå\",\n \"tillad ikke\",\n \"kun nødvendige\",\n \"kun nødvendige cookies\",\n \"kun påkrævede\",\n \"fortsæt uden cookies\",\n \"nej tak\",\n \"begræns til nødvendige\"\n ],\n close: [\n \"luk\",\n \"annuller\",\n \"skjul\",\n \"ikke nu\",\n \"nej tak\",\n \"senere\",\n \"×\",\n \"måske senere\",\n \"luk besked\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Akzeptieren\",\n \"Alle akzeptieren\",\n \"Zustimmen\",\n \"Ich stimme zu\",\n \"Erlauben\",\n \"Alle erlauben\",\n \"Zulassen\",\n \"Alles zulassen\",\n \"OK\",\n \"Okay\",\n \"Verstanden\",\n \"Weiter\",\n \"Speichern & akzeptieren\",\n \"Speichern und fortfahren\",\n \"Alles klar\"\n ],\n reject: [\n \"Ablehnen\",\n \"Alle ablehnen\",\n \"Nicht erlauben\",\n \"Nicht zustimmen\",\n \"Nur notwendige\",\n \"Nur notwendige Cookies\",\n \"Nur essenzielle\",\n \"Nur erforderliche\",\n \"Ohne Cookies fortfahren\",\n \"Nein danke\",\n \"Zugriff verweigern\",\n \"Ablehnen und schließen\"\n ],\n close: [\n \"Schließen\",\n \"Abbrechen\",\n \"Ausblenden\",\n \"Jetzt nicht\",\n \"Nein danke\",\n \"Später\",\n \"×\",\n \"Fenster schließen\",\n \"Verwerfen\",\n \"Zurück\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Αποδοχή\",\n \"Αποδοχή όλων\",\n \"Συμφωνώ\",\n \"Εντάξει\",\n \"ΟΚ\",\n \"Το κατάλαβα\",\n \"Συνέχεια\",\n \"Επιτρέπω\",\n \"Επιτρέπω όλα\",\n \"Αποθήκευση και αποδοχή\",\n \"Προχώρησε\"\n ],\n reject: [\n \"Απόρριψη\",\n \"Απόρριψη όλων\",\n \"Άρνηση\",\n \"Μη αποδοχή\",\n \"Μόνο τα απαραίτητα\",\n \"Μόνο τα αναγκαία\",\n \"Συνέχεια χωρίς cookies\",\n \"Χωρίς cookies\",\n \"Όχι, ευχαριστώ\"\n ],\n close: [\n \"Κλείσιμο\",\n \"Κλείσε\",\n \"Άκυρο\",\n \"Ακύρωση\",\n \"Παράβλεψη\",\n \"Όχι τώρα\",\n \"Αργότερα\",\n \"Επιστροφή\",\n \"×\",\n \"Χ\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"accept\", \"accept all\", \"agree\", \"allow\", \"allow all\", \"ok\", \"okay\", \"got it\", \"continue\", \"save & accept\"],\n reject: [\"reject\", \"reject all\", \"decline\", \"deny\", \"only necessary\", \"necessary only\", \"only essential\", \"essential only\", \"continue without cookies\", \"no thanks\"],\n close: [\"close\", \"cancel\", \"dismiss\", \"not now\", \"no thanks\", \"later\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Aceptar\", \"Aceptar todo\", \"Estoy de acuerdo\", \"Permitir\", \"Permitir todo\", \"OK\", \"De acuerdo\", \"Entendido\", \"Continuar\", \"Guardar y aceptar\", \"Sí, acepto\"],\n reject: [\"Rechazar\", \"Rechazar todo\", \"Denegar\", \"No permitir\", \"Solo las necesarias\", \"Solo lo esencial\", \"Continuar sin cookies\", \"No, gracias\", \"Seguir sin aceptar\", \"No aceptar\"],\n close: [\"Cerrar\", \"Cancelar\", \"Descartar\", \"Ahora no\", \"No, gracias\", \"Más tarde\", \"×\", \"Omitir\", \"Ignorar\", \"Volver\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Nõustun\", \"Olen nõus\", \"Luba kõik\", \"Luba\", \"OK\", \"Olgu\", \"Sain aru\", \"Jätka\", \"Salvesta ja nõustu\", \"Kinnita\"],\n reject: [\"Keeldu\", \"Keeldu kõigist küpsistest\", \"Ära luba\", \"Ainult vajalikud\", \"Vaid hädavajalikud\", \"Jätka ilma küpsisteta\", \"Ei, aitäh\", \"Ära salvesta\"],\n close: [\"Sulge\", \"Tühista\", \"Loobu\", \"Mitte praegu\", \"Ei, aitäh\", \"Hiljem\", \"Pane kinni\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Onartu\", \"Guztiak onartu\", \"Ados\", \"Baimendu\", \"Guztiak baimendu\", \"Ulertuta\", \"Jarraitu\", \"Onartzen dut\", \"Gorde eta onartu\", \"OK\"],\n reject: [\"Ez onartu\", \"Guztiak ukatu\", \"Ukatu\", \"Ez baimendu\", \"Ezeztatu\", \"Beharrezkoak bakarrik\", \"Funtsezkoak bakarrik\", \"Cookie-rik gabe jarraitu\", \"Onartu gabe jarraitu\", \"Ez, eskerrik asko\"],\n close: [\"Itxi\", \"Ezeztatu\", \"Baztertu\", \"Orain ez\", \"Ez, eskerrik asko\", \"Geroago\", \"Utzi\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"پذیرفتن\", \"پذیرفتن همه\", \"قبول می‌کنم\", \"موافقم\", \"اجازه می‌دهم\", \"باشه\", \"تأیید\", \"ادامه\", \"ذخیره و پذیرش\", \"تأیید و ادامه\"],\n reject: [\"رد کردن\", \"رد همه\", \"عدم پذیرش\", \"اجازه نمی‌دهم\", \"فقط ضروری‌ها\", \"فقط موارد لازم\", \"ادامه بدون کوکی\", \"بدون کوکی ادامه بده\", \"نه، ممنون\", \"نمی‌خواهم\", \"نپذیرفتن\"],\n close: [\"بستن\", \"لغو\", \"انصراف\", \"الان نه\", \"فعلاً نه\", \"بعداً\", \"×\", \"بازگشت\", \"خروج\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Hyväksy\",\n \"Hyväksy kaikki\",\n \"Salli\",\n \"Salli kaikki\",\n \"OK\",\n \"Okei\",\n \"Selvä\",\n \"Jatka\",\n \"Tallenna ja hyväksy\",\n \"Suostun\",\n \"Vahvista\"\n ],\n reject: [\n \"Hylkää\",\n \"Hylkää kaikki\",\n \"Kieltäydy\",\n \"Älä salli\",\n \"Vain välttämättömät\",\n \"Vain pakolliset\",\n \"Jatka ilman evästeitä\",\n \"Ei kiitos\",\n \"Estä\",\n \"Älä hyväksy\"\n ],\n close: [\n \"Sulje\",\n \"Peruuta\",\n \"Piilota\",\n \"Ei nyt\",\n \"Ei kiitos\",\n \"Myöhemmin\",\n \"Valmis\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accepter\",\n \"Tout accepter\",\n \"J'accepte\",\n \"Autoriser\",\n \"Tout autoriser\",\n \"OK\",\n \"D'accord\",\n \"Compris\",\n \"Continuer\",\n \"Enregistrer et accepter\",\n \"Valider\",\n \"Accepter et continuer\"\n ],\n reject: [\n \"Refuser\",\n \"Tout refuser\",\n \"Je refuse\",\n \"Refuser tout\",\n \"N'autoriser que l'essentiel\",\n \"Essentiels uniquement\",\n \"Uniquement le nécessaire\",\n \"Continuer sans cookies\",\n \"Non merci\",\n \"Ne pas autoriser\",\n \"Refuser et continuer\"\n ],\n close: [\n \"Fermer\",\n \"Annuler\",\n \"Ignorer\",\n \"Pas maintenant\",\n \"Non merci\",\n \"Plus tard\",\n \"×\",\n \"Fermer la fenêtre\",\n \"Masquer\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Glac\",\n \"Glac leis\",\n \"Glac le gach rud\",\n \"Aontaím\",\n \"Ceadaigh\",\n \"Ceadaigh gach rud\",\n \"OK\",\n \"Ceart go leor\",\n \"Tuigim\",\n \"Lean ar aghaidh\",\n \"Sábháil agus glac\"\n ],\n reject: [\n \"Diúltaigh\",\n \"Diúltaigh gach rud\",\n \"Diúltaím\",\n \"Ná glac\",\n \"Ná ceadaigh\",\n \"Na cinn riachtanacha amháin\",\n \"Gan ach na riachtanacha\",\n \"Lean ar aghaidh gan fhianáin\",\n \"Gan fhianáin\",\n \"Níl, go raibh maith agat\"\n ],\n close: [\n \"Dún\",\n \"Cealaigh\",\n \"Cuir ar ceal\",\n \"Scoir\",\n \"Ná bac leis\",\n \"Ní anois\",\n \"Níos déanaí\",\n \"Ar ball\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"אשר\",\n \"אשר הכל\",\n \"מסכים\",\n \"אני מסכים\",\n \"אפשר\",\n \"אפשר הכל\",\n \"בסדר\",\n \"אוקיי\",\n \"הבנתי\",\n \"המשך\",\n \"שמור ואשר\",\n \"שמור והמשך\",\n \"קבל הכל\"\n ],\n reject: [\n \"דחה\",\n \"דחה הכל\",\n \"סרב\",\n \"אל תאשר\",\n \"אל תאפשר\",\n \"רק הכרחי\",\n \"הכרחי בלבד\",\n \"המשך ללא קובצי Cookie\",\n \"המשך בלי עוגיות\",\n \"לא תודה\",\n \"אל תשמור\",\n \"בטל הסכמה\"\n ],\n close: [\n \"סגור\",\n \"סגירה\",\n \"בטל\",\n \"ביטול\",\n \"לא עכשיו\",\n \"מאוחר יותר\",\n \"אחר כך\",\n \"×\",\n \"סגור חלון\",\n \"חזרה\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"स्वीकार करें\",\n \"सभी स्वीकार करें\",\n \"मैं सहमत हूँ\",\n \"अनुमति दें\",\n \"सभी को अनुमति दें\",\n \"ठीक है\",\n \"जारी रखें\",\n \"स्वीकार करके आगे बढ़ें\",\n \"सहेजें और स्वीकारें\",\n \"हाँ\"\n ],\n reject: [\n \"अस्वीकार करें\",\n \"सभी अस्वीकार करें\",\n \"इंकार करें\",\n \"अनुमति न दें\",\n \"केवल आवश्यक\",\n \"सिर्फ आवश्यक\",\n \"केवल आवश्यक कुकीज़\",\n \"कुकीज़ के बिना जारी रखें\",\n \"नहीं, धन्यवाद\",\n \"स्वीकार न करें\"\n ],\n close: [\n \"बंद करें\",\n \"रद्द करें\",\n \"खारिज करें\",\n \"अभी नहीं\",\n \"नहीं, धन्यवाद\",\n \"बाद में\",\n \"×\",\n \"वापस\",\n \"बाहर निकलें\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Prihvati\", \"Prihvati sve\", \"Slažem se\", \"Dopusti\", \"Dopusti sve\", \"U redu\", \"OK\", \"Razumijem\", \"Nastavi\", \"Spremi i prihvati\", \"Spremi postavke\", \"Potvrdi\"],\n reject: [\"Odbij\", \"Odbij sve\", \"Odbijam\", \"Ne prihvaćam\", \"Ne dopuštam\", \"Samo nužni\", \"Samo osnovno\", \"Nastavi bez kolačića\", \"Bez dodatnih kolačića\", \"Ne, hvala\"],\n close: [\"Zatvori\", \"Odustani\", \"Odbaci\", \"Zanemari\", \"Ne sada\", \"Ne, hvala\", \"Kasnije\", \"×\", \"Zatvori prozor\", \"Zatvori obavijest\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Elfogadom\", \"Mindet elfogadom\", \"Hozzájárulok\", \"Engedélyezem\", \"Összes elfogadása\", \"Összes engedélyezése\", \"OK\", \"Oké\", \"Értettem\", \"Tovább\", \"Rendben\", \"Beállítások mentése\", \"Mentés és elfogadom\"],\n reject: [\"Elutasítom\", \"Mindet elutasítom\", \"Nem fogadom el\", \"Nem engedélyezem\", \"Csak a szükségeseket\", \"Csak a nélkülözhetetlenek\", \"Csak alapbeállítások\", \"Csak kötelezők\", \"Folytatás sütik nélkül\", \"Köszönöm, nem\", \"Nem kérem\"],\n close: [\"Bezárás\", \"Bezár\", \"Mégse\", \"Most nem\", \"Nem most\", \"Később\", \"Nem kérem\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Ընդունել\", \"Ընդունել բոլորը\", \"Համաձայն եմ\", \"Թույլատրել\", \"Թույլատրել բոլորը\", \"Լավ\", \"OK\", \"Հասկացա\", \"Շարունակել\", \"Պահպանել և ընդունել\", \"Հաստատել\"],\n reject: [\"Մերժել\", \"Մերժել բոլորը\", \"Չեմ համաձայնվում\", \"Չթույլատրել\", \"Միայն անհրաժեշտը\", \"Միայն էականը\", \"Միայն պարտադիրները\", \"Շարունակել առանց քուքիների\", \"Ոչ, շնորհակալություն\"],\n close: [\"Փակել\", \"Չեղարկել\", \"Անտեսել\", \"Ոչ հիմա\", \"Ոչ, շնորհակալություն\", \"Հետո\", \"Փակել պատուհանը\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Setuju\", \"Setujui semua\", \"Terima\", \"Terima semua\", \"Izinkan\", \"Izinkan semua\", \"OK\", \"Oke\", \"Baik\", \"Saya mengerti\", \"Lanjutkan\", \"Simpan & setujui\", \"Simpan pengaturan\"],\n reject: [\"Tolak\", \"Tolak semua\", \"Jangan izinkan\", \"Hanya yang diperlukan\", \"Esensial saja\", \"Yang penting saja\", \"Lanjut tanpa cookie\", \"Tidak, terima kasih\"],\n close: [\"Tutup\", \"Batal\", \"Abaikan\", \"Tidak sekarang\", \"Nanti saja\", \"Lewati dulu\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Samþykkja\", \"Samþykkja allt\", \"Ég samþykki\", \"Leyfa\", \"Leyfa allt\", \"Allt í lagi\", \"Í lagi\", \"OK\", \"Skil\", \"Halda áfram\", \"Vista og samþykkja\", \"Staðfesta\", \"Samþykkja og halda áfram\"],\n reject: [\"Hafna\", \"Hafna öllu\", \"Neita\", \"Neita öllum\", \"Leyfi ekki\", \"Aðeins nauðsynlegar\", \"Einungis nauðsynlegar\", \"Halda áfram án vafrakaka\", \"Engar vafrakökur\", \"Nei, takk\"],\n close: [\"Loka\", \"Hætta við\", \"Hunsa\", \"Ekki núna\", \"Nei, takk\", \"Síðar\", \"Seinna\", \"×\", \"Loka glugga\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Aceptar\", \"Aceptar todo\", \"Estoy de acuerdo\", \"Permitir\", \"Permitir todo\", \"OK\", \"Vale\", \"Entendido\", \"Continuar\", \"Guardar y aceptar\", \"Aceptar y continuar\", \"Sí, acepto\"],\n reject: [\"Rechazar\", \"Rechazar todo\", \"Declinar\", \"Denegar\", \"Solo necesarias\", \"Solo lo esencial\", \"Continuar sin cookies\", \"No, gracias\", \"Rechazar opcionales\", \"No aceptar\", \"Usar solo las imprescindibles\"],\n close: [\"Cerrar\", \"Cancelar\", \"Descartar\", \"Ahora no\", \"No, gracias\", \"Más tarde\", \"×\", \"Omitir\", \"Volver\", \"Cerrar ventana\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"同意する\", \"すべて同意\", \"許可する\", \"すべて許可\", \"OK\", \"はい\", \"わかりました\", \"続行\", \"同意して続行\", \"保存して同意\", \"保存して続行\"],\n reject: [\"拒否する\", \"すべて拒否\", \"同意しない\", \"許可しない\", \"必須のみ\", \"必要最低限のみ\", \"必要なもののみ許可\", \"同意せずに続行\", \"Cookieなしで続行\", \"今回は見送る\"],\n close: [\"閉じる\", \"キャンセル\", \"今はしない\", \"後で\", \"×\", \"スキップ\", \"取り消し\", \"今はやめておく\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"ვეთანხმები\",\n \"მიღება\",\n \"დადასტურება\",\n \"დაშვება\",\n \"ყველაფრის მიღება\",\n \"ყველას დაშვება\",\n \"კარგი\",\n \"გასაგებია\",\n \"გაგრძელება\",\n \"შენახვა და თანხმობა\",\n \"შენახვა და მიღება\"\n ],\n reject: [\n \"უარყოფა\",\n \"ყველაფრის უარყოფა\",\n \"უარის თქმა\",\n \"არ დავუშვა\",\n \"მხოლოდ აუცილებელი\",\n \"მხოლოდ აუცილებელი ქუქი-ფაილები\",\n \"გაგრძელება ქუქი-ფაილების გარეშე\",\n \"არა, მადლობა\"\n ],\n close: [\n \"დახურვა\",\n \"გაუქმება\",\n \"დამალვა\",\n \"ახლა არა\",\n \"არა, მადლობა\",\n \"მოგვიანებით\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"동의\", \"모두 동의\", \"허용\", \"전체 허용\", \"확인\", \"알겠습니다\", \"계속\", \"동의하고 계속\", \"저장하고 동의\", \"적용\"],\n reject: [\"거부\", \"모두 거부\", \"동의 안 함\", \"허용 안 함\", \"필수만 허용\", \"필수 항목만\", \"쿠키 없이 계속\", \"건너뛰기\", \"괜찮습니다\"],\n close: [\"닫기\", \"취소\", \"숨기기\", \"지금은 안 함\", \"나중에\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Sutinku\", \"Leisti\", \"Leisti viską\", \"Gerai\", \"Supratau\", \"Tęsti\", \"Patvirtinti\", \"Išsaugoti ir sutikti\", \"OK\"],\n reject: [\"Atmesti\", \"Atmesti visus\", \"Atsisakyti\", \"Neleisti\", \"Tik būtini slapukai\", \"Tik esminiai slapukai\", \"Tęsti be slapukų\", \"Ne, ačiū\"],\n close: [\"Uždaryti\", \"Užverti\", \"Atšaukti\", \"Ne dabar\", \"Vėliau\", \"Ačiū, ne\", \"Grįžti\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Piekrītu\",\n \"Pieņemt\",\n \"Pieņemt visu\",\n \"Atļaut\",\n \"Atļaut visu\",\n \"Labi\",\n \"OK\",\n \"Sapratu\",\n \"Turpināt\",\n \"Apstiprināt\",\n \"Apstiprināt izvēli\",\n \"Saglabāt un piekrist\",\n \"Saglabāt iestatījumus\"\n ],\n reject: [\n \"Noraidīt\",\n \"Noraidīt visu\",\n \"Nepiekrist\",\n \"Neatļaut\",\n \"Neatļaut nevienu\",\n \"Tikai nepieciešamās\",\n \"Tikai būtiskās sīkdatnes\",\n \"Turpināt bez sīkdatnēm\",\n \"Nē, paldies\",\n \"Aizliegt\",\n \"Atteikties\"\n ],\n close: [\n \"Aizvērt\",\n \"Aizvērt logu\",\n \"Atcelt\",\n \"Nerādīt tagad\",\n \"Ne tagad\",\n \"Nē, paldies\",\n \"Vēlāk\",\n \"×\",\n \"Aizvērt paziņojumu\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accepteren\",\n \"Alles accepteren\",\n \"Ik ga akkoord\",\n \"Toestaan\",\n \"Alles toestaan\",\n \"OK\",\n \"Oké\",\n \"Begrepen\",\n \"Doorgaan\",\n \"Opslaan en accepteren\",\n \"Akkoord\",\n \"Verder\",\n \"Ja, prima\"\n ],\n reject: [\n \"Weigeren\",\n \"Alles weigeren\",\n \"Afwijzen\",\n \"Niet toestaan\",\n \"Alleen noodzakelijke cookies\",\n \"Alleen essentiële cookies\",\n \"Alleen strikt noodzakelijke cookies\",\n \"Verder zonder cookies\",\n \"Nee, bedankt\",\n \"Alleen functioneel\",\n \"Minimale instellingen\"\n ],\n close: [\n \"Sluiten\",\n \"Annuleren\",\n \"Afbreken\",\n \"Niet nu\",\n \"Nee, bedankt\",\n \"Later\",\n \"×\",\n \"Terug\",\n \"Venster sluiten\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Godta\",\n \"Godta alle\",\n \"Aksepter\",\n \"Aksepter alle\",\n \"Tillat\",\n \"Tillat alle\",\n \"OK\",\n \"Greit\",\n \"Forstått\",\n \"Fortsett\",\n \"Gå videre\",\n \"Lagre og godta\",\n \"Lagre og aksepter\",\n \"Jeg samtykker\",\n \"Bekreft\"\n ],\n reject: [\n \"Avslå\",\n \"Avslå alle\",\n \"Avvis\",\n \"Avvis alle\",\n \"Ikke tillat\",\n \"Kun nødvendige\",\n \"Bare nødvendige\",\n \"Kun essensielle\",\n \"Kun nødvendige informasjonskapsler\",\n \"Fortsett uten informasjonskapsler\",\n \"Fortsett uten cookies\",\n \"Nei takk\"\n ],\n close: [\n \"Lukk\",\n \"Avbryt\",\n \"Skjul\",\n \"Ikke nå\",\n \"Nei takk\",\n \"Senere\",\n \"Tilbake\",\n \"Lukk uten å lagre\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Akceptuję\",\n \"Akceptuję wszystkie\",\n \"Zgadzam się\",\n \"Zezwól\",\n \"Zezwól na wszystkie\",\n \"OK\",\n \"Okej\",\n \"Rozumiem\",\n \"Kontynuuj\",\n \"Zapisz i zaakceptuj\",\n \"Potwierdź\"\n ],\n reject: [\n \"Odrzuć\",\n \"Odrzuć wszystkie\",\n \"Nie zgadzam się\",\n \"Odmów\",\n \"Tylko niezbędne\",\n \"Wyłącznie niezbędne\",\n \"Kontynuuj bez zgody\",\n \"Kontynuuj bez plików cookie\",\n \"Nie, dziękuję\",\n \"Zabroń\"\n ],\n close: [\n \"Zamknij\",\n \"Anuluj\",\n \"Ukryj\",\n \"Nie teraz\",\n \"Nie, dziękuję\",\n \"Później\",\n \"×\",\n \"Zamknij okno\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Aceitar\",\n \"Aceitar tudo\",\n \"Concordo\",\n \"Permitir\",\n \"Permitir tudo\",\n \"OK\",\n \"Percebi\",\n \"Entendi\",\n \"Continuar\",\n \"Guardar e aceitar\",\n \"Aceitar e continuar\",\n \"Concordar e prosseguir\"\n ],\n reject: [\n \"Rejeitar\",\n \"Rejeitar tudo\",\n \"Recusar\",\n \"Não permitir\",\n \"Apenas o necessário\",\n \"Só o essencial\",\n \"Apenas cookies essenciais\",\n \"Continuar sem cookies\",\n \"Continuar sem aceitar\",\n \"Não, obrigado\"\n ],\n close: [\n \"Fechar\",\n \"Cancelar\",\n \"Dispensar\",\n \"Agora não\",\n \"Não, obrigado\",\n \"Mais tarde\",\n \"Voltar\",\n \"Fechar janela\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Accept\",\n \"Accept toate\",\n \"Sunt de acord\",\n \"Permite\",\n \"Permite tot\",\n \"OK\",\n \"În regulă\",\n \"Am înțeles\",\n \"Continuă\",\n \"Salvează și acceptă\",\n \"De acord\",\n \"Accept cookie‑urile\"\n ],\n reject: [\n \"Refuz\",\n \"Refuz toate\",\n \"Respinge\",\n \"Nu permit\",\n \"Doar necesare\",\n \"Numai esențiale\",\n \"Continuă fără cookie‑uri\",\n \"Nu, mulțumesc\",\n \"Respinge opționale\",\n \"Dezactivează tot\"\n ],\n close: [\n \"Închide\",\n \"Anulează\",\n \"Renunță\",\n \"Nu acum\",\n \"Nu, mulțumesc\",\n \"Mai târziu\",\n \"×\",\n \"Închide fereastra\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Принять\", \"Принять все\", \"Согласиться\", \"Разрешить\", \"Разрешить все\", \"ОК\", \"Хорошо\", \"Понятно\", \"Продолжить\", \"Сохранить и принять\", \"Сохранить выбор\"],\n reject: [\"Отклонить\", \"Отклонить все\", \"Отказаться\", \"Запретить\", \"Только необходимые\", \"Только обязательные\", \"Только строго необходимые\", \"Продолжить без файлов cookie\", \"Не принимать\", \"Нет, спасибо\"],\n close: [\"Закрыть\", \"Отмена\", \"Скрыть\", \"Не сейчас\", \"Нет, спасибо\", \"Позже\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Súhlasím\", \"Súhlasím so všetkým\", \"Prijať\", \"Prijať všetko\", \"Povoliť\", \"Povoliť všetko\", \"OK\", \"Dobre\", \"Rozumiem\", \"Pokračovať\", \"Uložiť a prijať\", \"Súhlasím s cookies\"],\n reject: [\"Odmietnuť\", \"Odmietnuť všetko\", \"Nesúhlasím\", \"Nepovoliť\", \"Len nevyhnutné\", \"Iba nevyhnutné\", \"Len základné\", \"Pokračovať bez cookies\", \"Nie, ďakujem\", \"Bez ďalších cookies\"],\n close: [\"Zavrieť\", \"Zrušiť\", \"Skryť\", \"Teraz nie\", \"Neskôr\", \"Nie, ďakujem\", \"Späť\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Sprejmi\", \"Sprejmi vse\", \"Strinjam se\", \"Dovoli\", \"Dovoli vse\", \"V redu\", \"OK\", \"Razumem\", \"Nadaljuj\", \"Shrani in sprejmi\", \"Potrdi\", \"Shrani nastavitve\"],\n reject: [\"Zavrni\", \"Zavrni vse\", \"Ne sprejemam\", \"Ne dovoli\", \"Samo nujno\", \"Le nujni piškotki\", \"Nadaljuj brez piškotkov\", \"Ne, hvala\", \"Onemogoči vse\", \"Zavrni neobvezne\"],\n close: [\"Zapri\", \"Prekliči\", \"Ne zdaj\", \"Kasneje\", \"×\", \"Skrij\", \"Zapri obvestilo\", \"Nazaj\", \"Zapri okno\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Godkänn\",\n \"Godkänn alla\",\n \"Acceptera\",\n \"Acceptera alla\",\n \"Jag samtycker\",\n \"Tillåt\",\n \"Tillåt alla\",\n \"OK\",\n \"Okej\",\n \"Jag förstår\",\n \"Fortsätt\",\n \"Spara och godkänn\",\n \"Bekräfta\",\n \"Gå vidare\",\n \"Klart\"\n ],\n reject: [\n \"Avvisa\",\n \"Avvisa alla\",\n \"Avböj\",\n \"Neka\",\n \"Neka alla\",\n \"Endast nödvändiga\",\n \"Enbart nödvändiga\",\n \"Fortsätt utan kakor\",\n \"Nej tack\",\n \"Avstå\"\n ],\n close: [\n \"Stäng\",\n \"Avbryt\",\n \"Stäng fönster\",\n \"Inte nu\",\n \"Nej tack\",\n \"Senare\",\n \"Hoppa över\",\n \"Tillbaka\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Kubali\", \"Kubali yote\", \"Ruhusu\", \"Ruhusu yote\", \"Sawa\", \"Sawa sawa\", \"Nimeelewa\", \"Endelea\", \"Hifadhi na kubali\", \"Nakubali\"],\n reject: [\"Kataa\", \"Kataa yote\", \"Usiruhusu\", \"Usikubali\", \"Muhimu tu\", \"Ya lazima pekee\", \"Endelea bila vidakuzi\", \"Hapana, asante\"],\n close: [\"Funga\", \"Ghairi\", \"Ondoa\", \"Puuza\", \"Tupilia mbali\", \"Si sasa\", \"Baadaye\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"ஏற்கவும்\", \"அனைத்தையும் ஏற்கவும்\", \"உடன்படுகிறேன்\", \"அனுமதிக்கவும்\", \"அனைத்தையும் அனுமதிக்கவும்\", \"சரி\", \"ஓகே\", \"புரிந்தது\", \"தொடரவும்\", \"சேமித்து ஏற்கவும்\"],\n reject: [\"நிராகரிக்கவும்\", \"அனைத்தையும் நிராகரிக்கவும்\", \"மறுக்கவும்\", \"அனுமதிக்க வேண்டாம்\", \"தேவையானவை மட்டும்\", \"முக்கியமானவை மட்டும்\", \"குக்கீகள் இல்லாமல் தொடரவும்\", \"இல்லை, நன்றி\"],\n close: [\"மூடவும்\", \"ரத்து செய்யவும்\", \"தவிர்க்கவும்\", \"இப்போது வேண்டாம்\", \"இல்லை, நன்றி\", \"பின்னர்\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"ยอมรับ\",\n \"ยอมรับทั้งหมด\",\n \"เห็นด้วย\",\n \"อนุญาต\",\n \"อนุญาตทั้งหมด\",\n \"ตกลง\",\n \"โอเค\",\n \"รับทราบ\",\n \"ดำเนินการต่อ\",\n \"บันทึกและยอมรับ\",\n \"บันทึกการตั้งค่าและยอมรับ\",\n \"ยืนยัน\"\n ],\n reject: [\n \"ปฏิเสธ\",\n \"ปฏิเสธทั้งหมด\",\n \"ไม่ยอมรับ\",\n \"ไม่อนุญาต\",\n \"เฉพาะคุกกี้ที่จำเป็น\",\n \"ใช้เฉพาะที่จำเป็น\",\n \"ไปต่อโดยไม่ใช้คุกกี้\",\n \"ไม่ ขอบคุณ\",\n \"ข้าม\"\n ],\n close: [\n \"ปิด\",\n \"ยกเลิก\",\n \"ปิดหน้าต่าง\",\n \"ปิดการแจ้งเตือน\",\n \"ยังไม่ใช่ตอนนี้\",\n \"ไว้ทีหลัง\",\n \"ทีหลัง\",\n \"×\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Tanggapin\", \"Tanggapin lahat\", \"Sumang-ayon\", \"Payagan\", \"Payagan lahat\", \"OK\", \"Okay\", \"Sige\", \"Naintindihan\", \"Magpatuloy\", \"I-save at tanggapin\"],\n reject: [\"Tanggihan\", \"Tanggihan lahat\", \"Huwag payagan\", \"Kinakailangan lang\", \"Mga kinakailangan lang\", \"Mahahalaga lang\", \"Magpatuloy nang walang mga cookie\", \"Hindi, salamat\", \"Huwag na lang\"],\n close: [\"Isara\", \"Kanselahin\", \"Isantabi\", \"Hindi ngayon\", \"Huwag muna\", \"Mamaya\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"Kabul et\",\n \"Tümünü kabul et\",\n \"Onayla\",\n \"İzin ver\",\n \"Tümüne izin ver\",\n \"Anladım\",\n \"Devam et\",\n \"Kaydet ve kabul et\",\n \"Ayarları kaydet\",\n \"Kabul ediyorum\"\n ],\n reject: [\n \"Reddet\",\n \"Tümünü reddet\",\n \"Kabul etmiyorum\",\n \"İzin verme\",\n \"Yalnızca gerekli olanlar\",\n \"Sadece zorunlu olanlar\",\n \"Gerekli olanlarla devam et\",\n \"Çerez olmadan devam et\",\n \"Çerezsiz devam et\",\n \"Hayır, teşekkürler\",\n \"Yalnızca zorunlu çerezlere izin ver\"\n ],\n close: [\n \"Kapat\",\n \"İptal\",\n \"Vazgeç\",\n \"Şimdilik değil\",\n \"Daha sonra\",\n \"Geri\",\n \"Pencereyi kapat\",\n \"×\",\n \"X\",\n \"Tamam\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Прийняти\", \"Прийняти все\", \"Погодитися\", \"Дозволити\", \"Дозволити все\", \"ОК\", \"Добре\", \"Зрозуміло\", \"Продовжити\", \"Зберегти та прийняти\", \"Підтвердити\", \"Так\", \"Гаразд\", \"Далі\"],\n reject: [\"Відхилити\", \"Відхилити все\", \"Відмовитися\", \"Не приймати\", \"Не дозволяти\", \"Лише необхідні\", \"Тільки необхідні\", \"Лише обов’язкові\", \"Продовжити без файлів cookie\", \"Без файлів cookie\", \"Ні, дякую\"],\n close: [\"Закрити\", \"Скасувати\", \"Закрити вікно\", \"Не зараз\", \"Пізніше\", \"Пропустити\", \"Готово\", \"×\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\n \"قبول کریں\",\n \"سب قبول کریں\",\n \"قبول ہے\",\n \"میں متفق ہوں\",\n \"اجازت دیں\",\n \"تمام کی اجازت دیں\",\n \"ٹھیک ہے\",\n \"اوکے\",\n \"جاری رکھیں\",\n \"آگے بڑھیں\",\n \"محفوظ کریں اور قبول کریں\",\n \"ہاں\"\n ],\n reject: [\n \"رد کریں\",\n \"سب رد کریں\",\n \"انکار کریں\",\n \"اجازت نہ دیں\",\n \"صرف ضروری\",\n \"صرف لازمی\",\n \"صرف بنیادی\",\n \"کوکیز کے بغیر جاری رکھیں\",\n \"نہیں، شکریہ\",\n \"قبول نہیں\",\n \"منع کریں\",\n \"اختیارات محدود کریں\"\n ],\n close: [\n \"بند کریں\",\n \"منسوخ کریں\",\n \"خارج کریں\",\n \"ابھی نہیں\",\n \"بعد میں\",\n \"نہیں، شکریہ\",\n \"×\",\n \"واپس\",\n \"چھپائیں\"\n ]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"Đồng ý\", \"Tôi đồng ý\", \"Chấp nhận\", \"Chấp nhận tất cả\", \"Cho phép\", \"Cho phép tất cả\", \"OK\", \"Đã hiểu\", \"Tiếp tục\", \"Lưu và chấp nhận\"],\n reject: [\"Từ chối\", \"Từ chối tất cả\", \"Không đồng ý\", \"Không cho phép\", \"Chỉ bắt buộc\", \"Chỉ cho phép cần thiết\", \"Tiếp tục mà không cần cookie\", \"Không, cảm ơn\"],\n close: [\"Đóng\", \"Hủy\", \"Bỏ qua\", \"Không phải bây giờ\", \"Để sau\", \"Không, cảm ơn\", \"×\", \"Tắt\", \"Ẩn\"]\n};\n\nexport default translations;\n","const translations = {\n accept: [\"同意\", \"全部同意\", \"接受\", \"全部接受\", \"允许\", \"全部允许\", \"确定\", \"好的\", \"我知道了\", \"继续\", \"保存并接受\", \"继续并同意\"],\n reject: [\"拒绝\", \"全部拒绝\", \"不同意\", \"不允许\", \"仅保留必要项\", \"仅限必要\", \"仅启用必要功能\", \"仅使用必要 Cookie\", \"继续但不使用 Cookie\", \"不用了,谢谢\", \"暂不同意\"],\n close: [\"关闭\", \"取消\", \"忽略\", \"暂不\", \"稍后\", \"以后再说\", \"返回\", \"×\"]\n};\n\nexport default translations;\n","import af from './af';\nimport ar from './ar';\nimport az from './az';\nimport bg from './bg';\nimport bn from './bn';\nimport bs from './bs';\nimport ca from './ca';\nimport cs from './cs';\nimport da from './da';\nimport de from './de';\nimport el from './el';\nimport en from './en';\nimport es from './es';\nimport et from './et';\nimport eu from './eu';\nimport fa from './fa';\nimport fi from './fi';\nimport fr from './fr';\nimport ga from './ga';\nimport he from './he';\nimport hi from './hi';\nimport hr from './hr';\nimport hu from './hu';\nimport hy from './hy';\nimport id from './id';\nimport is from './is';\nimport it from './it';\nimport ja from './ja';\nimport ka from './ka';\nimport ko from './ko';\nimport lt from './lt';\nimport lv from './lv';\nimport nl from './nl';\nimport no from './no';\nimport pl from './pl';\nimport pt from './pt';\nimport ro from './ro';\nimport ru from './ru';\nimport sk from './sk';\nimport sl from './sl';\nimport sv from './sv';\nimport sw from './sw';\nimport ta from './ta';\nimport th from './th';\nimport tl from './tl';\nimport tr from './tr';\nimport uk from './uk';\nimport ur from './ur';\nimport vi from './vi';\nimport zh from './zh';\n\nexport const languages = {\n af, ar, az, bg, bn, bs, ca, cs, da, de, el, en, es, et, eu, fa, fi, fr, ga, he, hi, hr, hu, hy, id, is, it, ja, ka,\n ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, ta, th, tl, tr, uk, ur, vi, zh,\n} as const;\n\nexport type Lang = keyof typeof languages;\n\nexport function normalizeLang(input: string): Lang {\n const code = input.toLowerCase() as keyof typeof languages;\n if (code in languages) return code as Lang;\n return 'en';\n}\n\nexport function getTranslations(lang: string): { accept: string[], reject: string[], close: string[] } {\n const code = normalizeLang(lang);\n return languages[code];\n}\n","import { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { getTranslations } from './translations';\n\ntype Options = {\n timeoutMs?: number; // max sweep time\n preferReject?: boolean; // click \"Reject\"/\"Decline\" where possible\n lang?: string; // Interface language, used for accept/reject/close button texts\n pollIntervalMs?: number; // how often we probe when nothing happened\n settleAfterActionMs?: number; // give the DOM time to settle after a click\n quietPeriodMs?: number; // stop if nothing happened for this long\n minSweepMs?: number; // always sweep at least this long (to catch late banners)\n maxActions?: number; // safety: don't click forever on re-spawning modals\n verbose?: boolean;\n};\n\ninterface TrRegExps {\n accept: RegExp;\n reject: RegExp;\n close: RegExp;\n}\n\nconst knownCMPSelectors: Array<{ name: string; accept: string[]; reject: string[] }> = [\n { name: 'OneTrust', accept: ['#onetrust-accept-btn-handler'], reject: ['#onetrust-reject-all-handler'] },\n {\n name: 'Cookiebot',\n accept: ['#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'],\n reject: ['#CybotCookiebotDialogBodyLevelButtonDecline'],\n },\n { name: 'Didomi', accept: ['button.didomi-accept-all'], reject: ['button.didomi-reject-all'] },\n {\n name: 'Quantcast',\n accept: ['button[qc-cmp2-action=\"accept_all\"]'],\n reject: ['button[qc-cmp2-action=\"reject_all\"]'],\n },\n {\n name: 'TrustArc',\n accept: ['#truste-consent-button'],\n reject: ['#truste-reject-button', '#truste-consent-required'],\n },\n { name: 'Iubenda', accept: ['button.iubenda-cs-accept-btn'], reject: ['button.iubenda-cs-reject-btn'] },\n {\n name: 'CookieYes',\n accept: ['#wt-cli-accept-all-btn', '#cookie_action_close_header'],\n reject: ['#wt-cli-reject-btn'],\n },\n { name: 'Osano', accept: ['.osano-cm-accept-all'], reject: ['.osano-cm-reject-all'] },\n { name: 'Klaro', accept: ['.cm-btn-accept'], reject: ['.cm-btn-decline'] },\n];\n\nfunction escapeRegex(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizePhrase(p: string): string {\n // collapse whitespace to \\s+ to match various spacing and NBSPs\n return escapeRegex(p.trim()).replace(/\\s+/g, '\\\\s+');\n}\n\nfunction buildRegexFromTranslations(phrases: string[], opts?: { anchorWhole?: boolean; flags?: string }): RegExp {\n const unique = Array.from(new Set(phrases.map(normalizePhrase))).filter((s) => s.length > 0);\n const body = unique.length ? unique.join('|') : '';\n const source = opts?.anchorWhole ? `^(?:${body})$` : `(?:${body})`;\n return new RegExp(source, opts?.flags ?? 'i');\n}\n\nasync function tryClick(page: Page, selectors: string[], _label: string) {\n for (const s of selectors) {\n const el = page.locator(s).first();\n if (await el.count().catch(() => 0)) {\n try {\n await el.scrollIntoViewIfNeeded({ timeout: 250 });\n await el.click({ timeout: 500 });\n return true;\n } catch {}\n }\n }\n return false;\n}\n\nasync function closeNativeJsAlerts(page: Page) {\n page.on(\n 'dialog',\n /* v8 ignore next — callback runs in browser context, not Node */\n (d) => d.accept().catch(() => {}),\n );\n}\n\n// 1) Known cookie CMPs (quick wins)\nasync function sweepKnownCMPs(page: Page, preferReject: boolean): Promise<boolean> {\n for (const cmp of knownCMPSelectors) {\n if (preferReject && (await tryClick(page, cmp.reject, `${cmp.name} reject`))) return true;\n if (await tryClick(page, cmp.accept, `${cmp.name} accept`)) return true;\n if (!preferReject && (await tryClick(page, cmp.reject, `${cmp.name} reject`))) return true;\n }\n return false;\n}\n\n// 2) Role/text-based generic approach (works surprisingly often)\nasync function clickByRoleAndText(page: Page, preferReject: boolean, regex: TrRegExps): Promise<boolean> {\n // Dialogs\n const dialogs = page.getByRole('dialog');\n if (await dialogs.count().catch(() => 0)) {\n const target = preferReject\n ? dialogs.getByRole('button', { name: regex.reject }).first()\n : dialogs.getByRole('button', { name: regex.accept }).first();\n\n if (await target.count().catch(() => 0)) {\n try {\n await target.click({ timeout: 700 });\n return true;\n } catch {}\n }\n // fallback: any accept/reject in dialog\n const any =\n (await dialogs.getByRole('button', { name: regex.accept }).first().count()) ||\n (await dialogs.getByRole('button', { name: regex.reject }).first().count());\n if (any) {\n try {\n const btn = dialogs.getByRole('button', { name: regex.accept }).first();\n await ((await btn.count()) ? btn : dialogs.getByRole('button', { name: regex.reject }).first()).click({\n timeout: 700,\n });\n return true;\n } catch {}\n }\n // close-icon\n const close = dialogs.getByRole('button', { name: regex.close }).first();\n if (await close.count().catch(() => 0)) {\n try {\n await close.click({ timeout: 700 });\n return true;\n } catch {}\n }\n }\n\n // Random buttons (no dialog role)\n const generic = page.getByRole('button', { name: preferReject ? regex.reject : regex.accept }).first();\n if (await generic.count().catch(() => 0)) {\n try {\n await generic.click({ timeout: 700 });\n return true;\n } catch {}\n }\n return false;\n}\n\n// 3) Heuristic for “promo/newsletter” modals (email field + close button)\nasync function sweepNewsletter(page: Page, regex: TrRegExps): Promise<boolean> {\n const modalLike = page.locator('*:visible').filter({\n has: page.locator('input[type=\"email\"],input[placeholder*=\"email\" i]'),\n });\n if (await modalLike.count().catch(() => 0)) {\n const close = modalLike.getByRole('button', { name: regex.close }).first();\n if (await close.count().catch(() => 0)) {\n try {\n await close.click({ timeout: 700 });\n return true;\n } catch {}\n }\n // click outside the modal (overlay)\n /* v8 ignore start */\n const overlay = page.locator('div[role=\"presentation\"], .modal-backdrop, .overlay, .ReactModal__Overlay');\n if (await overlay.count().catch(() => 0)) {\n try {\n await overlay.first().click({ timeout: 500, position: { x: 5, y: 5 } });\n return true;\n } catch {}\n }\n /* v8 ignore stop */\n }\n return false;\n}\n\n// 4) Full-screen overlay heuristic (fixed + large + high z-index)\nasync function sweepOverlays(page: Page, regex: TrRegExps): Promise<boolean> {\n const acceptRxSource = regex.accept.source; // serialize for page.evaluate closure safety\n const acceptRxFlags = regex.accept.flags;\n\n return await page\n .evaluate(\n /* v8 ignore start — callback runs in browser context, not Node */\n ([source, flags]) => {\n const acceptRx = new RegExp(source, flags);\n const isBig = (el: Element) => {\n const r = (el as HTMLElement).getBoundingClientRect?.();\n return r && r.width > window.innerWidth * 0.6 && r.height > window.innerHeight * 0.4;\n };\n const candidates = Array.from(document.querySelectorAll<HTMLElement>('body *'))\n .filter((el) => {\n const s = getComputedStyle(el);\n if (!s) return false;\n const fixed = s.position === 'fixed' || s.position === 'sticky';\n const z = parseInt(s.zIndex || '0', 10);\n return fixed && z >= 1000 && isBig(el) && (el as HTMLElement).offsetParent !== null;\n })\n .slice(0, 5);\n\n for (const el of candidates) {\n // try a close button inside\n const btn = el.querySelector<HTMLElement>(\n '[aria-label*=”close” i], button[aria-label*=”close” i], button:has(svg), .close, [data-close], .btn-close',\n );\n\n if (btn) {\n btn.click();\n return true;\n }\n\n // otherwise: click a visible “accept/agree/ok”\n const clickByText = (rx: RegExp) => {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_ELEMENT);\n let n: Node | null;\n while ((n = walker.nextNode())) {\n const e = n as HTMLElement;\n if (!e) continue;\n if (!(e as HTMLElement).offsetParent) continue;\n const text = (e as HTMLElement).innerText?.trim();\n\n if (text && rx.test(text)) {\n (e as HTMLElement).click();\n return true;\n }\n }\n return false;\n };\n if (clickByText(acceptRx)) return true;\n }\n return false;\n },\n /* v8 ignore stop */\n [acceptRxSource, acceptRxFlags],\n )\n .catch(() => false);\n}\n\nexport async function suppressInterferences(page: Page, opts: Options = {}) {\n const timeoutMs = opts.timeoutMs ?? 4000;\n const preferReject = opts.preferReject ?? false;\n\n const pollIntervalMs = opts.pollIntervalMs ?? 120;\n const settleAfterActionMs = opts.settleAfterActionMs ?? 500;\n const quietPeriodMs = opts.quietPeriodMs ?? 800;\n const minSweepMs = opts.minSweepMs ?? 500;\n const maxActions = opts.maxActions ?? 6;\n\n // Build regexes from translations so callers can provide i18n\n const { accept, reject, close } = getTranslations(opts.lang ?? 'en');\n const regex = {\n accept: buildRegexFromTranslations(accept, { anchorWhole: true }),\n reject: buildRegexFromTranslations(reject, { anchorWhole: true }),\n close: buildRegexFromTranslations(close, { anchorWhole: false }),\n };\n\n await closeNativeJsAlerts(page);\n\n let actions = 0;\n const startedAt = Date.now();\n let lastActivityAt = startedAt;\n\n while (Date.now() < lastActivityAt + timeoutMs) {\n // Try sweepers (short-circuit on first success)\n const did =\n (await sweepKnownCMPs(page, preferReject)) ||\n (await clickByRoleAndText(page, preferReject, regex)) ||\n (await sweepNewsletter(page, regex)) ||\n (await sweepOverlays(page, regex));\n\n if (did) {\n actions += 1;\n lastActivityAt = Date.now();\n\n // Optional: bail if we are hitting a loop of re-spawning popups\n if (actions >= maxActions) {\n if (opts.verbose) console.log(`[suppressInterferences] Max actions ${maxActions} reached, stopping.`);\n break;\n }\n\n // Let the DOM settle; some UIs spawn a second layer after the first click\n await sleep(settleAfterActionMs);\n continue;\n }\n\n // Nothing clicked this iteration — if we've been quiet long enough (and passed a minimum sweep window), stop early\n const quietFor = Date.now() - lastActivityAt;\n const ranFor = Date.now() - startedAt;\n\n if (quietFor >= quietPeriodMs && ranFor >= minSweepMs) {\n /* v8 ignore start */\n if (opts.verbose) console.log(`[suppressInterferences] Quiet for ${quietFor}ms, stopping early.`);\n /* v8 ignore stop */\n break;\n }\n\n // Brief pause before probing again\n await sleep(pollIntervalMs);\n }\n}\n","import type { Page } from '@playwright/test';\nimport * as Diff from 'diff';\nimport { formatHtml } from './format-html';\nimport { scrubHtml } from './scrub-html';\nimport { isPage } from './utils/type-check';\n\nasync function format(rawHtml: string, url: string) {\n const html = await scrubHtml({ html: rawHtml, url });\n return await formatHtml(html);\n}\n\nexport async function unifiedHtmlDiff(\n old: { html: string; url: string } | Page,\n current: { html: string; url: string } | Page,\n): Promise<string> {\n if (isPage(old)) old = { html: await old.content(), url: old.url() };\n if (isPage(current)) current = { html: await current.content(), url: current.url() };\n\n const [a, b] = await Promise.all([format(old.html, old.url), format(current.html, current.url)]);\n\n return Diff.createTwoFilesPatch('before.html', 'after.html', a, b);\n}\n"]}