@letsrunit/playwright 0.3.8 → 0.3.9

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/utils/date.ts","../src/wait.ts","../src/field/calendar.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/index.ts","../src/format-html.ts","../src/locator.ts","../src/selector/date-selector.ts","../src/selector/field-selector.ts","../src/screenshot.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/utils/type-check.ts","../src/scrub-html.ts"],"names":["months","isRange","options","el","isArray","isDate","sleep","locator","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 // define __name as a no-op if present\n (window as any).__name = (window as any).__name || ((fn: any) => fn);\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 { 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 () => {\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 { 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 (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 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 (el) => {\n const animations = (el as HTMLElement).getAnimations?.({ subtree: true }) ?? [];\n return animations.every((a) => a.playState !== 'running');\n },\n await root.elementHandle(),\n );\n\n await root.evaluate(() => new Promise<void>((r) => requestAnimationFrame(() => requestAnimationFrame(() => r()))));\n}\n\nexport async function waitForUrlChange(page: Page, prevUrl: string, timeout: number) {\n try {\n await page.waitForFunction((u) => location.href !== u, prevUrl, { timeout });\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 (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 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.evaluate((el) => el.tagName.toLowerCase(), null, { timeout: PROBE }).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\n if (role !== 'combobox') 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\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 if (!container && (await isCalendarGrid(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 if (await isCalendarGrid(container)) {\n tables.push(container);\n }\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 return uniqueTables.length > 0 ? { calendar: container, tables: uniqueTables } : 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\n .page()\n .locator('html')\n .getAttribute('lang')\n .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 btn =\n diff < 0\n ? root.locator('button[aria-label*=\"prev\"], button[class*=\"prev\"]').filter({ visible: true }).first()\n : root.locator('button[aria-label*=\"next\"], button[class*=\"next\"]').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 if (cells.length === 1) {\n await cells[0].click(options);\n return true;\n }\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 cells = table.locator('td, [role=\"gridcell\"]').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 index = foundIndices.length === 1 || day < 15 ? foundIndices[0] : foundIndices[foundIndices.length - 1];\n await cells.nth(index).click(options);\n\n return true;\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 { 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((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 }, options);\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((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 }, options);\n if (can_be_day) scores[i].day += 1;\n\n const cannot_be_day = await loc.el.evaluate((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 }, options);\n if (cannot_be_day) scores[i].day += 1;\n\n const can_be_month = await loc.el.evaluate((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 }, options);\n if (can_be_month) scores[i].month += 1;\n\n const cannot_be_month = await loc.el.evaluate((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 }, options);\n if (cannot_be_month) scores[i].month += 1;\n\n const can_be_year = await loc.el.evaluate((node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '2024';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n }, options);\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\nasync function inferLocaleAndPattern(el: Locator, options?: SetOptions): Promise<{\n locale: string;\n order: DateOrder;\n sep: string;\n}> {\n return el.evaluate(() => {\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 }, options);\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 const parsed = parseDateString(part, order, sep);\n return !parsed || !sameYMD(parsed, 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 if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n return success && success2;\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((e) => {\n const style = window.getComputedStyle(e);\n return style.display !== 'none' && style.visibility !== 'hidden' && e.getAttribute('type') !== 'hidden';\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\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 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 // Also try searching by label text if value doesn't match\n const radioByLabel = el.getByLabel(String(value), { exact: true }).locator('input[type=radio]');\n if ((await radioByLabel.count()) === 1) {\n await radioByLabel.check(options);\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 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 } finally {\n await page.mouse.up();\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 slider = el.getByRole('slider');\n if ((await slider.count()) > 0) {\n return slider.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","import { chain, isArray, isRange } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { pickFieldElement } from '../utils/pick-field-element';\nimport { setCalendarDate } from './calendar';\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 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 setNativeCheckbox,\n setRadioGroup,\n setNativeDate,\n setNativeInput,\n // aria / components\n setDateTextInput,\n setDateGroup,\n setCalendarDate,\n setOtpValue,\n setSliderValue,\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 = await el\n .getAttribute('type', options)\n .then((s) => s && s.toLowerCase())\n .catch(() => null);\n const loc = { el, tag, type };\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';\n\ntype LocatorOptions = Parameters<Page['locator']>[1];\n\n/**\n * Locates an element using Playwright selectors, with fallbacks.\n */\nexport async function locator(page: Page, selector: string): Promise<Locator> {\n const primary = page.locator(selector).first();\n if (await primary.count()) return primary;\n\n return await tryRelaxNameToHasText(page, selector)\n || await tryTagInsteadOfRole(page, selector)\n || await tryRoleNameProximity(page, selector)\n || await tryFieldAlternative(page, selector)\n || await tryAsField(page, selector)\n || primary; // Nothing found, return the original locator (so caller can still wait/assert)\n}\n\nasync function firstMatch(page: Page, sel: string | string[], opts: LocatorOptions = {}): Promise<Locator | null> {\n for (const selector of Array.isArray(sel) ? sel : [sel]) {\n const loc = page.locator(selector, opts).first();\n if (await loc.count()) return loc;\n }\n\n return null;\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\"\nasync function tryRelaxNameToHasText(page: Page, selector: string): Promise<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 firstMatch(page, 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\"\nasync function tryTagInsteadOfRole(page: Page, selector: string): Promise<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 firstMatch(page, 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 >> .. >> role=switch\nasync function tryRoleNameProximity(page: Page, selector: string): Promise<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} >> .. >> role=${role}${rest}`;\n return firstMatch(page, proximitySelector);\n}\n\n// Try alternatives if field is not found\n// field=\"foo\" → #foo > input\nasync function tryFieldAlternative(page: Page, selector: string): Promise<Locator | null> {\n const matchField = selector.match(/^field=\"([^\"]+)\"i?$/i);\n if (!matchField) return null;\n const [, field] = matchField;\n return firstMatch(page, `#${field} > input`);\n}\n\n// Try matching using the field selector in case of role mismatch\nasync function tryAsField(page: Page, selector: string): Promise<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 firstMatch(page, `field=${name}${rest}`);\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 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","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 { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { screenshot } from './screenshot';\nimport type { Snapshot } from './types';\nimport { waitForDomIdle } from './wait';\n\nexport async function snapshot(page: Page): 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 return { url, html, 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('dialog', (d) => d.accept().catch(() => {}));\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 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 }\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 ([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 [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 if (opts.verbose) console.log(`[suppressInterferences] Quiet for ${quietFor}ms, stopping early.`);\n break;\n }\n\n // Brief pause before probing again\n await sleep(pollIntervalMs);\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","// 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};\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 };\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\n const dom = new JSDOM(html, { url });\n const doc = dom.window.document;\n\n if (o.pickMain) pickMain(doc);\n dropInfraAndSvg(doc, !!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.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 if (\n p.hasAttribute('hidden') ||\n p.hasAttribute('inert') ||\n p.getAttribute('aria-hidden') === 'true'\n ) 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 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\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"]}
1
+ {"version":3,"sources":["../src/browser.ts","../src/utils/pick-field-element.ts","../src/utils/date.ts","../src/wait.ts","../src/field/calendar.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/index.ts","../src/format-html.ts","../src/fuzzy-locator.ts","../src/selector/date-selector.ts","../src/selector/field-selector.ts","../src/screenshot.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/utils/type-check.ts","../src/scrub-html.ts"],"names":["months","isRange","options","el","isArray","isDate","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 // define __name as a no-op if present\n (window as any).__name = (window as any).__name || ((fn: any) => fn);\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 { 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 () => {\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 { 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 (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 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 (el) => {\n const animations = (el as HTMLElement).getAnimations?.({ subtree: true }) ?? [];\n return animations.every((a) => a.playState !== 'running');\n },\n await root.elementHandle(),\n );\n\n await root.evaluate(() => new Promise<void>((r) => requestAnimationFrame(() => requestAnimationFrame(() => r()))));\n}\n\nexport async function waitForUrlChange(page: Page, prevUrl: string, timeout: number) {\n try {\n await page.waitForFunction((u) => location.href !== u, prevUrl, { timeout });\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 (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 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.evaluate((el) => el.tagName.toLowerCase(), null, { timeout: PROBE }).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\n if (role !== 'combobox') 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\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 if (!container && (await isCalendarGrid(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 if (await isCalendarGrid(container)) {\n tables.push(container);\n }\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 return uniqueTables.length > 0 ? { calendar: container, tables: uniqueTables } : 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\n .page()\n .locator('html')\n .getAttribute('lang')\n .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 btn =\n diff < 0\n ? root.locator('button[aria-label*=\"prev\"], button[class*=\"prev\"]').filter({ visible: true }).first()\n : root.locator('button[aria-label*=\"next\"], button[class*=\"next\"]').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 if (cells.length === 1) {\n await cells[0].click(options);\n return true;\n }\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 cells = table.locator('td, [role=\"gridcell\"]').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 index = foundIndices.length === 1 || day < 15 ? foundIndices[0] : foundIndices[foundIndices.length - 1];\n await cells.nth(index).click(options);\n\n return true;\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 { 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((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 }, options);\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((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 }, options);\n if (can_be_day) scores[i].day += 1;\n\n const cannot_be_day = await loc.el.evaluate((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 }, options);\n if (cannot_be_day) scores[i].day += 1;\n\n const can_be_month = await loc.el.evaluate((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 }, options);\n if (can_be_month) scores[i].month += 1;\n\n const cannot_be_month = await loc.el.evaluate((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 }, options);\n if (cannot_be_month) scores[i].month += 1;\n\n const can_be_year = await loc.el.evaluate((node) => {\n const e = node as HTMLInputElement;\n const old = e.value;\n e.value = '2024';\n const valid = e.checkValidity();\n e.value = old;\n return valid;\n }, options);\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\nasync function inferLocaleAndPattern(el: Locator, options?: SetOptions): Promise<{\n locale: string;\n order: DateOrder;\n sep: string;\n}> {\n return el.evaluate(() => {\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 }, options);\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 const parsed = parseDateString(part, order, sep);\n return !parsed || !sameYMD(parsed, 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 if (el2 && value2) {\n const success2 = await setDateValue(el2, value2, order, sep, pad, options);\n return success && success2;\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((e) => {\n const style = window.getComputedStyle(e);\n return style.display !== 'none' && style.visibility !== 'hidden' && e.getAttribute('type') !== 'hidden';\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\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 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 // Also try searching by label text if value doesn't match\n const radioByLabel = el.getByLabel(String(value), { exact: true }).locator('input[type=radio]');\n if ((await radioByLabel.count()) === 1) {\n await radioByLabel.check(options);\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 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 } finally {\n await page.mouse.up();\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 slider = el.getByRole('slider');\n if ((await slider.count()) > 0) {\n return slider.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","import { chain, isArray, isRange } from '@letsrunit/utils';\nimport type { Locator } from '@playwright/test';\nimport { pickFieldElement } from '../utils/pick-field-element';\nimport { setCalendarDate } from './calendar';\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 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 setNativeCheckbox,\n setRadioGroup,\n setNativeDate,\n setNativeInput,\n // aria / components\n setDateTextInput,\n setDateGroup,\n setCalendarDate,\n setOtpValue,\n setSliderValue,\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 = await el\n .getAttribute('type', options)\n .then((s) => s && s.toLowerCase())\n .catch(() => null);\n const loc = { el, tag, type };\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';\n\ntype LocatorOptions = Parameters<Page['locator']>[1];\n\n/**\n * Locates an element using Playwright selectors, with fallbacks.\n */\nexport async function fuzzyLocator(page: Page, selector: string): Promise<Locator> {\n const primary = page.locator(selector).first();\n if (await primary.count()) return primary;\n\n return (\n (await tryRelaxNameToHasText(page, selector)) ||\n (await tryTagInsteadOfRole(page, selector)) ||\n (await tryRoleNameProximity(page, selector)) ||\n (await tryFieldAlternative(page, selector)) ||\n (await tryAsField(page, selector)) ||\n primary\n ); // Nothing found, return the original locator (so caller can still wait/assert)\n}\n\nasync function firstMatch(page: Page, sel: string | string[], opts: LocatorOptions = {}): Promise<Locator | null> {\n for (const selector of Array.isArray(sel) ? sel : [sel]) {\n const loc = page.locator(selector, opts).first();\n if (await loc.count()) return loc;\n }\n\n return null;\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\"\nasync function tryRelaxNameToHasText(page: Page, selector: string): Promise<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 firstMatch(page, 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\"\nasync function tryTagInsteadOfRole(page: Page, selector: string): Promise<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 firstMatch(page, 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 >> .. >> role=switch\nasync function tryRoleNameProximity(page: Page, selector: string): Promise<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} >> .. >> role=${role}${rest}`;\n return firstMatch(page, proximitySelector);\n}\n\n// Try alternatives if field is not found\n// field=\"foo\" → #foo > input (only when name is a valid CSS identifier)\nasync function tryFieldAlternative(page: Page, selector: string): Promise<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 firstMatch(page, `#${field} > input`);\n}\n\n// Try matching using the field selector in case of role mismatch\nasync function tryAsField(page: Page, selector: string): Promise<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 firstMatch(page, `field=${name}${rest}`);\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","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 { sleep } from '@letsrunit/utils';\nimport type { Page } from '@playwright/test';\nimport { screenshot } from './screenshot';\nimport type { Snapshot } from './types';\nimport { waitForDomIdle } from './wait';\n\nexport async function snapshot(page: Page): 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 return { url, html, 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('dialog', (d) => d.accept().catch(() => {}));\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 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 }\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 ([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 [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 if (opts.verbose) console.log(`[suppressInterferences] Quiet for ${quietFor}ms, stopping early.`);\n break;\n }\n\n // Brief pause before probing again\n await sleep(pollIntervalMs);\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","// 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};\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 };\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\n const dom = new JSDOM(html, { url });\n const doc = dom.window.document;\n\n if (o.pickMain) pickMain(doc);\n dropInfraAndSvg(doc, !!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.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 if (\n p.hasAttribute('hidden') ||\n p.hasAttribute('inert') ||\n p.getAttribute('aria-hidden') === 'true'\n ) 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 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\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"]}