From 8c95c4976807045a5502c881f8beda588af86009 Mon Sep 17 00:00:00 2001 From: Stuart Date: Mon, 28 Sep 2026 18:04:39 +1000 Subject: [PATCH 1/7] STU-445: icon-only header, hero typing demo, composer focus outline - Header: drop the boxed mark's rect and the wordmark, leaving the paired-C ribbon painted in --fg; remove the Home/Account/Plans/Tutorial nav links and the Tutorial entry; drop the header's background/border. Account stays reachable via #topbar-avatar, Home via the logo, Plans via its deep link and the account surface's Change plan action. - Composer: stop the page's generic textarea focus shadow (the offset blue box) from painting inside the composer; the orange border/ring carries focus. - Hero: type the shipped example prompt in behind the blinking orange caret on first load (is-demo-typing), cancelled by any real interaction and skipped under reduced motion or a non-home deep link. - Specs: navigate via the surviving controls, and add computed-style and changing-text assertions for the header, focus and typing criteria. --- app.js | 6 -- e2e/stu375-hero-navigation.spec.js | 102 +++++++++++++++++++------ e2e/stu376-composer.spec.js | 87 +++++++++++++++++++++ e2e/stu381-monthly-usage.spec.js | 4 +- e2e/stu383-account-overview.spec.js | 4 +- e2e/stu384-connection.spec.js | 6 +- e2e/stu387-account-access.spec.js | 2 +- e2e/stu389-hero-mark-field.spec.js | 4 +- e2e/stu391-tutorial-onboarding.spec.js | 23 +++--- index.html | 68 +++-------------- src/composerAdapter.js | 94 +++++++++++++++++++++-- 11 files changed, 289 insertions(+), 111 deletions(-) diff --git a/app.js b/app.js index 75ddcf0..39de686 100644 --- a/app.js +++ b/app.js @@ -9048,12 +9048,6 @@ function switchView(view, pushState = true, moveFocus = true) { if (stage && stage.classList.contains("visible")) setGenerationStageVisible(true); } - document.querySelectorAll(".nav-link[data-view]").forEach((link) => { - const active = link.dataset.view === view; - link.setAttribute("aria-current", active ? "page" : null); - if (!active) link.removeAttribute("aria-current"); - }); - if (pushState) { const hash = view === "home" ? "" : `#${view}`; if (window.location.hash !== hash) window.history.pushState({ view }, "", hash || "#"); diff --git a/e2e/stu375-hero-navigation.spec.js b/e2e/stu375-hero-navigation.spec.js index 00fa4a6..5c35312 100644 --- a/e2e/stu375-hero-navigation.spec.js +++ b/e2e/stu375-hero-navigation.spec.js @@ -32,30 +32,83 @@ for (const { name, width, height } of viewports) { }); } -test("mobile topbar keeps Home, Account and Plans separately reachable", async ({ page }) => { +test("mobile topbar keeps Home and Account reachable", async ({ page }) => { await page.setViewportSize({ width: 360, height: 800 }); await page.goto("/"); - for (const view of ["home", "account", "plans"]) { - const link = page.locator(`.topnav a[data-view="${view}"]`); - await expect(link).toBeVisible(); - const box = await link.boundingBox(); - expect(box.height, `${view} nav link should offer a 44px touch target`).toBeGreaterThanOrEqual(44); - expect(box.width, `${view} nav link should offer a 44px touch target`).toBeGreaterThanOrEqual(44); - } + const brand = page.locator("header.topbar .brand"); + const avatar = page.locator("#topbar-avatar"); + await expect(brand).toBeVisible(); + await expect(avatar).toBeVisible(); - await page.click('.topnav a[data-view="account"]'); + // The logo is the surviving Home control and offers a 44px touch target. + const brandBox = await brand.boundingBox(); + expect(brandBox.height, "logo should offer a 44px touch target").toBeGreaterThanOrEqual(44); + expect(brandBox.width, "logo should offer a 44px touch target").toBeGreaterThanOrEqual(44); + + // Account stays reachable through the avatar; the logo returns Home. + await avatar.click(); await expect(page.locator("#account-view")).toBeVisible(); - await page.click('.topnav a[data-view="plans"]'); - await expect(page.locator("#plans-view")).toBeVisible(); - await expect(page.locator("#home-view")).toBeHidden(); + await brand.click(); + await expect(page.locator("#home-view")).toBeVisible(); const hasOverflow = await page.evaluate(() => { const html = document.documentElement; return html.scrollWidth > html.clientWidth + 1; }); - expect(hasOverflow, "mobile nav should not force horizontal scrolling").toBe(false); + expect(hasOverflow, "mobile header should not force horizontal scrolling").toBe(false); +}); + +test("header shows only the black ribbon mark — no box, no wordmark, no nav", async ({ page }) => { + await page.setViewportSize({ width: 1440, height: 900 }); + await page.goto("/"); + + const topbar = page.locator("header.topbar"); + await expect(topbar).toBeVisible(); + + // The four nav links and the Tutorial entry are gone from the header. + await expect(topbar.locator(".topnav")).toHaveCount(0); + await expect(topbar.locator("a.nav-link")).toHaveCount(0); + await expect(page.locator("#wt-reopen")).toHaveCount(0); + + // The brand is the icon alone: one svg, no wordmark, no boxed rect. + const brand = topbar.locator(".brand"); + await expect(brand).toBeVisible(); + await expect(brand.locator("svg")).toHaveCount(1); + await expect(brand.locator(".wordmark")).toHaveCount(0); + await expect(brand.locator("rect")).toHaveCount(0); + + // The mark is painted in the ink colour (black), not a surface-coloured + // glyph inside a box. + await expect(brand.locator("path").first()).toHaveAttribute("fill", "currentColor"); + const markColor = await brand.locator("svg").evaluate((el) => getComputedStyle(el).color); + const ink = await page.evaluate(() => { + const probe = document.createElement("span"); + probe.style.color = "var(--fg)"; + document.body.appendChild(probe); + const color = getComputedStyle(probe).color; + probe.remove(); + return color; + }); + expect(markColor).toBe(ink); + + // The header paints no background of its own. + const background = await topbar.evaluate((el) => getComputedStyle(el).backgroundColor); + expect(["rgba(0, 0, 0, 0)", "transparent"]).toContain(background); +}); + +test("the avatar reaches Account and the logo returns Home", async ({ page }) => { + await page.setViewportSize({ width: 1440, height: 900 }); + await page.goto("/"); + + await page.click("#topbar-avatar"); + await expect(page.locator("#account-view")).toBeVisible(); + await expect(page.locator("#home-view")).toBeHidden(); + + await page.click("header.topbar .brand"); + await expect(page.locator("#home-view")).toBeVisible(); + await expect(page.locator("#account-view")).toBeHidden(); }); test("200% zoom keeps controls readable and on-screen", async ({ page }) => { @@ -85,7 +138,7 @@ test("navigation switches surfaces and hidden surfaces are not focusable", async await page.goto("/"); await expect(page.locator("#home-view")).toBeVisible(); - await page.click('a[data-view="account"]'); + await page.click("#topbar-avatar"); await expect(page.locator("#account-view")).toBeVisible(); await expect(page.locator("#home-view")).toBeHidden(); await expect(page.locator("#plans-view")).toBeHidden(); @@ -98,7 +151,9 @@ test("navigation switches surfaces and hidden surfaces are not focusable", async }); expect(hiddenFocusableHome).toBe(0); - await page.click('a[data-view="plans"]'); + // Plans has no header entry after STU-445, so its deep link is the + // surviving navigation path. + await page.goto("/#plans"); await expect(page.locator("#plans-view")).toBeVisible(); await expect(page.locator("#account-view")).toBeHidden(); @@ -115,8 +170,8 @@ test("keyboard focus follows view navigation", async ({ page }) => { const focusedViewOnLoad = await page.evaluate(() => document.activeElement?.closest(".view")?.id ?? null); expect(focusedViewOnLoad).toBeNull(); - // Keyboard activation of a nav link moves focus into the revealed surface. - await page.focus('a[data-view="account"]'); + // Keyboard activation of the account control moves focus into the surface. + await page.focus("#topbar-avatar"); await page.keyboard.press("Enter"); await expect(page.locator("#account-view")).toBeVisible(); await expect(page.locator("#account-view")).toBeFocused(); @@ -130,12 +185,15 @@ test("keyboard focus follows view navigation", async ({ page }) => { }); expect(hiddenFocusableHome).toBe(0); - // Pointer navigation moves focus into the revealed surface too. - await page.click('a[data-view="plans"]'); - await expect(page.locator("#plans-view")).toBeVisible(); - await expect(page.locator("#plans-view")).toBeFocused(); + // Pointer navigation moves focus into the revealed surface too: the logo + // returns Home from Account. + await page.click("header.topbar .brand"); + await expect(page.locator("#home-view")).toBeVisible(); + await expect(page.locator("#home-view")).toBeFocused(); // Reloading a deep link restores the surface without stealing focus. + await page.goto("/#plans"); + await expect(page.locator("#plans-view")).toBeVisible(); await page.reload(); await expect(page.locator("#plans-view")).toBeVisible(); const focusedViewAfterReload = await page.evaluate(() => document.activeElement?.closest(".view")?.id ?? null); @@ -145,7 +203,7 @@ test("keyboard focus follows view navigation", async ({ page }) => { test("back, forward and reload restore the current surface", async ({ page }) => { await page.setViewportSize({ width: 1440, height: 900 }); await page.goto("/"); - await page.click('a[data-view="account"]'); + await page.click("#topbar-avatar"); await expect(page.locator("#account-view")).toBeVisible(); await page.goBack(); diff --git a/e2e/stu376-composer.spec.js b/e2e/stu376-composer.spec.js index 6043d4f..135c081 100644 --- a/e2e/stu376-composer.spec.js +++ b/e2e/stu376-composer.spec.js @@ -364,3 +364,90 @@ test.describe("touch controls at mobile viewport", () => { expect(counts.review).toBe(1); }); }); + +/** + * STU-445 — the hero's opening typing demo and the composer's focus state. + * Both are visual behaviours, so the assertions read computed styles and the + * changing prompt text rather than the presence of elements. + */ +test.describe("STU-445 hero composer behaviour", () => { + test("the hero demo types the shipped prompt behind the orange caret", async ({ page }) => { + // Watch from navigation commit so a fast machine cannot finish the demo + // before the first sample. + await page.goto("/", { waitUntil: "commit" }); + + const samples = await page.evaluate(async (expected) => { + const seen = []; + const deadline = Date.now() + 8000; + while (Date.now() < deadline) { + const composer = document.getElementById("composer"); + const typed = document.querySelector(".ghost .typed"); + const typing = composer?.classList.contains("is-demo-typing") ?? false; + // Start once the demo owns the field, then keep sampling through the + // final frame, where the full prompt lands and the class retires. + if (typed && (typing || seen.length > 0)) { + const text = typed.textContent || ""; + if (seen[seen.length - 1] !== text) seen.push(text); + if (text === expected) break; + } + await new Promise((resolve) => setTimeout(resolve, 30)); + } + return seen; + }, COMPOSER_DEFAULT_PROMPT); + + // The visible text CHANGES over time: every sample is a strictly longer + // prefix of the shipped prompt — real typing, not a static element. + expect(samples.length).toBeGreaterThan(1); + for (let index = 1; index < samples.length; index += 1) { + expect(samples[index].length).toBeGreaterThan(samples[index - 1].length); + expect(samples[index].startsWith(samples[index - 1])).toBe(true); + } + expect(samples[samples.length - 1]).toBe(COMPOSER_DEFAULT_PROMPT); + + // The demo retires cleanly: caret class off, prompt settled, send ready. + await expect(page.locator("#composer")).not.toHaveClass(/is-demo-typing/); + await expect(page.locator("#pipeline-input")).toHaveValue(COMPOSER_DEFAULT_PROMPT); + await expect(page.locator("#hero-send")).toBeEnabled(); + }); + + test("clicking the prompt input shows only the composer's orange focus outline", async ({ + page, + }) => { + await page.goto("/"); + const field = page.locator("#pipeline-input"); + const composer = page.locator("#composer"); + await expect(field).toHaveValue(COMPOSER_DEFAULT_PROMPT); + await field.click(); + + const fieldStyles = await field.evaluate((el) => { + const styles = getComputedStyle(el); + return { + boxShadow: styles.boxShadow, + outlineStyle: styles.outlineStyle, + }; + }); + // The offset light-blue box was the page's generic textarea focus shadow. + expect(fieldStyles.boxShadow).toBe("none"); + expect(fieldStyles.outlineStyle).toBe("none"); + + const composerStyles = await composer.evaluate((el) => { + const styles = getComputedStyle(el); + return { borderColor: styles.borderColor, boxShadow: styles.boxShadow }; + }); + const accent = await page.evaluate(() => { + const probe = document.createElement("span"); + probe.style.color = "var(--accent)"; + document.body.appendChild(probe); + const color = getComputedStyle(probe).color; + probe.remove(); + return color; + }); + // The surviving outline is the composer's own accent border and ring. + expect(composerStyles.borderColor).toBe(accent); + expect(composerStyles.boxShadow).not.toBe("none"); + // Nothing paints the old blue (#3b82f6) ring any more. + expect(`${composerStyles.borderColor} ${composerStyles.boxShadow}`).not.toMatch( + /59,\s*130,\s*246/, + ); + }); +}); diff --git a/e2e/stu381-monthly-usage.spec.js b/e2e/stu381-monthly-usage.spec.js index badc050..2db199f 100644 --- a/e2e/stu381-monthly-usage.spec.js +++ b/e2e/stu381-monthly-usage.spec.js @@ -202,7 +202,7 @@ test.describe("STU-381 monthly usage metering", () => { await expect(page.locator("#topbar-credits-count")).toHaveText("43"); // Account row reflects the reconciled count without ever opening a dialog. - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#usage-counter")).toHaveText("7 / 50 runs this month"); await openUsage(page); @@ -236,7 +236,7 @@ test.describe("STU-381 monthly usage metering", () => { await expect(page.locator("#topbar-credits").getByText("43")).toBeVisible(); // The account row and the dialog converge on the same reconciled count. - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#usage-counter")).toHaveText("7 / 50 runs this month"); await openUsage(page); diff --git a/e2e/stu383-account-overview.spec.js b/e2e/stu383-account-overview.spec.js index ab36f1a..d6e9c9d 100644 --- a/e2e/stu383-account-overview.spec.js +++ b/e2e/stu383-account-overview.spec.js @@ -73,7 +73,7 @@ async function seedSession(page, email = "metered@example.com") { } async function openAccount(page) { - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#account-view")).toBeVisible(); } @@ -243,7 +243,7 @@ test.describe("STU-383 account overview", () => { }); await page.goto("/", { waitUntil: "domcontentloaded" }); - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#acct-left-count")).toHaveText("…"); await expect(page.locator("#acct-plan-tier")).toHaveText("Checking…"); diff --git a/e2e/stu384-connection.spec.js b/e2e/stu384-connection.spec.js index 6705b2e..b91cc63 100644 --- a/e2e/stu384-connection.spec.js +++ b/e2e/stu384-connection.spec.js @@ -63,7 +63,7 @@ async function seedSession(page, email = EMAIL) { async function openAccount(page) { await dismissOpenModals(page); - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#account-view")).toBeVisible(); } @@ -319,12 +319,12 @@ test.describe("STU-384 account connection", () => { }); await page.goto("/"); - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#auth-signedout")).toBeVisible(); await expect(page.locator("#account-view #auth-signedin")).toBeHidden(); // The canonical editor stays reachable from the home settings entry point. - await page.locator('a.nav-link[data-view="home"]').click(); + await page.locator("header.topbar .brand").click(); await page.locator('button.settings-link', { hasText: "Configure API Keys" }).click(); await expect(page.locator("#api-keys-modal")).toBeVisible(); await page.locator("#flutterflow-api-key-input").fill(KEY); diff --git a/e2e/stu387-account-access.spec.js b/e2e/stu387-account-access.spec.js index 0d645dd..e1df603 100644 --- a/e2e/stu387-account-access.spec.js +++ b/e2e/stu387-account-access.spec.js @@ -65,7 +65,7 @@ async function seedSession(page, email = EMAIL) { } async function openAccount(page) { - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#account-view")).toBeVisible(); await expect(page.locator("#auth-signedin")).toBeVisible(); } diff --git a/e2e/stu389-hero-mark-field.spec.js b/e2e/stu389-hero-mark-field.spec.js index ad943f8..ac1a041 100644 --- a/e2e/stu389-hero-mark-field.spec.js +++ b/e2e/stu389-hero-mark-field.spec.js @@ -150,7 +150,7 @@ test("navigation away stops rendering and returning does not accumulate raf loop const runningAtStart = await page.evaluate(() => window.__heroField?.isRunning()); expect(runningAtStart, "field should be running on the home view").toBe(true); - await page.click('a[data-view="account"]'); + await page.click("#topbar-avatar"); await expect(page.locator("#account-view")).toBeVisible(); await page.waitForTimeout(300); @@ -170,7 +170,7 @@ test("navigation away stops rendering and returning does not accumulate raf loop }); expect(rafCountAway, "no new animation frames should be requested while home is hidden").toBe(0); - await page.click('a[data-view="home"]'); + await page.click("header.topbar .brand"); await expect(page.locator("#home-view")).toBeVisible(); await page.waitForTimeout(300); diff --git a/e2e/stu391-tutorial-onboarding.spec.js b/e2e/stu391-tutorial-onboarding.spec.js index 1702317..bfd1cc0 100644 --- a/e2e/stu391-tutorial-onboarding.spec.js +++ b/e2e/stu391-tutorial-onboarding.spec.js @@ -103,17 +103,22 @@ async function clickInsideWalkthrough(page, selector) { await target.click(); } -// Reopen the tutorial from the nav. On a cold start the deferred app.js module -// may not have wired openWalkthroughModal yet, so a click can land while the -// handler is undefined and silently navigate to #tutorial instead of opening -// the modal — wait for the wire-up (state) before clicking, then wait for the -// open animation to finish. +// Reopen the tutorial. STU-445 removed the header's Tutorial entry "for now", +// so a returning-user reopen goes through the app's own modal function. On a +// cold start the deferred app.js module may not have wired openWalkthroughModal +// yet, and the startup identity pass writes the month's usage and can close a +// walkthrough opened mid-flight (the exhausted-allowance path closes whatever +// modal is open). Wait for the wire-up and for that usage signal before +// opening, then wait for the open animation to finish. async function reopenWalkthrough(page) { await page.waitForFunction( () => typeof window.openWalkthroughModal === "function", { timeout: 8000 }, ); - await page.click("#wt-reopen"); + await page.waitForFunction(() => Boolean(localStorage.getItem("ccc_usage")), { + timeout: 8000, + }); + await page.evaluate(() => window.openWalkthroughModal()); await waitForWalkthroughOpen(page); } @@ -179,7 +184,7 @@ test.describe("STU-391 tutorial + connection onboarding", () => { await expect(page.locator(WALKTHROUGH)).toBeHidden(); }); - test("a returning user reopens the tutorial from the Tutorial entry", async ({ page }) => { + test("a returning user can reopen the tutorial", async ({ page }) => { await page.addInitScript(() => { localStorage.setItem("hasSeenWalkthrough", "true"); }); @@ -294,7 +299,7 @@ test.describe("STU-391 tutorial + connection onboarding", () => { // STU-384 renders from the real fetch outcome, not from stored bytes. await clickInsideWalkthrough(page, ".wt-gotit-btn"); await expect(page.locator(WALKTHROUGH)).toBeHidden(); - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#account-view")).toBeVisible(); await expect(page.locator("#acct-ff-status")).toContainText("API key rejected"); }); @@ -312,7 +317,7 @@ test.describe("STU-391 tutorial + connection onboarding", () => { await expect(page.locator(WALKTHROUGH)).toBeHidden(); // Open the settings editor from the account connection card — NOT onboarding. - await page.locator('a.nav-link[data-view="account"]').click(); + await page.locator("#topbar-avatar").click(); await expect(page.locator("#account-view")).toBeVisible(); await page .locator(".acct-connection button", { hasText: "Configure" }) diff --git a/index.html b/index.html index 8d0c8e4..74259b4 100644 --- a/index.html +++ b/index.html @@ -2649,51 +2649,26 @@ align-items: center; justify-content: space-between; gap: 16px; - background: var(--bg); - border-bottom: 1px solid var(--border); z-index: 100; } @media (min-width: 921px) { - .topbar { padding: 0 40px; border-bottom: 0; } + .topbar { padding: 0 40px; } } .brand { display: flex; align-items: center; - gap: 12px; color: var(--fg); text-decoration: none; - font-size: 16px; - font-weight: 600; - letter-spacing: -0.01em; flex-shrink: 0; } .brand-mark { - width: 32px; - height: 32px; + display: block; + width: 44px; + height: 44px; color: var(--fg); flex-shrink: 0; } - .brand .wordmark { display: flex; flex-direction: column; line-height: 1.15; } - .brand .wordmark span { color: var(--muted); font-weight: 500; font-size: 11px; letter-spacing: 0.01em; } - .topnav { - display: flex; - align-items: center; - gap: 6px; - } - .nav-link { - padding: 8px 14px; - border-radius: var(--radius-nav); - color: var(--muted); - font-size: 14px; - font-weight: 500; - text-decoration: none; - transition: color var(--t-fast) var(--ease), background-color var(--t-fast) var(--ease); - } - .nav-link:hover, .nav-link[aria-current="page"] { - color: var(--fg); - background: var(--fill-hover); - } .topbar-account { display: flex; align-items: center; @@ -2741,22 +2716,8 @@ font-weight: 600; cursor: pointer; } - /* Below the inline-nav breakpoint the nav wraps to its own topbar row - with touch-sized targets, so every surface stays reachable instead - of being hidden. */ - @media (max-width: 679px) { - :root { --topbar-h: 100px; } - .topbar { flex-wrap: wrap; align-content: center; row-gap: 2px; padding: 10px 12px; } - .topnav { order: 3; width: 100%; gap: 4px; } - .topnav .nav-link { - flex: 1 1 0; - min-height: 44px; - display: flex; - align-items: center; - justify-content: center; - } - } - + /* The header holds only the logo and the account controls, so it keeps + its single 64px row at every width. */ .viewport { position: relative; top: var(--topbar-h); @@ -2831,6 +2792,10 @@ margin: 0; border: 0; outline: 0; + /* The page's generic textarea focus ring (a blue offset box) must not + paint inside the composer; the composer's own orange border and + :focus-within ring carry the focus state. */ + box-shadow: none; background: transparent; resize: none; font: inherit; @@ -3322,20 +3287,11 @@
-
+

FlutterFlow custom code.
(minus the code)

Custom widgets and actions, expertly crafted, fully reviewed and ready to deploy to your project in one click.

@@ -3376,7 +3379,7 @@

FlutterFlow custom code.
Signature pad

-
+
+
From 988d5a1f9de0a4bb77392433324d7f850bea7d1c Mon Sep 17 00:00:00 2001 From: opencode-coder Date: Tue, 29 Sep 2026 03:35:18 +1000 Subject: [PATCH 6/7] test(stu377): fix two focus-order test-harness bugs in the holding window Both are test-setup corrections. Neither weakens, skips or removes any assertion; no application code is touched. "desktop: keyboard focus follows the prompt-then-workflow order" walked focus from `document.activeElement?.blur()`. Blur does not move Chromium's sequential-focus-navigation starting point, so the sweep resumed wherever focus last was -- landing inside the view, hitting pdot-1, and only wrapping around to the recap afterwards, so edit(7) < pdot1(1) failed. Anchor the walk on a deterministic element instead, mirroring the sibling stacked test's #progress-stage-count anchor: #topbar-avatar is the last tabbable ahead of the panel, so the sweep enters at the recap and still proves edit precedes pdot-1 in tab order (edit=3, pdot1=5 from the top of the document). "resizing across the breakpoint keeps focus inside the moved recap" called .focus() on the Edit prompt the instant the stage went active, with no wait for the composer -> pipeline morph, so the button was still 0x0 and focus never landed -- the send button blurred to BODY and focusedId came back "". This is pre-existing breakage from 83972f1 in #104, born red. Add the await expect(page.locator(".pipeline-view")).toBeVisible() that every other test in this spec already has. The poll assertions are unchanged, so focus retention across the resize is still genuinely verified in both directions. --- e2e/stu377-pipeline-progress.spec.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/e2e/stu377-pipeline-progress.spec.js b/e2e/stu377-pipeline-progress.spec.js index 75ad99a..03cb00c 100644 --- a/e2e/stu377-pipeline-progress.spec.js +++ b/e2e/stu377-pipeline-progress.spec.js @@ -854,7 +854,13 @@ test.describe("Holding window matches the canonical pipeline view", () => { // The recap is the left column on desktop, so it leads the DOM and the // tab order: Edit prompt is reached before the active stage button, and // focus never travels from the right column back to the left. - await page.evaluate(() => document.activeElement?.blur()); + // Anchor the walk on a known element rather than blurring: blur() does not + // move Chromium's sequential-focus-navigation starting point, so the sweep + // would resume wherever focus last was and wrap around before reaching the + // recap. The avatar is the last tabbable ahead of the panel, so the walk + // enters at the recap -- mirroring the stacked test's #progress-stage-count + // anchor, which is likewise the tabbable just before the first one it wants. + await page.locator("#topbar-avatar").focus(); const focusOrder = await tabFocusOrder(page, ["pipeline-edit-prompt", "pdot-1"]); expect(focusOrder).toContain("pipeline-edit-prompt"); expect(focusOrder).toContain("pdot-1"); @@ -904,6 +910,10 @@ test.describe("Holding window matches the canonical pipeline view", () => { // Desktop -> stacked: the recap moves behind the view and reparenting must // not drop the focus its Edit prompt was holding. + // Wait for the composer -> pipeline morph: until .pipeline-view is visible + // the Edit prompt is still 0x0, so focus() lands on nothing and the send + // button simply blurs to BODY. + await expect(page.locator(".pipeline-view")).toBeVisible(); await page.locator("#pipeline-edit-prompt").focus(); await page.setViewportSize({ width: 390, height: 844 }); await expect From 2f345f552f605d133971fad1aecbebb15676fa11 Mon Sep 17 00:00:00 2001 From: opencode-coder Date: Tue, 29 Sep 2026 03:36:13 +1000 Subject: [PATCH 7/7] build: regenerate dist after re-syncing milestone/stu-implement-updated-ui-ux The re-sync onto f95a16d pulls in #102, which changes app.js and src/. The committed bundle was stale against that source, so dist is rebuilt to keep the published assets and the source in agreement. New bundle: index-C31N1DOp.js -> index-LEYLuMwg.js. The CSS hash is unchanged and dist/index.html references only files present in dist/assets/. --- .../{index-C31N1DOp.js => index-LEYLuMwg.js} | 152 +++++++++--------- dist/index.html | 2 +- 2 files changed, 77 insertions(+), 77 deletions(-) rename dist/assets/{index-C31N1DOp.js => index-LEYLuMwg.js} (55%) diff --git a/dist/assets/index-C31N1DOp.js b/dist/assets/index-LEYLuMwg.js similarity index 55% rename from dist/assets/index-C31N1DOp.js rename to dist/assets/index-LEYLuMwg.js index 7d79961..3f5f345 100644 --- a/dist/assets/index-C31N1DOp.js +++ b/dist/assets/index-LEYLuMwg.js @@ -1,8 +1,8 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=n(r);fetch(r.href,s)}})();var w=typeof window<"u"?window:void 0,je=typeof globalThis<"u"?globalThis:w,ze=je?.navigator,P=je?.document,_e=je?.location,ol=je?.fetch,ea=je!=null&&je.XMLHttpRequest&&"withCredentials"in new je.XMLHttpRequest?je.XMLHttpRequest:void 0,Ec=je?.AbortController,rg=je?.CompressionStream,Je=ze?.userAgent;function Id(){return!(!w||w.navigator.onLine===!1)}var xi=typeof globalThis<"u"?globalThis:w;xi&&typeof self>"u"&&(xi.self=xi),xi&&typeof File>"u"&&(xi.File=function(){});var O=w??{},oe={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Sc(t,e,n,i,r,s,o){try{var a=t[s](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(i,r)}function ce(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var s=t.apply(e,n);function o(l){Sc(s,i,r,o,a,"next",l)}function a(l){Sc(s,i,r,o,a,"throw",l)}o(void 0)}))}}function I(){return I=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var i in n)({}).hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},I.apply(null,arguments)}function kd(t,e){if(t==null)return{};var n={};for(var i in t)if({}.hasOwnProperty.call(t,i)){if(e.indexOf(i)!==-1)continue;n[i]=t[i]}return n}var xc=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Ic(t){return typeof t=="string"||t}function kc(t){return typeof t=="string"?t:void 0}var Ii,sg=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],Wt=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),Cc=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),og=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],ag=["token"],Cd="NativeGzipValidationError",ta=t=>t.length>=2&&t[0]===31&&t[1]===139,Ac=(t,e)=>t===Cc.GZipJS||e===Cc.GZipJS||e==="gzip",Pc=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",Ir=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Cd,e},lg=(function(){var t=ce((function*(e,n){18>e.size&&Ir("too-short");var i=new Uint8Array(yield e.slice(0,10).arrayBuffer());ta(i)&&i[2]===8||Ir("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Ii)return Ii;Ii=[];for(var c=0;256>c;c++){for(var d=c,f=0;8>f;f++)d=1&d?3988292384^d>>>1:d>>>1;Ii[c]=d>>>0}return Ii})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Ir("invalid-crc");var s=n.length>>>0;r.getUint32(4,!0)!==s&&Ir("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function na(){return na=ce((function*(t,e,n){e===void 0&&(e=!0);try{var i=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),s=r.writable.getWriter(),o=s.write(i).then((()=>s.close())).catch((function(){var u=ce((function*(c){try{yield s.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield lg(l,i),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),na.apply(this,arguments)}var cg=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Fc=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var n=t.toLowerCase();return cg.concat(e).some((i=>{var r=i.toLowerCase();return n.indexOf(r)!==-1}))};function j(t,e){return t.indexOf(e)!==-1}var Bs=function(t){return t.trim()},ia=function(t){return t.replace(/^\$/,"")};function Ad(t){var e,n=[];return(e=JSON.stringify(t,(function(i,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var Pd=Object.prototype,Fd=Pd.hasOwnProperty,Ds=Pd.toString,U=Array.isArray||function(t){return Ds.call(t)==="[object Array]"},We=t=>typeof t=="function",ve=t=>t===Object(t)&&!U(t),Zt=t=>{if(ve(t)){for(var e in t)if(Fd.call(t,e))return!1;return!0}return!1},C=t=>t===void 0,Q=t=>Ds.call(t)=="[object String]",ra=t=>Q(t)&&t.trim().length===0,Qe=t=>t===null,z=t=>C(t)||Qe(t),Ae=t=>Ds.call(t)=="[object Number]"&&t==t,Ut=t=>Ae(t)&&t>0,wt=t=>Ds.call(t)==="[object Boolean]",ug=t=>t instanceof FormData,dg=t=>j(og,t),fg=t=>j(ag,t);function Rd(t){return t===null||typeof t!="object"}function Qr(t,e){return{}.toString.call(t)==="[object "+e+"]"}function al(t){return typeof Event<"u"&&Td(t,Event)}function Td(t,e){try{return t instanceof e}catch{return!1}}var hg=[!0,"true",1,"1","yes"],bo=t=>j(hg,t),pg=[!1,"false",0,"0","no"];function Ft(t,e,n,i,r){return e>n&&(i.warn("min cannot be greater than max."),e=n),Ae(t)?t>n?(i.warn(" cannot be greater than max: "+n+". Using max value instead."),n):e>t?(i.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(i.warn(" must be a number. using max or fallback. max: "+n+", fallback: "+r),Ft(r||n,e,n,i))}class gg{constructor(e){this.tt={},this.et=e.et,this.it=Ft(e.bucketSize,0,100,e.rt),this.nt=Ft(e.refillRate,0,this.it,e.rt),this.st=Ft(e.refillInterval,0,864e5,e.rt)}ot(e,n){var i=Math.floor((n-e.lastAccess)/this.st);i>0&&(e.tokens=Math.min(e.tokens+i*this.nt,this.it),e.lastAccess=e.lastAccess+i*this.st)}consumeRateLimit(e){var n,i=Date.now(),r=String(e),s=this.tt[r];return s?this.ot(s,i):this.tt[r]=s={tokens:this.it,lastAccess:i},s.tokens===0||(s.tokens--,s.tokens===0&&((n=this.et)==null||n.call(this,e)),s.tokens===0)}stop(){this.tt={}}}var ct="Mobile",es="iOS",Xt="Android",si="Tablet",$d=Xt+" "+si,Md="iPad",Ld="Apple",Nd=Ld+" Watch",zi="Safari",oi="BlackBerry",Od="Samsung",Bd=Od+"Browser",Dd=Od+" Internet",Tn="Chrome",mg=Tn+" OS",jd=Tn+" "+es,ll="Internet Explorer",Ud=ll+" "+ct,cl="Opera",vg=cl+" Mini",ul="Edge",Hd="Microsoft "+ul,ei="Firefox",Wd=ei+" "+es,er="Nintendo",tr="PlayStation",ti="Xbox",qd=Xt+" "+ct,zd=ct+" "+zi,Ni="Windows",sa=Ni+" Phone",Rc="Nokia",oa="Ouya",Vd="Generic",yg=Vd+" "+ct.toLowerCase(),Gd=Vd+" "+si.toLowerCase(),aa="Konqueror",Kd="Oculus Browser",ts="Vivaldi",Yd="Yandex",ns="Whale",la="DuckDuckGo",Jd="Pale Moon",is="Waterfox",Vi="Brave",Zd="Google Search App",Se="(\\d+(\\.\\d+)?)",Eo=new RegExp("Version/"+Se),_g=new RegExp(ti,"i"),wg=new RegExp(tr+" \\w+","i"),bg=new RegExp(er+" \\w+","i"),dl=new RegExp(oi+"|PlayBook|BB10","i"),Eg={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Xd=function(t,e,n,i){e=e||"";var r=(function(s){return s!=null&&s.brave?Vi:null})(n);return r||(i!=null&&i.detectGoogleSearchApp&&j(t,"GSA/")?Zd:j(t," OPR/")&&j(t,"Mini")?vg:j(t," OPR/")?cl:dl.test(t)?oi:j(t,"IE"+ct)||j(t,"WPDesktop")?Ud:j(t,"OculusBrowser")?Kd:j(t,Bd)?Dd:j(t,ul)||j(t,"Edg/")?Hd:j(t,ts+"/")?ts:j(t,"YaBrowser/")?Yd:j(t,ns+"/")?ns:j(t,la+"/")||j(t,"Ddg/")?la:j(t,"FBIOS")?"Facebook "+ct:j(t,"UCWEB")||j(t,"UCBrowser")?"UC Browser":j(t,"CriOS")?jd:j(t,"CrMo")||j(t,Tn)?Tn:j(t,Xt)&&j(t,zi)?qd:j(t,"FxiOS")?Wd:j(t.toLowerCase(),aa.toLowerCase())?aa:j(t,Vi+"/")?Vi:((s,o)=>o&&j(o,Ld)||(function(a){return j(a,zi)&&!j(a,Tn)&&!j(a,Xt)})(s))(t,e)?j(t,ct)?zd:zi:j(t,"PaleMoon/")?Jd:j(t,is+"/")?is:j(t,ei)?ei:j(t,"MSIE")||j(t,"Trident/")?ll:j(t,"Gecko")?ei:"")},Sg={[Ud]:[new RegExp("rv:"+Se)],[Hd]:[new RegExp(ul+"?\\/"+Se)],[Tn]:[new RegExp("("+Tn+"|CrMo)\\/"+Se)],[jd]:[new RegExp("CriOS\\/"+Se)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+Se)],[zi]:[Eo],[zd]:[Eo],[cl]:[new RegExp("(Opera|OPR)\\/"+Se)],[ei]:[new RegExp(ei+"\\/"+Se)],[Wd]:[new RegExp("FxiOS\\/"+Se)],[aa]:[new RegExp("Konqueror[:/]?"+Se,"i")],[oi]:[new RegExp(oi+" "+Se),Eo],[qd]:[new RegExp("android\\s"+Se,"i")],[Dd]:[new RegExp(Bd+"\\/"+Se)],[Kd]:[new RegExp("OculusBrowser\\/"+Se)],[ts]:[new RegExp(ts+"\\/"+Se)],[Yd]:[new RegExp("YaBrowser\\/"+Se)],[ns]:[new RegExp(ns+"\\/"+Se)],[Vi]:[new RegExp(Vi+"\\/"+Se)],[la]:[new RegExp("(DuckDuckGo|Ddg)\\/"+Se)],[Jd]:[new RegExp("PaleMoon\\/"+Se)],[is]:[new RegExp(is+"\\/"+Se)],[Zd]:[new RegExp("GSA\\/"+Se)],[ll]:[new RegExp("(rv:|MSIE )"+Se)],Mozilla:[new RegExp("rv:"+Se)]},xg=function(t,e,n,i){var r=Xd(t,e,n,i),s=Sg[r];if(C(s))return null;for(var o=0;s.length>o;o++){var a=t.match(s[o]);if(a)return parseFloat(a[a.length-2])}return null},Tc=[[new RegExp(ti+"; "+ti+" (.*?)[);]","i"),t=>[ti,t&&t[1]||""]],[new RegExp(er,"i"),[er,""]],[new RegExp(tr,"i"),[tr,""]],[dl,[oi,""]],[new RegExp(Ni,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[sa,""];if(new RegExp(ct).test(e)&&!/IEMobile\b/.test(e))return[Ni+" "+ct,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var i=Eg[n[1]]||"";return/arm/i.test(e)&&(i="RT"),[Ni,i]}return[Ni,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[es,[t[3],t[4],t[5]||"0"].join(".")]:[es,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=C(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+Xt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Xt+")","i"),t=>t&&t[2]?[Xt,[t[2],t[3],t[4]||"0"].join(".")]:[Xt,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[mg,""]],[/Linux|debian/i,["Linux",""]]],$c=function(t){return bg.test(t)?er:wg.test(t)?tr:_g.test(t)?ti:new RegExp(oa,"i").test(t)?oa:new RegExp("("+sa+"|WPDesktop)","i").test(t)?sa:/iPad/.test(t)?Md:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Nd:dl.test(t)?oi:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(Rc,"i").test(t)?Rc:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(ct).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?Xt:$d:new RegExp("(pda|"+ct+")","i").test(t)?yg:new RegExp(si,"i").test(t)&&!new RegExp(si+" pc","i").test(t)?Gd:""},Ig=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Mc(t,e){return typeof(n=t)=="string"&&Ig.test(n)?t:e();var n}function hn(t){return t&&t.split("#")[0]}function fl(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Lc(t,e,n){return Qd.apply(this,arguments)}function Qd(){return(Qd=ce((function*(t,e,n){var i;try{return yield Promise.race([t,new Promise(((r,s)=>{i=fl((()=>{try{n?.(),r()}catch(o){s(o)}}),e)}))])}finally{clearTimeout(i)}}))).apply(this,arguments)}var kg=t=>t instanceof Error,ef={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Cg=ef.info;function tf(t){if(wt(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(U(t))return{arrayValue:{values:t.map((e=>tf(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function rs(t){var e=[];for(var n in t){var i=t[n];Qe(i)||C(i)||e.push({key:n,value:tf(i)})}return e}function Ag(t,e){var n=ef[t.level||"info"]||Cg,i=n.text,r=n.number,s=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),z(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),z(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=I({},o,t.attributes||{}),l={timeUnixNano:s,observedTimeUnixNano:s,severityNumber:r,severityText:i,body:{stringValue:t.body},attributes:rs(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),C(t.trace_flags)||(l.flags=t.trace_flags),l}function nf(t,e,n){return I({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function rf(t,e,n,i){return{resourceLogs:[{resource:{attributes:rs(e)},scopeLogs:[{scope:{name:n,version:i},logRecords:t}]}]}}let Pg=class{constructor(t,e,n,i,r,s,o){var a;s===void 0&&(s=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=i,this.ht=r,this.dt=s,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Ag(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Log was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return i}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return ce((function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally((()=>{t.ct=null}))),t.ct}))()}Ft(){var t=this;return ce((function*(){var e;t.Et();var n=(e=t._instance.getPersistedProperty(Wt.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var i=n.length,r=0;n.length>0&&i>r;){var s,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=rf(l.map((d=>d.record)),t.Lt(),(s=t.vt)!==null&&s!==void 0?s:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(Wt.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return ce((function*(){var n,i=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(Wt.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(Wt.LogsQueue,r.slice(i)),yield e.dt()}))()}Lt(){return nf(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(Wt.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(Wt.LogsQueue,n),this.kt>n.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=fl((()=>{this.Nt=void 0,this.It()}),t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(Wt.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return ce((function*(){e.Et();var n=e.flush().catch((()=>{}));t!==void 0?yield Lc(n,t):yield n}))()}flushWithTimeout(t){var e=this;return ce((function*(){var n=e.flush();yield Lc(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var So=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Nc(t){return String(t)+"000000"}function Oc(t,e,n,i){var r="";return i&&(r=Object.keys(i).sort().map((s=>JSON.stringify(s)+":"+JSON.stringify(i[s]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let Fg=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=ce((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),i=n().finally((()=>{this.ct===i&&(this.ct=null)}));return this.ct=i,i}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var n,i;try{n=e.attributes?I({},e.attributes):void 0,i=Oc(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(i);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(i,r)}var s=this.Ut.get(e.name);s===void 0?this.Ut.set(e.name,e.type):s===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+s+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(So.length+1).fill(0)});var i=t.hist;i.count+=1,i.sum+=e,i.min=Math.min(i.min,e),i.max=Math.max(i.max,e),i.bucketCounts[(function(r,s){for(var o=0;s.length>o;o++)if(s[o]>=r)return o;return s.length})(e,So)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Metric was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return i}$t(){this.Nt||(this.Nt=fl((()=>{this.Nt=void 0,this.flush().catch((t=>{this.rt.error("Metrics flush failed:",t)}))}),this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return ce((function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var n=t.Wt,i=yield t._instance.Jt(t.Gt(e));if(n===t.Wt)switch(i.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",i.error)}}}))()}Gt(t){return e=this.Xt(t),n=(function(s,o,a){return I({},s.resourceAttributes,{"service.name":s.serviceName||"unknown_service"},s.environment&&{"deployment.environment":s.environment},s.serviceVersion&&{"service.version":s.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),i=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:rs(n)},scopeMetrics:[{scope:{name:i,version:r},metrics:e}]}]};var e,n,i,r}Xt(t){var e=Nc(Date.now()),n=new Map;for(var i of t.values()){var r,s=Oc(i.type,i.name,i.unit,void 0),o=n.get(s);o||(o=I({name:i.name},i.unit&&{unit:i.unit}),i.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:i.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},n.set(s,o));var a=rs((r=i.attributes)!==null&&r!==void 0?r:{}),l=Nc(i.windowStartMs);if(i.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=i.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(i.type==="gauge"){var d,f={attributes:a,timeUnixNano:e,asDouble:(d=i.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(f)}else i.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:i.hist.count,sum:i.hist.sum,min:i.hist.min,max:i.hist.max,bucketCounts:i.hist.bucketCounts,explicitBounds:So})}return Array.from(n.values())}Yt(t){var e,n;for(var i of t){var r=i[0],s=i[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,s.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=s.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(s.hist)if(o.hist){o.hist.count+=s.hist.count,o.hist.sum+=s.hist.sum,o.hist.min=Math.min(o.hist.min,s.hist.min),o.hist.max=Math.max(o.hist.max,s.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=s.hist.bucketCounts[a]}else o.hist=s.hist}else this.Qt()&&this.Bt.set(r,s)}}};var kr,Bc,xo;function Rg(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return xo&&n.length===Bc||(Bc=n.length,xo=n.reduce(((i,r)=>{kr||(kr={});var s=kr[r];if(s)i[s[0]]=s[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){i[u]=c,kr[r]=[u,c];break}}return i}),{})),xo}}class Tg{constructor(e,n,i){i===void 0&&(i=[]),this.coercers=e,this.stackParser=n,this.modifiers=i}buildFromUnknown(e,n){n===void 0&&(n={});var i=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(i,n,0).apply(e),s=this.buildParsingContext(n),o=this.parseStacktrace(r,s);return{$exception_list:this.convertToExceptionList(o,i),$exception_level:"error"}}modifyFrames(e){var n=this;return ce((function*(){for(var i of e)i.stacktrace&&i.stacktrace.frames&&U(i.stacktrace.frames)&&(i.stacktrace.frames=yield n.applyModifiers(i.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var i,r;return e.cause!=null&&(i=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),I({},e,{cause:i,stack:r})}applyChunkIds(e,n){return e.map((i=>(i.filename&&n&&(i.chunk_id=n[i.filename]),i)))}applyCoercers(e,n){for(var i of this.coercers)if(i.match(e))return i.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return ce((function*(){var i=e;for(var r of n.modifiers)i=yield r(i);return i}))()}convertToExceptionList(e,n){var i,r,s,o={type:e.type,value:e.value,mechanism:{type:(i=n.type)!==null&&i!==void 0?i:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(s=e.synthetic)!==null&&s!==void 0&&s}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,I({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Rg(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,i){i===void 0&&(i=0);var r=(s,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(s,a)}};return I({},n,{syntheticException:i==0?n.syntheticException:void 0,mechanism:e,apply:s=>r(s,i),next:s=>r(s,i+1)})}}var ai="?";function ca(t,e,n,i,r){var s={platform:t,filename:e,function:n===""?ai:n,in_app:!0};return C(i)||(s.lineno=i),C(r)||(s.colno=r),s}var sf=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,i=t.indexOf("safari-web-extension")!==-1;return n||i?[t.indexOf("@")!==-1?t.split("@")[0]:ai,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},$g=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Mg=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lg=/\((\S*)(?::(\d+))(?::(\d+))\)/,Ng=(t,e)=>{var n=$g.exec(t);if(n)return ca(e,n[1],ai,+n[2],+n[3]);var i=Mg.exec(t);if(i){if(i[2]&&i[2].indexOf("eval")===0){var r=Lg.exec(i[2]);r&&(i[2]=r[1],i[3]=r[2],i[4]=r[3])}var s=sf(i[1]||ai,i[2]);return ca(e,s[1],s[0],i[3]?+i[3]:void 0,i[4]?+i[4]:void 0)}},Og=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Bg=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Dg=(t,e)=>{var n=Og.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var i=Bg.exec(n[3]);i&&(n[1]=n[1]||"eval",n[3]=i[1],n[4]=i[2],n[5]="")}var r=n[3],s=n[1]||ai,o=sf(s,r);return ca(e,r=o[1],s=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},Dc=/\(error: (.*)\)/;class jg{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var i=Q(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:i?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return Qr(e,"DOMException")}isDOMError(e){return Qr(e,"DOMError")}}class Ug{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Td(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var i=e.message;return String(i.error&&typeof i.error.message=="string"?i.error.message:i)}getStack(e){return e.stacktrace||e.stack||void 0}}class Hg{constructor(){}match(e){return!!Qr(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var i;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return I({},r,{stack:(i=this.pe(e))!==null&&i!==void 0?i:r.stack,synthetic:!0})}fe(e){return Q(e.message)&&e.message.length>0}pe(e){var n=e;if(Q(n.filename)&&n.filename.length>0){var i,r,s=(i=n.lineno)!==null&&i!==void 0?i:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error - at `+n.filename+":"+s+":"+o}}}var Wg=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class qg{match(e){return typeof e=="string"}coerce(e,n){var i,r=this.getInfos(e),s=r[0],o=r[1];return{type:s??"Error",value:o??e,stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}getInfos(e){var n="Error",i=e,r=e.match(Wg);return r&&(n=r[1],i=r[2]),[n,i]}}var zg=["fatal","error","warning","log","info","debug"];function of(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var i=n.length;i>0;i--){var r=n.slice(0,i).join(", ");if(e>=r.length)return i===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class Vg{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var i,r,s=this.getErrorPropertyFromObject(e);return s?n.apply(s):{type:this.getType(e),value:this.getValue(e),stack:(i=this.getStack(e))!==null&&i!==void 0?i:(r=n.syntheticException)==null?void 0:r.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return al(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var i=this.getObjectClassName(e);return(i&&i!=="Object"?"'"+i+"'":"Object")+" captured as exception with keys: "+of(e)}isSeverityLevel(e){return Q(e)&&!ra(e)&&zg.indexOf(e)>=0}getStack(e){try{return Q(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:Q(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var i=e[n];if(kg(i))return i}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class Gg{match(e){return al(e)}coerce(e,n){var i,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+of(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class Kg{match(e){return Rd(e)}coerce(e,n){var i;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class Yg{match(e){return Qr(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!al(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var i,r=this.getUnhandledRejectionReason(e);return Rd(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var ss="$message",os="$timestamp",Jg=new Set([ss,os]),Io={enabled:!0,max_bytes:32768};function as(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:Io.enabled,max_bytes:Xg(t.max_bytes,Io.max_bytes)}:I({},Io)}class Zg{constructor(e){this.Ke=[],this.Je=0,this.Ne=as(e)}setConfig(e){this.Ne=as(e),this.Xe()}add(e){var n=(function(r){var s;try{s=Ad(r)}catch{return}try{var o=JSON.parse(s);if(!ve(o))return;var a=o,l=a[ss],u=a[os];return!Q(l)||l.trim().length===0||!Q(u)&&!Ae(u)?void 0:{step:a,json:s}}catch{return}})(e);if(n){var i=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var s=encodeURIComponent(r),o=0,a=0;s.length>a;a++)s[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);i>this.Ne.max_bytes||(this.Ke.push({step:n.step,bytes:i}),this.Je+=i,this.Xe())}}getAttachable(){return this.Ke.map((e=>e.step))}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function Xg(t,e){if(!Ae(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var af=function(t,e){var n=(e===void 0?{}:e).debugEnabled,i={k(r){if(w&&(oe.DEBUG||w.POSTHOG_DEBUG||n)&&!C(w.console)&&w.console){for(var s=("__rrweb_original__"in w.console[r])?w.console[r].__rrweb_original__:w.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];s(t,...a)}},debug(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("debug",...s)},info(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("log",...s)},warn(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("warn",...s)},error(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("error",...s)},critical(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];console.error(t,...s)},uninitializedWarning(r){i.error("You must initialize PostHog before calling "+r)},createLogger:(r,s)=>af(t+" "+r,s)};return i},A=af("[PostHog.js]"),ye=A.createLogger,Qg=ye("[ExternalScriptsLoader]"),ko=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return Qg.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var i=P?.querySelectorAll("script");if(i){for(var r,s=function(){if(i[o].src===e){var l=i[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;i.length>o;o++)if(r=s())return r.v}var a=()=>{if(!P)return n("document not found");var l=P.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")P.head.appendChild(l);else{var u,c=P.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):P.body.appendChild(l)}};P!=null&&P.body?a():P?.addEventListener("DOMContentLoaded",a)};O.__PosthogExtensions__=O.__PosthogExtensions__||{},O.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var i;if(t.config.strict_script_versioning)i=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var s=3e5;r=r+"&t="+Math.floor(Date.now()/s)*s}i=t.requestRouter.endpointFor("assets",r)}ko(t,i,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");ko(t,o,n)}},O.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var i=t.requestRouter.endpointFor("api",e);ko(t,i,n)};oe.DEBUG=!1,oe.LIB_VERSION="1.415.7",oe.LIB_NAME="web";var lf="$people_distinct_id",nr="$device_id",Co="$device_model",Oi="__alias",Bi="__timers",ua="$autocapture_disabled_server_side",da="$heatmaps_enabled_server_side",fa="$exception_capture_enabled_server_side",ha="$error_tracking_suppression_rules",pa="$error_tracking_capture_extension_exceptions",ga="$web_vitals_enabled_server_side",hl="$dead_clicks_enabled_server_side",pl="$product_tours_enabled_server_side",ma="$web_vitals_allowed_metrics",Fn="$session_recording_remote_config",cf="$replay_sample_rate",uf="$replay_override_sampling",df="$replay_override_linked_flag",ff="$replay_override_url_trigger",hf="$replay_override_event_trigger",Zn="$sesid",gl="$session_is_sampled",In="$enabled_feature_flags",Di="$active_feature_flags",Dr="$early_access_features",va="$feature_flag_details",ji="$feature_flag_payloads",jr="$feature_flag_request_id",ls="$minimal_flag_called_events",Ct="$override_feature_flags",kn="$override_feature_flag_payloads",Ht="$stored_person_properties",Cn="$stored_group_properties",ya="$surveys",cs="$surveys_loaded_at",_a="$surveys_activated",Ur="$surveys_activated_session",Hr="$surveys_activated_timestamps",Ui="ph_product_tours",Pn="$flag_call_reported",Hi="$flag_call_reported_session_id",Wr="$feature_flag_errors",Gi="$feature_flag_evaluated_at",ft="$user_state",wa="$client_session_props",ba="$capture_rate_limit",Ea="$initial_campaign_params",Sa="$initial_referrer_info",us="$initial_person_info",ds="$epp",Cr="$posthog_cookieless",pf="$cookieless_mode",gf="$sdk_debug_extensions_init_method",mf="$sdk_debug_extensions_init_time_ms",vf="$sdk_debug_recording_script_not_loaded",ml="PostHog loadExternalDependency extension not found.",An="on_reject",Vt="always",qn="anonymous",_n="identified",xa="identified_only",fs="visibilitychange",hs="beforeunload",Yn="$pageview",Ao="$pageleave",Po="$identify",jc="$groupidentify";function Ar(t,e){U(t)&&t.forEach(e)}function ae(t,e){if(!z(t))if(U(t))t.forEach(e);else if(ug(t))t.forEach(((i,r)=>e(i,r)));else for(var n in t)Fd.call(t,n)&&e(t[n],n)}var me=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;e>i;i++)n[i-1]=arguments[i];for(var r of n)for(var s in r)r[s]!==void 0&&(t[s]=r[s]);return t};function qr(t){for(var e=Object.keys(t),n=e.length,i=new Array(n);n--;)i[n]=[e[n],t[e[n]]];return i}var Uc=function(t){try{return t()}catch{return}},em=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),i=0;e>i;i++)n[i]=arguments[i];return t.apply(this,n)}catch(r){A.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),A.critical(r)}}},vl=function(t){var e={};return ae(t,(function(n,i){(Q(n)&&n.length>0||Ae(n))&&(e[i]=n)})),e},tm=["herokuapp.com","vercel.app","netlify.app"];function nm(t){var e=t?.hostname;if(!Q(e))return!1;var n=e.split(".").slice(-2).join(".");for(var i of tm)if(n===i)return!1;return!0}function we(t,e,n,i){var r=i??{},s=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:s!==void 0&&s,passive:o===void 0||o})}function Ia(t){return t.name==="ph_toolbar_internal"}var yf=t=>{if(P){try{for(var e=t+"=",n=P.cookie.split(";").filter((s=>s.length)),i=0;n.length>i;i++){for(var r=n[i];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return Ae(t)&&isFinite(t)&&Math.floor(t)===t});class ps{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,i,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(i)||!Number.isInteger(r)||0>e||0>n||0>i||0>r||e>0xffffffffffff||n>4095||i>1073741823||r>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=e/Math.pow(2,40),s[1]=e/Math.pow(2,32),s[2]=e/Math.pow(2,24),s[3]=e/Math.pow(2,16),s[4]=e/256,s[5]=e,s[6]=112|n>>>8,s[7]=n,s[8]=128|i>>>24,s[9]=i>>>16,s[10]=i>>>8,s[11]=i,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new ps(s)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new ps(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var i=this.bytes[n]-e.bytes[n];if(i!==0)return Math.sign(i)}return 0}}class im{generate(){var e=this.generateOrAbort();if(!C(e))return e;this.S=0;var n=this.generateOrAbort();if(C(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return ps.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new rm}}var Hc,_f=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};w&&!C(w.crypto)&&crypto.getRandomValues&&(_f=t=>crypto.getRandomValues(t));class rm{nextUint32(){return this.R.length>this.O||(_f(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var qt=()=>sm().toString(),sm=()=>(Hc||(Hc=new im)).generate(),ki="",om=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,Gt={N:()=>!!P,j(t){A.error("cookieStore error: "+t)},P:yf,H(t){var e;try{e=JSON.parse(Gt.P(t))||{}}catch{}return e},F(t,e,n,i,r){if(!P)return!1;try{var s="",o="",a=(function(c,d){if(d){var f=(function(h,g){if(g===void 0&&(g=P),ki)return ki;if(!g||["localhost","127.0.0.1"].includes(h))return"";for(var m=h.split("."),v=Math.min(m.length,8),b="dmn_chk_"+qt();!ki&&v--;){var x=m.slice(v).join("."),y=b+"=1;domain=."+x+";path=/";g.cookie=y+";max-age=3",g.cookie.includes(b)&&(g.cookie=y+";max-age=0",ki=x)}return ki})(c);if(!f){var p=(h=>{var g=h.match(om);return g?g[0]:""})(c);p!==f&&A.info("Warning: cookie subdomain discovery mismatch",p,f),f=p}return f?"; domain=."+f:""}return""})(P.location.hostname,i);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),s="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+s+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&A.warn("cookieStore warning: large cookie, len="+u.length),P.cookie=u,!0}catch{return!1}},q(t,e){if(P!=null&&P.cookie)try{Gt.F(t,"",-1,e)}catch{return}}},Fo=null,de={N(){if(!Qe(Fo))return Fo;var t=!0;if(C(w))t=!1;else try{var e="__mplssupport__";de.F(e,"xyz"),de.P(e)!=='"xyz"'&&(t=!1),de.q(e)}catch{t=!1}return t||A.error("localStorage unsupported; falling back to cookie store"),Fo=t,t},j(t){A.error("localStorage error: "+t)},P(t){try{return w?.localStorage.getItem(t)}catch(e){de.j(e)}return null},H(t){try{return JSON.parse(de.P(t))||{}}catch{}return null},F(t,e){try{return w?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){de.j(n)}return!1},q(t){try{w?.localStorage.removeItem(t)}catch(e){de.j(e)}}},am=[nr,"distinct_id",Zn,gl,ds,us,ft],Pr={},lm={N:()=>!0,j(t){A.error("memoryStorage error: "+t)},P:t=>Pr[t]||null,H:t=>Pr[t]||null,F:(t,e)=>(Pr[t]=e,!0),q(t){delete Pr[t]}},wn=null,xe={N(){if(!Qe(wn))return wn;if(wn=!0,C(w))wn=!1;else try{var t="__support__";xe.F(t,"xyz"),xe.P(t)!=='"xyz"'&&(wn=!1),xe.q(t)}catch{wn=!1}return wn},j(t){A.error("sessionStorage error: ",t)},P(t){try{return w?.sessionStorage.getItem(t)}catch(e){xe.j(e)}return null},H(t){try{return JSON.parse(xe.P(t))||null}catch{}return null},F(t,e){try{return w?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){xe.j(n)}return!1},q(t){try{w?.sessionStorage.removeItem(t)}catch(e){xe.j(e)}}};class cm{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===Vt||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===An}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,n=e.token,i=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(i?i+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return bo(e)?1:j(pg,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?de:Gt;if(!this.ni||this.ni!==n){this.ni=n;var i=e==="localStorage"?Gt:de;i.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(bo(i.P(this.ri))),i.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ze?.doNotTrack,ze?.msDoNotTrack,O.doNotTrack].some((e=>bo(e)))}}function wf(t,e){var n,i=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!We(i))return e;try{var r=i(e);return Q(r)&&r?r:e}catch(s){return A.error("Error in get_current_url, falling back to window.location.href",s),e}}var bf="__POSTHOG_TOOLBAR__",um=1,dm=3,fm=11;function Wc(t){return t instanceof Element&&(t.id===bf||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function pn(t){return!!t&&t.nodeType===um}function st(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Ef(t){return!!t&&t.nodeType===dm}function Sf(t){return!!t&&t.nodeType===fm&&pn(t.host)}var xf=1e3;function yl(t){return t?Bs(t).split(/\s+/):[]}function qc(t,e){var n=(function(i){var r,s=w==null||(r=w.location)==null?void 0:r.href;return C(s)?void 0:wf(i,s)})(e);return!!(n&&t&&t.some((i=>n.match(i))))}function gs(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return yl(e)}function If(t){return z(t)?null:Bs(t).split(/(\s+)/).filter((e=>Ki(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function ir(t){var e="";return Ca(t)&&!Pf(t)&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;Ef(n)&&n.textContent&&(e+=(i=If(n.textContent))!==null&&i!==void 0?i:"")})),Bs(e)}function Ro(t){var e;return C(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var _l=["a","button","form","input","select","textarea","label"];function ka(t,e){if(C(e))return!0;var n,i=function(s){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(s,o))))return{v:!0}};for(var r of t)if(n=i(r))return n.v;return!1}function kf(t){var e=t.parentNode;return!(!e||!pn(e))&&e}var hm=[".ph-no-autocapture","[data-ph-no-autocapture]"],Cf=["next","previous","prev",">","<"],pm=[...Cf,"+","-","−","–"],zc=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,Vc=[".ph-no-rageclick",".ph-no-capture"],gm=["","text","search","email","password","url","tel","number"];function Gc(t,e){if(!w||wl(t))return!1;var n,i,r,s,o;if(wt(e)?(n=!!e&&Vc,i=void 0,r=!1):(n=(s=e?.css_selector_ignorelist)!==null&&s!==void 0?s:Vc,i=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!pn(l))&&(!!st(l,"textarea")||(st(l,"input")?j(gm,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Af(t,!1).targetElementList;return!(function(l,u){if(l===!1||C(l))return!1;var c;if(l===!0)c=Cf;else{if(!U(l))return!1;if(l.length>10)return A.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var f=d.safeText,p=d.ariaLabel;return c.some((h=>zc(f,h)||zc(p,h)))}))})(i,a.map((l=>{var u;return{safeText:ir(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!ka(a,n)}var wl=t=>!t||st(t,"html")||!pn(t),Af=(t,e)=>{if(!w||wl(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,i=[t],r=t;r.parentNode&&!st(r,"body");)if(Sf(r.parentNode))i.push(r.parentNode.host),r=r.parentNode.host;else{var s=kf(r);if(!s)break;if(e||_l.indexOf(s.tagName.toLowerCase())>-1)n=!0;else try{var o=w.getComputedStyle(s);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}i.push(s),r=s}return{parentIsUsefulElement:n,targetElementList:i}};function Ca(t){for(var e=new Set,n=0,i=t;i.parentNode&&!st(i,"body");i=i.parentNode){if(n++>=xf||e.has(i))return!1;e.add(i);var r=gs(i);if(j(r,"ph-sensitive")||j(r,"ph-no-capture"))return!1}if(j(gs(t),"ph-include"))return!0;var s=t.type||"";if(Q(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!Q(o)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(o.replace(/[^a-zA-Z0-9]/g,""))}function Pf(t){return!!(st(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||st(t,"select")||st(t,"textarea")||t.getAttribute("contenteditable")==="true")}var Kc=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),Yc=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,mm=[16,15,14,13],vm=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),Jc=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),Zc=/[0-9A-Za-z_]/;function ym(t){for(var e=0,n=!1,i=t.length-1;i>=0;i--){var r=t.charCodeAt(i)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Ki(t,e){if(e===void 0&&(e=!0),z(t))return!1;if(Q(t)){t=Bs(t);var n=e?Kc.test((t||"").replace(/[- ]/g,"")):(function(r){var s;for(Yc.lastIndex=0;s=Yc.exec(r);){var o=s[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of mm){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(Kc.test(d)&&ym(d))return!0}}}return!1})(t);if(n)return!1;var i=e?vm.test(t):(function(r){var s;for(Jc.lastIndex=0;s=Jc.exec(r);){var o=s[1],a=s[3];if(!(o&&a&&Zc.test(o)&&Zc.test(a)))return!0}return!1})(t);if(i)return!1}return!0}function Xc(t){var e=ir(t);return Ki(e=(e+" "+Ff(t)).trim())?e:""}function Ff(t){var e="";return t&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;if(n&&((i=n.tagName)==null?void 0:i.toLowerCase())==="span")try{var r=ir(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+Ff(n)).trim())}catch(s){A.error("[AutoCapture]",s)}})),e}function Qc(t){return t.replace(/"|\\"/g,'\\"')}function _m(t){var e=t.attr__class;if(e)return U(e)?e:yl(e)}var Fr=ye("[Dead Clicks]"),wm=()=>!0,bm=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(hl)),i=t.instance.config.capture_dead_clicks;return wt(i)?i:!!ve(i)||n};class eu{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,i){this.instance=e,this.isEnabled=n,this.onCapture=i,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[hl]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,i;(n=O.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Fr.error("failed to load script",r):e()}))}oi(){var e;if(P){if(!this.si&&(e=O.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=ve(this.instance.config.capture_dead_clicks)?I({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=O.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(P),Fr.info("starting...")}}else Fr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Fr.info("stopping..."))}}var To=ye("[SegmentIntegration]"),Rf="posthog-js";function Tf(t,e){var n=e===void 0?{}:e,i=n.organization,r=n.projectId,s=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,f,p,h,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var v,b=((d=c.exception)==null?void 0:d.values)||[],x=b.map((E=>I({},E,{stacktrace:E.stacktrace?I({},E.stacktrace,{type:"raw",frames:(E.stacktrace.frames||[]).map((k=>I({},k,{platform:"web:javascript"})))}):void 0}))),y={$exception_message:((f=b[0])==null?void 0:f.value)||c.message,$exception_type:(p=b[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:x,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((h=b[0])==null?void 0:h.value)||c.message,$sentry_exception_type:(g=b[0])==null?void 0:g.type,$sentry_tags:c.tags};return i&&r&&(y.$sentry_url=(s||"https://sentry.io/organizations/")+i+"/issues/?project="+r+"&query="+c.event_id),u&&((v=t.exceptions)==null||v.sendExceptionEvent(y)),c}}class Em{constructor(e,n,i,r,s,o){this.name=Rf,this.setupOnce=function(a){a(Tf(e,{organization:n,projectId:i,prefix:r,severityAllowList:s,sendExceptionsToPostHog:o==null||o}))}}}class tu{constructor(e){this.li=(n,i,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(A.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var i,r=this.vi(e,n);return this.ui={pathname:(i=w?.location.pathname)!==null&&i!==void 0?i:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var i=this.ui;if(!i)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:i.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var o=s.maxScrollHeight,a=s.lastScrollY,l=s.maxScrollY,u=s.maxContentHeight,c=s.lastContentY,d=s.maxContentY;if(!(C(o)||C(a)||C(l)||C(u)||C(c)||C(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var f=o>1?Ft(a/o,0,1,A):1,p=o>1?Ft(l/o,0,1,A):1,h=u>1?Ft(c/u,0,1,A):1,g=u>1?Ft(d/u,0,1,A):1;r=me(r,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:f,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:h,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return i.pathname&&(r.$prev_pageview_pathname=i.pathname),i.timestamp&&(r.$prev_pageview_duration=(e.getTime()-i.timestamp.getTime())/1e3),r}}var $o=["flags","surveys"],Sm={[lf]:{exposure:"hidden"},[Oi]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Bi]:{exposure:"hidden"},[ua]:{exposure:"event"},[da]:{exposure:"hidden"},[fa]:{exposure:"event"},[ha]:{exposure:"hidden"},[pa]:{exposure:"event"},[ga]:{exposure:"event"},[hl]:{exposure:"event"},[pl]:{exposure:"hidden"},[ma]:{exposure:"event"},[Fn]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[Zn]:{exposure:"hidden"},[gl]:{exposure:"event"},[cf]:{exposure:"event",shouldSkipFromEventProperties:t=>Qe(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[In]:{exposure:"hidden",storageGroup:"flags"},[Di]:{exposure:"hidden",storageGroup:"flags"},[Dr]:{exposure:"hidden"},[va]:{exposure:"hidden",storageGroup:"flags"},[ji]:{exposure:"hidden",storageGroup:"flags"},[jr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ls]:{exposure:"hidden",storageGroup:"flags"},[Ct]:{exposure:"hidden"},[kn]:{exposure:"hidden"},[Ht]:{exposure:"hidden"},[Cn]:{exposure:"hidden"},[ya]:{exposure:"hidden",storageGroup:"surveys"},[cs]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[_a]:{exposure:"event"},[Ur]:{exposure:"hidden"},[Hr]:{exposure:"hidden"},[Ui]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[Pn]:{exposure:"hidden"},[Hi]:{exposure:"hidden"},[Wr]:{exposure:"hidden"},[Gi]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ft]:{exposure:"hidden"},[wa]:{exposure:"hidden"},[ba]:{exposure:"hidden"},[Ea]:{exposure:"hidden"},[Sa]:{exposure:"hidden"},[us]:{exposure:"hidden"},[ds]:{exposure:"hidden"},[uf]:{exposure:"event"},[df]:{exposure:"event"},[ff]:{exposure:"event"},[hf]:{exposure:"event"},[gf]:{exposure:"event"},[mf]:{exposure:"event"},[vf]:{exposure:"event"},$sdk_debug_replay_event_trigger_status:{exposure:"event"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:"event"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:"event"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:"event"},$sdk_debug_replay_trigger_groups_count:{exposure:"event"},$sdk_debug_replay_url_trigger_status:{exposure:"event"},$session_recording_start_reason:{exposure:"event"}},xm=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],bn=t=>{var e=Sm[t];if(e)return e;for(var n of xm){var i=n[1];if(t.indexOf(n[0])===0)return i}},Xn=(t,e)=>{try{return JSON.stringify(t,((n,i)=>typeof i=="bigint"?i.toString():i),e)}catch{return Ad(t)}},ms=t=>{var e=P?.createElement("a");return C(e)?null:(e.href=t,e)},li=function(t,e){for(var n,i=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;i.length>r;r++){var s=i[r].split("=");if(s[0]===e){n=s;break}}if(!U(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{A.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},rr=function(t,e,n){if(!t||!e||!e.length)return t;for(var i=t.split("#"),r=i[1],s=(i[0]||"").split("?"),o=s[1],a=s[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");U(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var f=a;return o!=null&&(f+="?"+u.join("&")),r!=null&&(f+="#"+r),f},vs=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},$f=(t,e)=>t>=e&&Id(),Mf=(t,e,n,i)=>{if(t===0){if(Id()){var r=e+1;return r===n&&i(),r}return e}return 0},Rr="https?://(.*)",ci=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Im=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...ci],sr="",km=["li_fat_id"];function Lf(t,e,n){if(!P)return{};var i,r=e?[...ci,...n||[]]:[],s=Nf(rr(P.URL,r,sr),t),o=(i={},ae(km,(function(a){var l=yf(a);i[a]=l||null})),i);return me(o,s)}function Nf(t,e){var n=Im.concat(e||[]),i={};return ae(n,(function(r){var s=li(t,r);i[r]=s||null})),i}function Of(t){var e=(function(s){return s?s.search(Rr+"google.([^/?]*)")===0?"google":s.search(Rr+"bing.com")===0?"bing":s.search(Rr+"yahoo.com")===0?"yahoo":s.search(Rr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",i={};if(!Qe(e)){i.$search_engine=e;var r=P?li(P.referrer,n):"";r.length&&(i.ph_keyword=r)}return i}function nu(){return navigator.language||navigator.userLanguage}var ys="$direct";function Bf(){return P?.referrer||ys}function Df(t,e,n){n===void 0&&(n=!1);var i=t?[...ci,...e||[]]:[],r=n?hn(_e?.href):_e?.href,s=r?.substring(0,1e3);return{r:Bf().substring(0,1e3),u:s?rr(s,i,sr):void 0}}function jf(t,e){var n;e===void 0&&(e=!1);var i=t.r,r=t.u,s=e?hn(r):r,o={$referrer:i,$referring_domain:i==null?void 0:i==ys?ys:(n=ms(i))==null?void 0:n.host};if(s){o.$current_url=s;var a=ms(s);o.$host=a?.host,o.$pathname=a?.pathname;var l=Nf(s);me(o,l)}if(i){var u=Of(i);me(o,u)}return o}function Uf(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Cm(){try{return new Date().getTimezoneOffset()}catch{return}}var Am={flags:Gi,surveys:cs},Pm=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],zn="main";class Mo{constructor(e,n,i){if(i===void 0&&(i=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=i,this.props={},this.mi=void 0,this.yi=(s=>{var o="";return s.token&&(o=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&A.info("Persistence loaded",e.persistence,I({},this.props)),this.update_config(e,e,n),this.save(),w){var r=()=>this.flush();we(w,"beforeunload",r,{capture:!1}),we(w,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Ae(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){Pm.indexOf(e.persistence.toLowerCase())===-1&&(A.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,i=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...am,...o];return I({},de,{H(u){try{var c={};try{c=Gt.H(u)||{}}catch{}var d,f=JSON.parse(de.P(u)||"{}");if(a){var p={};for(var h in c){var g=c[h];Qe(g)||g===""||(p[h]=g)}d=me(f,p)}else d=me(c,f);return de.F(u,d),d}catch{}return null},F(u,c,d,f,p,h){var g=de.F(u,c,void 0,void 0,h);try{var m={};l.forEach((v=>{c[v]&&(m[v]=c[v])})),Object.keys(m).length&&Gt.F(u,m,d,f,p,h)}catch(v){de.j(v)}return g},q(u,c){try{w?.localStorage.removeItem(u),Gt.q(u,c)}catch(d){de.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),r=!1,s=e.persistence.toLowerCase();return s==="localstorage"&&de.N()?(n=de,r=!0):s==="localstorage+cookie"&&i.N()?(n=i,r=!0):s==="sessionstorage"&&xe.N()?n=xe:s==="memory"?n=lm:s==="cookie"?n=Gt:i.N()?(n=i,r=!0):n=Gt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return ae(this.props,((n,i)=>{var r=bn(i);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[i]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=me({},e)),this.pi&&this.Ci()}}Ci(){for(var e of $o){var n=de.H(this.Si(e));if(n&&!Zt(n)){var i=this.Mi(e);i.persisted=!0,this.Ti(e)||(i.fingerprint=this.Ei(n,e)),this.Ii(e,n)||me(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var i;return((i=bn(n))==null?void 0:i.storageGroup)===e}))}Ii(e,n){var i=Am[e];if(!i)return!1;var r=n[i],s=this.props[i];return Ae(r)&&Ae(s)&&s>r}refreshKey(e){var n;if(!this.xi){var i=this.pi?(n=bn(e))==null?void 0:n.storageGroup:void 0,r=i?de.H(this.Si(i)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(i){var s=this.ii.H(this.yi);if(s&&e in s)return void this.Pi(e,s[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?C(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,zn))}Li(){var e=this.Di(),n=e.main,i=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,zn),$o)){var s,o=i[r];(!Zt(o)||(s=this.ci[r])!=null&&s.persisted)&&this.Oi(de,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return ae(this.props,((i,r)=>{var s,o=(s=bn(r))==null?void 0:s.storageGroup;o?n[o][r]=i:e[r]=i})),{main:e,groups:n}}Ei(e,n){if(n===zn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var i={};return ae(e,((r,s)=>{var o;i[s]=(o=bn(s))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(i)}Oi(e,n,i,r){var s=this.Mi(r);if(r===zn||s.dirty||C(s.fingerprint)){var o;try{if((o=this.Ei(i,r))===s.fingerprint)return void(s.dirty=!1)}catch{o=void 0}e.F(n,i,this.$i,this.Ni,this.qi,this.Ne.debug)?(s.dirty=!1,r!==zn&&(s.persisted=!0),C(o)||(s.fingerprint=o)):this.Ne.debug&&A.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,i=n!==void 0&&n;if(C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!i&&this.gi)for(var r of $o)de.q(this.Si(r));i?delete this.ci[zn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,i){if(ve(e)){C(n)&&(n="None"),this.$i=C(i)?this.ji:i;var r=!1;if(ae(e,((s,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,s),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(ve(e)){this.$i=C(n)?this.ji:n;var i=!1;if(ae(e,((r,s)=>{e.hasOwnProperty(s)&&(this.props[s]!==r||ve(r)||U(r))&&(this.Pi(s,r),i=!0)})),i)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,i=!1;for(var r of n)r in this.props&&(this.Ri(r),i=!0);i&&this.save()}update_campaign_params(){var e=P?.URL;if(e!==this.mi){var n=Lf(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);Zt(vl(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=P?.referrer)?Of(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Bf(),$referring_domain:P!=null&&P.referrer&&((e=ms(P.referrer))==null?void 0:e.host)||ys},void 0)}set_initial_person_info(){this.props[Ea]||this.props[Sa]||this.register_once({[us]:Df(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};ae([Sa,Ea],(r=>{var s=this.props[r];s&&ae(s,(function(o,a){e["$initial_"+ia(a)]=o}))}));var n=this.props[us];if(n){var i=(function(r,s){s===void 0&&(s=!1);var o=jf(r,s),a={};return ae(o,(function(l,u){a["$initial_"+ia(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);me(e,i)}return e}safe_merge(e){return ae(this.props,(function(n,i){i in e||(e[i]=n)})),e}update_config(e,n,i){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!i),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((f,p)=>f===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),s=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=s,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var i=this.props[Bi]||{};i[e]=n,this.Pi(Bi,i),this.save()}remove_event_timer(e){var n=this.props[Bi]||{},i=n[e];return C(i)||(delete n[e],this.Pi(Bi,n),this.save()),i}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var i;this.props[e]=n,(i=bn(e))!=null&&i.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,i=(n=bn(e))==null?void 0:n.storageGroup;i&&(this.Mi(i).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Tr(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&We(n.then)&&n.then(void 0,(()=>{}))}}}}var qe={GZipJS:"gzip-js",Base64:"base64"},Ci={Activation:"events",Cancellation:"cancelEvents"},Lo={Popover:"popover",API:"api",Widget:"widget"},Kt={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},No={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Aa={Popover:"popover",Inline:"inline"},Fm={SHOWN:"product tour shown"},iu={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},ru=ye("[RateLimiter]");class Rm{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var i=n.text;if(i&&i.length)try{(JSON.parse(i).quota_limited||[]).forEach((r=>{ru.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void ru.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:i})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,i,r;e===void 0&&(e=!1);var s=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(i=this.instance.persistence)==null?void 0:i.get_property(ba))!==null&&n!==void 0?n:{tokens:s,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>s&&(l.tokens=s);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(Ae(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(r=this.instance.persistence)==null||r.set_property(ba,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!U(n)||!n.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&_e!=null&&_e.pathname)return""+((e=_e.origin)!==null&&e!==void 0?e:"")+_e.pathname}Hi(e){var n,i,r=this.captureEventsBurstLimit,s=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(i=this.instance).get_session_id)==null?void 0:n.call(i):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+s+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return cn.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void cn.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return cn.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((n=>{this.Zi(n.json,n),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){cn.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&P&&P.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||cn.warn("Failed to fetch remote config from PostHog."):cn.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(r){cn.error("Error applying remote config",r)}if(e?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var i;(i=this._instance.featureFlags)==null||i.ensureFlagsLoaded()}catch(r){cn.error("Error loading feature flags",r)}}}var pt=Uint8Array,Xe=Uint16Array,ui=Uint32Array,bl=new pt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),El=new pt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),su=new pt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wf=function(t,e){for(var n=new Xe(31),i=0;31>i;++i)n[i]=e+=1<i;++i)for(var s=n[i];n[i+1]>s;++s)r[s]=s-n[i]<<5|i;return[n,r]},qf=Wf(bl,2),Pa=qf[1];qf[0][28]=258,Pa[258]=28;for(var ou=Wf(El,0)[1],zf=new Xe(32768),be=0;32768>be;++be){var Vn=(43690&be)>>>1|(21845&be)<<1;zf[be]=((65280&(Vn=(61680&(Vn=(52428&Vn)>>>2|(13107&Vn)<<2))>>>4|(3855&Vn)<<4))>>>8|(255&Vn)<<8)>>>1}var Yi=function(t,e,n){for(var i=t.length,r=0,s=new Xe(e);i>r;++r)++s[t[r]-1];var o,a=new Xe(e);for(r=0;e>r;++r)a[r]=a[r-1]+s[r-1]<<1;for(o=new Xe(i),r=0;i>r;++r)o[r]=zf[a[t[r]-1]++]>>>15-t[r];return o},Ln=new pt(288);for(be=0;144>be;++be)Ln[be]=8;for(be=144;256>be;++be)Ln[be]=9;for(be=256;280>be;++be)Ln[be]=7;for(be=280;288>be;++be)Ln[be]=8;var _s=new pt(32);for(be=0;32>be;++be)_s[be]=5;var Tm=Yi(Ln,9),$m=Yi(_s,5),Vf=function(t){return(t/8>>0)+(7&t&&1)},Gf=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var i=new(t instanceof Xe?Xe:t instanceof ui?ui:pt)(n-e);return i.set(t.subarray(e,n)),i},Dt=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8},Ai=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8,t[i+2]|=n>>>16},Oo=function(t,e){for(var n=[],i=0;t.length>i;++i)t[i]&&n.push({s:i,f:t[i]});var r=n.length,s=n.slice();if(!r)return[new pt(0),0];if(r==1){var o=new pt(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(E,k){return E.f-k.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var f=s[0].s;for(i=1;r>i;++i)s[i].s>f&&(f=s[i].s);var p=new Xe(f+1),h=Fa(n[c-1],p,0);if(h>e){i=0;var g=0,m=h-e,v=1<i;++i){var b=s[i].s;if(e>=p[b])break;g+=v-(1<>>=m;g>0;){var x=s[i].s;e>p[x]?g-=1<=0&&g;--i){var y=s[i].s;p[y]==e&&(--p[y],++g)}h=e}return[new pt(p),h]},Fa=function(t,e,n){return t.s==-1?Math.max(Fa(t.l,e,n+1),Fa(t.r,e,n+1)):e[t.s]=n},au=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Xe(++e),i=0,r=t[0],s=1,o=function(l){n[i++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++s;else{if(!r&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(r),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(r);s=1,r=t[a]}return[n.subarray(0,i),e]},Pi=function(t,e){for(var n=0,i=0;e.length>i;++i)n+=t[i]*e[i];return n},Ra=function(t,e,n){var i=n.length,r=Vf(e+2);t[r]=255&i,t[r+1]=i>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var s=0;i>s;++s)t[r+s+4]=n[s];return 8*(r+4+i)},lu=function(t,e,n,i,r,s,o,a,l,u,c){Dt(e,c++,n),++r[256];for(var d=Oo(r,15),f=d[0],p=d[1],h=Oo(s,15),g=h[0],m=h[1],v=au(f),b=v[0],x=v[1],y=au(g),E=y[0],k=y[1],R=new Xe(19),S=0;b.length>S;++S)R[31&b[S]]++;for(S=0;E.length>S;++S)R[31&E[S]]++;for(var F=Oo(R,7),$=F[0],M=F[1],L=19;L>4&&!$[su[L-1]];--L);var B,Y,G,T,q=u+5<<3,se=Pi(r,Ln)+Pi(s,_s)+o,Pe=Pi(r,f)+Pi(s,g)+o+14+3*L+Pi(R,$)+(2*R[16]+3*R[17]+7*R[18]);if(se>=q&&Pe>=q)return Ra(e,c,t.subarray(l,l+u));if(Dt(e,c,1+(se>Pe)),c+=2,se>Pe){B=Yi(f,p),Y=f,G=Yi(g,m),T=g;var ee=Yi($,M);for(Dt(e,c,x-257),Dt(e,c+5,k-1),Dt(e,c+10,L-4),c+=14,S=0;L>S;++S)Dt(e,c+3*S,$[su[S]]);c+=3*L;for(var Ee=[b,E],$e=0;2>$e;++$e){var ie=Ee[$e];for(S=0;ie.length>S;++S)Dt(e,c,ee[he=31&ie[S]]),c+=$[he],he>15&&(Dt(e,c,ie[S]>>>5&127),c+=ie[S]>>>12)}}else B=Tm,Y=Ln,G=$m,T=_s;for(S=0;a>S;++S)if(i[S]>255){var he;Ai(e,c,B[257+(he=i[S]>>>18&31)]),c+=Y[he+257],he>7&&(Dt(e,c,i[S]>>>23&31),c+=bl[he]);var ue=31&i[S];Ai(e,c,G[ue]),c+=T[ue],ue>3&&(Ai(e,c,i[S]>>>5&8191),c+=El[ue])}else Ai(e,c,B[i[S]]),c+=Y[i[S]];return Ai(e,c,B[256]),c+Y[256]},Mm=new ui([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Lm=(function(){for(var t=new ui(256),e=0;256>e;++e){for(var n=e,i=9;--i;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Bo=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Nm(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(f){for(var p=d,h=0;f.length>h;++h)p=Lm[255&p^f[h]]^p>>>8;d=p},d(){return 4294967295^d}}})(),i=t.length;n.p(t);var r,s,o,a,l,u=(a=10+((r=e).filename&&r.filename.length+1||0),l=8,(function(d,f,p,h,g,m){var v=d.length,b=new pt(h+v+5*(1+Math.floor(v/7e3))+g),x=b.subarray(h,b.length-g),y=0;if(!f||8>v)for(var E=0;v>=E;E+=65535){var k=E+65535;v>k?y=Ra(x,y,d.subarray(E,k)):(x[E]=!0,y=Ra(x,y,d.subarray(E,v)))}else{for(var R=Mm[f-1],S=R>>>13,F=8191&R,$=(1<E;++E){var he=G(E),ue=32767&E,Le=L[he];if(M[ue]=Le,L[he]=ue,E>=$e){var N=v-E;if((Pe>7e3||Ee>24576)&&N>423){y=lu(d,x,0,T,q,se,ee,Ee,ie,E-ie,y),Ee=Pe=ee=0,ie=E;for(var Z=0;286>Z;++Z)q[Z]=0;for(Z=0;30>Z;++Z)se[Z]=0}var Fe=2,Ne=0,et=F,Re=ue-Le&32767;if(N>2&&he==G(E-Re))for(var Ce=Math.min(S,N)-1,tt=Math.min(32767,E),Un=Math.min(258,N);tt>=Re&&--et&&ue!=Le;){if(d[E+Fe]==d[E+Fe-Re]){for(var Ke=0;Un>Ke&&d[E+Ke]==d[E+Ke-Re];++Ke);if(Ke>Fe){if(Fe=Ke,Ne=Re,Ke>Ce)break;var Hn=Math.min(Re,Ke-2),Nt=0;for(Z=0;Hn>Z;++Z){var Ot=E-Re+Z+32768&32767,gt=Ot-M[Ot]+32768&32767;gt>Nt&&(Nt=gt,Le=Ot)}}}Re+=(ue=Le)-(Le=M[ue])+32768&32767}if(Ne){T[Ee++]=268435456|Pa[Fe]<<18|ou[Ne];var an=31&Pa[Fe],Ei=31&ou[Ne];ee+=bl[an]+El[Ei],++q[257+an],++se[Ei],$e=E+Fe,++Pe}else T[Ee++]=d[E],++q[d[E]]}}y=lu(d,x,!0,T,q,se,ee,Ee,ie,E-ie,y)}return Gf(b,0,h+Vf(y)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,f){var p=f.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>f.level?4:f.level==9?2:0,d[9]=3,f.mtime!=0&&Bo(d,4,Math.floor(new Date(f.mtime||Date.now())/1e3)),p){d[3]=8;for(var h=0;p.length>=h;++h)d[h+10]=p.charCodeAt(h)}})(u,e),Bo(u,c-8,n.d()),Bo(u,c-4,i),u}var Om=!!ea||!!ol,Kf="text/plain",zr=!1,Yf=(t,e)=>{var n=t.split("#"),i=n[1],r=n[0].split("?"),s=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(i?"#"+i:"")},js=function(t,e,n){var i;n===void 0&&(n=!0);var r=t.split("?"),s=r[0],o=r[1],a=I({},e),l=(i=o?.split("&").map((c=>{var d,f=c.split("="),p=f[0],h=n&&(d=a[p])!==null&&d!==void 0?d:f[1];return delete a[p],p+"="+h})))!==null&&i!==void 0?i:[],u=(function(c,d){var f,p;d===void 0&&(d="&");var h=[];return ae(c,(function(g,m){C(g)||C(m)||m==="undefined"||(f=encodeURIComponent((v=>v instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),h[h.length]=p+"="+f)})),h.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Do=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===qe.GZipJS){var i=Nm((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new pt(a.length+(a.length>>>1)),d=0,f=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var h=new pt(d+8+(u-p<<1));h.set(c),c=h}var g=a.charCodeAt(p);128>g?f(g):2048>g?(f(192|g>>>6),f(128|63&g)):g>55295&&57344>g?(f(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),f(128|g>>>12&63),f(128|g>>>6&63),f(128|63&g)):(f(224|g>>>12),f(128|g>>>6&63),f(128|63&g))}return Gf(c,0,d)})(Xn(e)),{mtime:0});return{contentType:Kf,body:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength),estimatedSize:i.byteLength}}if(n===qe.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(Xn(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:Xn(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=Xn(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Jf=t=>{var e,n,i=()=>t.transport==="sendBeacon"?{url:js(t.url,{compression:qe.Base64}),encodedBody:Do(I({},t,{compression:qe.Base64,Ji:void 0}))}:{url:Yf(t.url,"compression"),encodedBody:Do(I({},t,{compression:void 0,Ji:void 0}))};try{e=Do(t)}catch(r){if(Ac(t.compression,li(t.url,"compression")))return A.error("Failed to gzip request body, sending uncompressed payload",r),i();throw r}return e&&Ac(t.compression,li(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?ta(new Uint8Array(n)):ArrayBuffer.isView(n)&&ta(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(zr=!0,i()):{url:t.url,encodedBody:e}},Zf=t=>{try{return Jf(t)}catch(e){return A.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Bm=(function(){var t=ce((function*(e){var n=Xn(e.data),i=yield(function(s,o,a){return na.apply(this,arguments)})(n,oe.DEBUG,{rethrow:!0});if(!i)return e;var r=yield i.arrayBuffer();return I({},e,{Ji:{contentType:Kf,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Dm=/Failed to fetch|NetworkError|Load failed/i,Xf=t=>t?.name==="TypeError"&&Dm.test(t?.message||""),Qf=t=>{var e=Zf(t);if(e){var n=e.url,i=e.encodedBody,r=i??{},s=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;ae(t.headers,(function(h,g){l.append(g,h)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(Ec){var d=new Ec;u={signal:d.signal,timeout:setTimeout((()=>{var h,g;c=!0,d.abort((h=t.timeout,(g=new Error("PostHog request timed out"+(h?" after "+h+"ms":""))).name="AbortError",g))}),t.timeout)}}var f=h=>{c&&h?.name==="AbortError"||Xf(h)?A.warn(h):A.error(h),t.callback==null||t.callback({statusCode:0,error:h})};try{var p;ol(n,I({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((h=>h.text().then((g=>{var m={statusCode:h.status,text:g};if(h.status===200)try{m.json=JSON.parse(g)}catch(v){A.error(v)}t.callback==null||t.callback(m)})))).catch(f).finally((()=>u?clearTimeout(u.timeout):null))}catch(h){u&&clearTimeout(u.timeout),f(h)}}},Ta=t=>{try{var e,n=Jf(t),i=n.url,r=n.encodedBody,s=r??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(ze.sendBeacon(i,l))return;var u=U(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(U(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=f=>U(t.data)?f:I({},t.data,{batch:f});return Ta(I({},t,{data:d(u.slice(0,c))})),void Ta(I({},t,{data:d(u.slice(c))}))}A.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Qf(I({},t,{Yi:!0}))}catch(f){A.warn("Beacon send failed",f)}},cu=(t,e,n,i)=>{var r=i==="query"?e==="POST"?"sent_at":"_":void 0;return js(n===qe.GZipJS?Yf(t,"compression"):t,I({},r?{[r]:Date.now().toString()}:{},n===qe.GZipJS?{}:{compression:n}))},Vr=[];ol&&Vr.push({transport:"fetch",method:Qf}),ea&&Vr.push({transport:"XHR",method(t){var e=Zf(t);if(e){var n=new ea,i=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=i??{},s=r.contentType,o=r.body;ae(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ze!=null&&ze.sendBeacon&&Vr.push({transport:"sendBeacon",method:Ta});var $a=3e3;class jm{constructor(e,n){this.Xi=!0,this.tr=[],this.er=Ft(n?.flush_interval_ms||$a,250,5e3,A.createLogger("flush interval"),$a),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((i=>i.url.indexOf("/e")===0)),...n.filter((i=>i.url.indexOf("/e")!==0))].map((i=>{this.lr(I({},i,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var n=this.ar(),i=function(){var s=n[r],o=new Date().getTime();s.data&&U(s.data)&&ae(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var r in n)i()}}),this.er))}lr(e){try{this.ir(e)}catch(n){A.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return ae(this.tr,(n=>{var i,r=n,s=(r?r.batchKey:null)||r.url;C(e[s])&&(e[s]=I({},r,{data:[]})),(i=e[s].data)==null||i.push(r.data)})),this.tr=[],e}}var Um=["retriesPerformedSoFar"];class Hm{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!C(w)&&"onLine"in w.navigator&&(this.dr=w.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},we(w,"online",this.vr),we(w,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,i=kd(e,Um);Ut(n)&&(i.url=js(i.url,{retry_count:n})),this._instance._send_request(I({},i,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(I({retriesPerformedSoFar:n},i));r.statusCode===0&&A.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}i.callback==null||i.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+1;var i=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(n),r=Date.now()+i;this.tr.push({retryAt:r,requestOptions:e});var s="Enqueued failed request for retry in "+i;navigator.onLine||(s+=" (Browser is offline)"),A.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],i=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,i.length>0)for(var r of i)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,C(w)||(this.vr&&(w.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(w.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(I({},n,{transport:"sendBeacon"}))}catch(i){A.error(i)}}this.tr=[]}}class Wm{constructor(e){this.yr=()=>{var n,i,r,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(i=this.br.maxScrollHeight)!==null&&i!==void 0?i:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){we(w,"scroll",this.yr,{capture:!0}),we(w,"scrollend",this.yr,{capture:!0}),we(w,"resize",this.yr)}scrollElement(){if(!this._r)return w?.document.documentElement;var e=U(this._r)?this._r:[this._r];for(var n of e){var i=w?.document.querySelector(n);if(i)return i}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var i=this.scrollElement();return i&&i[n]||0}return w?e==="y"?w.scrollY||w.pageYOffset||w.document.documentElement.scrollTop||0:w.scrollX||w.pageXOffset||w.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var qm=t=>Df(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class uu{constructor(e,n,i,r){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[wa]:a})}},this._instance=e,this.Tr=n,this.Mr=i,this.Cr=r||qm,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[wa]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?jf(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return ae(vl(this.getSetOnceProps()),((n,i)=>{i==="$current_url"&&(i="url"),e["$session_entry_"+ia(i)]=n})),e}}class Sl{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((i=>i!==n))}}emit(e,n){for(var i of this.Er[e]||[])i(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Fi=ye("[SessionId]");class du{on(e,n){return this.Ir.on(e,n)}constructor(e,n,i){var r;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Sl,this.Lr=(u,c)=>!(!Ut(u)||!Ut(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===Vt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||qt,this.Nr=i||qt;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*Ft(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Fi.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=xe.H(this.jr),a=xe.H(this.Br);o&&!a?this.Or=o:xe.q(this.jr),xe.F(this.Br,!0)}if((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Fi.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return C(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&xe.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&xe.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?xe.H(this.jr):null}Zr(e){var n=this.Pr;return!Qe(n)&&!Qe(e)&&5e3>Math.abs(e-n)}Ur(e,n,i){var r=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||i!==this._sessionStartTimestamp);this._sessionStartTimestamp=i,this._sessionActivityTimestamp=n,this.Dr=e,s&&!r||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[Zn]:[n,e,i]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Ut(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(Zn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!Qe(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[Zn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=Ut(e)?e:0,i=Ut(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,i)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[Zn];return U(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&w&&(w.removeEventListener(hs,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&xe.q(this.Br)},we(w,hs,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===Vt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var i=n||new Date().getTime(),r=this.Jr(),s=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=Ut(o)&&Math.abs(i-o)>864e5,c=!1,d=!1,f=!s,p=s,h=!f&&!e&&this.Lr(i,a);if(h){(h=this.Xr(i))||Fi.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}f||h||u?(s=this.$r(),l=this.Nr(),Fi.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u}}),o=i,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(Fi.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=Ut(a)&&e&&!u?a:i,v=Ut(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,v),e||this.qr();var b={noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((x=>x(s,l,b))),{sessionId:s,windowId:l,sessionStartTimestamp:v,changeReason:c?b:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var eh=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&Fc(n,e))return!0;try{var i=t?.userAgentData;if(i!=null&&i.brands&&i.brands.some((r=>Fc(r?.brand,e))))return!0}catch{}return!!t.webdriver};function th(){return(th=ce((function*(){var t=ze?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return Q(n)&&n.length>0?n:void 0}catch(i){return void A.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",i)}}))).apply(this,arguments)}var ws=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function jo(t,e,n){return Xn({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var nh={exact:(t,e)=>e.some((n=>t.some((i=>n===i)))),is_not:(t,e)=>e.every((n=>t.every((i=>n!==i)))),regex:(t,e)=>e.some((n=>t.some((i=>ws(n,i))))),not_regex:(t,e)=>e.every((n=>t.every((i=>!ws(n,i))))),icontains:(t,e)=>e.map($r).some((n=>t.map($r).some((i=>n.includes(i))))),not_icontains:(t,e)=>e.map($r).every((n=>t.map($r).every((i=>!n.includes(i))))),gt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>i>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>it.toLowerCase();function ih(t,e){return!t||Object.entries(t).every((n=>{var i=n[1],r=e?.[n[0]];if(C(r)||Qe(r))return!1;var s=[String(r)],o=nh[i.operator];return!!o&&o(i.values,s)}))}var Ma="custom",fu="i.posthog.com",zm=/^\/static\//;class Vm{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+fu,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":Ma),this.en[this.apiHost]}rn(e){if(zm.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var i=this.rn(n);if(i)return""+i+n}if(this.region===Ma)return this.apiHost+n;var r=fu+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function rh(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var te=ye("[Surveys]"),sh="seenSurvey_",oh=t=>{try{var e=(n=>((i,r)=>""+sh+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){te.error("Failed to persist survey seen state",n)}},Gm=[Lo.Popover,Lo.Widget,Lo.API],Km={ignoreConditions:!1,ignoreDelay:!1,displayType:Aa.Popover},Ym=ye("[PostHog ExternalIntegrations]"),Jm={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Zm{constructor(e){this._instance=e}ai(e,n){var i;(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,e,(r=>{if(r)return Ym.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=i[0],u=i[1];!u||(s=O.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(Jm[l],(()=>{var c;(c=O.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=O.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=O.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var i of Object.entries((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class Xm{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return ce((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var i=e.setup(n.nn);i&&(yield i)}catch(s){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&We(n.then)&&n.then(void 0,(i=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}))}catch(i){this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}}}class Qm{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var i={};for(var r of e){var s=n?.get_property(r);C(s)||(i[r]=s)}return i}set(e,n){var i;(i=this._instance.persistence)==null||i.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var hu="extensionsRemoteConfig";class ev{constructor(e){this.an=!1,this.instance=e,this.rt=A,this.un=e.hn,this.kv=new Qm(e),this.onEvent=n=>Tr(this.instance.on("eventCaptured",(i=>{try{n({event:i.event,properties:i.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Tr((()=>{}));var i=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(hu,i);return this.un&&i(this.un),Tr(r)},this.vn=new Xm(A.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(nr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(nr);return typeof e=="string"?e:void 0}get library(){return{name:oe.LIB_NAME,version:oe.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,i,r,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(i=s?.windowId)!==null&&i!==void 0?i:"",sessionStartTimestamp:(r=s?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,i){var r=this;return ce((function*(){i?r.instance.capture(e,n,{timestamp:i.timestamp,uuid:i.uuid,$set:i.set,$set_once:i.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Tr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(hu,e))}sendRequest(e,n){var i=this;return ce((function*(){var r;n===void 0&&(n={});var s=i.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?js(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(i.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,i.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Ji={},Uo=0,bs=()=>{},pu='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ri="Surveys module not available",gu="sanitize_properties is deprecated. Use before_send instead",ah="Invalid value for property_denylist config: ",tv=["token","distinct_id",pf],Jn="posthog",lh=!Om&&Je?.indexOf("MSIE")===-1&&Je?.indexOf("Mozilla")===-1,Ho=t=>{var e;return I({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:nm(P?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:bs,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:_e&&Q(_e?.search)&&_e.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(w==null||(e=w.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){A.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:xa,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:$a},error_tracking:{},_onCapture:bs},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:pm,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},nv=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],mu=t=>{var e={};for(var n of nv){var i=n[0],r=n[1];C(t[i])||(e[r]=t[i])}var s=me({},e,t),o=t.__preview_external_dependency_versioned_paths;return C(o)||(C(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),Q(o)&&C(t.asset_host)&&(s.asset_host=o)),U(t.property_blacklist)&&(C(t.property_denylist)?s.property_denylist=t.property_blacklist:U(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:A.error(ah+t.property_denylist)),s};class iv{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){A.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class nt{pn(e,n){if(e){var i=this.sn.indexOf(e);i!==-1&&this.sn.splice(i,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===Vt||this.config.cookieless_mode===An&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new iv,this.mn=!1,this.version=oe.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Sl,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Ho(),this.SentryIntegration=Em,this.sentryIntegration=i=>(function(r,s){var o=Tf(r,s);return{name:Rf,processEvent:a=>o(a)}})(this,i),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new Wm(this),this.pageViewManager=new tu(this),this.rateLimiter=new Rm(this),this.requestRouter=new Vm(this),this.consent=new cm(this),this.externalIntegrations=new Zm(this);var n=(e=nt.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(o),s?.({})},set_once:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(i=>A.info('send "'+i?.event+'"',i)))}init(e,n,i){if(i&&i!==Jn){var r,s=(r=Ji[i])!==null&&r!==void 0?r:new nt;return s._init(e,n,i),Ji[i]=s,Ji[Jn][i]=s,s}return this._init(e,n,i)}_init(e,n,i){var r,s;n===void 0&&(n={});var o,a=Q(e)?e.trim():"";if(!a)return A.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=Ho(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Ho(n.defaults),u=mu(n),c=me({},l,u,{name:i,token:a});ve(l.rageclick)&&ve(u.rageclick)&&(c.rageclick=me({},l.rageclick,u.rageclick)),ve(l.session_recording)&&ve(u.session_recording)&&(c.session_recording=me({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&A.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:qe.GZipJS;var d=this.En();if(this.persistence=new Mo(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Mo(I({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&xe.N()){var f=xe.H(this.bn);U(f)&&f.forEach((k=>{Q(k)&&this.yn.add(k)}))}else xe.q(this.bn);var p=I({},this.persistence.props),h=I({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new jm((k=>this.Pn(k)),this.config.request_queue_config),this.Rn=new Hm(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new du(this),this.sessionPropsManager=new uu(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((k,R,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(A.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(A.info("Initializing extensions synchronously"),this.Ln(g)),oe.DEBUG=oe.DEBUG||this.config.debug,oe.DEBUG&&A.info("Starting in debug mode",{this:this,config:n,thisC:I({},this.config),p,s:h}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=I({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,v=this.get_distinct_id(),b=this.persistence.get_property(ft);if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&b===qn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&b===_n)A.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var x=this.config.get_device_id(qt()),y=n.bootstrap.isIdentifiedID?x:m;this.persistence.set_property(ft,n.bootstrap.isIdentifiedID?_n:qn),this.register({distinct_id:m,$device_id:y})}}if(g)this.register_once({distinct_id:Cr,$device_id:null},"");else if(!this.get_distinct_id()){var E=this.config.get_device_id(qt());this.register_once({distinct_id:E,$device_id:E},""),this.persistence.set_property(ft,qn)}return we(w,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(k,R){var S=k.config.segment;if(!S)return R();(function(F,$){var M=F.config.segment;if(!M)return $();var L=Y=>{var G=()=>Y.anonymousId()||qt();F.config.get_device_id=G,Y.id()&&(F.register({distinct_id:Y.id(),$device_id:G()}),F.persistence.set_property(ft,_n)),$()},B=M.user();"then"in B&&We(B.then)?B.then(L):L(B)})(k,(()=>{S.register((F=>{typeof Promise<"u"&&Promise.resolve||To.warn("This browser does not have Promise support, and can not use the segment integration");var $=(M,L)=>{if(!L)return M;M.event.userId||M.event.anonymousId===F.get_distinct_id()||(To.info("No userId set, resetting PostHog"),F.reset()),M.event.userId&&M.event.userId!==F.get_distinct_id()&&(To.info("UserId set, identifying with PostHog"),F.identify(M.event.userId));var B=F.calculateEventProperties(L,M.event.properties);return M.event.properties=Object.assign({},B,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>$(M,M.event.event),page:M=>$(M,Yn),identify:M=>$(M,Po),screen:M=>$(M,"$screen")}})(k)).then((()=>{R()}))}))})(this,(()=>this.On())):this.On(),We(this.config._onCapture)&&this.config._onCapture!==bs&&(A.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(k=>this.config._onCapture(k.event,k)))),this.config.ip&&A.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return th.apply(this,arguments)})().then((k=>{k&&this.register({[Co]:k})})).catch(bs),this}Fn(){var e,n,i,r,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(i=nt.__defaultExtensionClasses)==null?void 0:i.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.call(this),this.Dn=void 0,this.featureFlags=new a(this)),We(this.featureFlags.onReloading)&&We(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,i,r,s,o,a,l,u=performance.now(),c=I({},nt.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(i=this.surveys)!==null&&i!==void 0?i:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,bm)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((f=>{f.initialize&&d.push((()=>{f.initialize==null||f.initialize()}))})),d.push((()=>{if(this.Nn){var f=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(f)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var i=e.shift();if(i)try{i()}catch(s){A.error("Error initializing extension:",s)}}var r=Math.round(performance.now()-n);this.register_for_session({[gf]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[mf]:r}),this.config.__preview_deferred_init_extensions&&A.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!P||!P.body)return A.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var i,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=j(r.supportedCompression,qe.GZipJS)?qe.GZipJS:j(r.supportedCompression,qe.Base64)?qe.Base64:void 0),(i=r.analytics)!=null&&i.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:xa}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(i){A.critical("`loaded` function failed",i)}if(this.Bn(),this.config.internal_or_test_user_hostname&&_e!=null&&_e.hostname){var e=_e.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Hf(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Ar(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,i,r,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Ao),(i=this.logs)==null||i.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(Ao,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?lh?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=I({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(C(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var i,r,s,o=I({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,f=(i=o.transport)!==null&&i!==void 0?i:"fetch";f==="sendBeacon"&&C(o.compression)&&o.data&&(o.compression=qe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=U(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,v){return v===void 0&&(v=new Date().toISOString()),U(m)?m.map((b=>I({},b,{sent_at:v}))):I({},m,{sent_at:v})})(o.data))),o.url=cu(o.url,o.method,o.compression,o.timestampMode);var p=Vr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),h=(r=(s=(function(m,v){for(var b=0;m.length>b;b++)if(m[b].transport===f)return m[b]})(p))==null?void 0:s.method)!==null&&r!==void 0?r:p[0].method;if(!h)throw new Error("No available transport method");var g=m=>{try{h(m)}catch(v){Xf(v)?A.warn(v):A.error(v),o.callback==null||o.callback({statusCode:0,error:v})}};f!=="sendBeacon"&&o.data&&o.compression===qe.GZipJS&&rg&&typeof Promise<"u"&&!zr?Bm(o).then((m=>{g(m)})).catch((m=>{if(Pc(m))return zr=!0,void g(I({},o,{compression:void 0,url:cu(n.url,n.method,void 0,n.timestampMode)}));(v=>{if(!v||typeof v!="object")return!1;var b="name"in v?String(v.name):"";return Pc(v)||b===Cd})(m)&&(zr=!0),g(o)})):h(o)})(I({},e,{callback:n=>{var i,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(i=(r=this.config).on_request_error)==null||i.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){Uo++;try{var n,i=[],r=[],s=[];Ar(e,(a=>{if(a)if(U(n=a[0]))s.push(a);else if(We(a))try{a.call(this)}catch(l){A.error("Error executing queued PostHog call",a,l)}else U(a)&&n==="alias"?i.push(a):U(a)&&n.indexOf("capture")!==-1&&We(this[n])?s.push(a):r.push(a)}));var o=function(a,l){Ar(a,(function(u){try{if(U(u[0])){var c=l;ae(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){A.error("Error executing queued PostHog call",u,d)}}))};o(i,this),o(r,this),o(s,this)}finally{Uo--}}push(e){if(Uo>0&&U(e)&&Q(e[0])){var n=nt.prototype[e[0]];We(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,i){var r,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!C(e)&&Q(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=i!=null&&i.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){n!=null&&n.$current_url&&!Q(n?.$current_url)&&(A.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||i!=null&&i.Wn||A.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,f=i?.timestamp||d,p=Mc(i?.uuid,qt),h={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},f,p)};e===Yn&&this.config.__preview_capture_bot_pageviews&&u&&(h.event="$bot_pageview",h.properties.$browser_type="bot"),c&&(h.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&h.properties.$feature_flag_has_experiment===!1&&this.get_property(ls)===!0;i?.$set&&!g&&(h.$set=i?.$set);var m=i?.$unset;m&&(h.$unset=m);var v,b,x,y=g?void 0:this.Vn(i?.$set_once,e!==jc,e===Po);if(y&&(h.$set_once=y),i!=null&&i._noTruncate||(s=this.config.properties_string_max_length,o=h,a=L=>Q(L)?L.slice(0,s):L,l=new Set,h=(function L(B,Y){if(B!==Object(B))return a?a(B):B;if(!l.has(B)){var G;if(l.add(B),U(B))G=[],Ar(B,(q=>{G.push(L(q))}));else{var T={};ae(B,((q,se)=>{l.has(q)||(T[se]=L(q))})),G=T}return G}})(o)),h.timestamp=f,C(i?.timestamp)||(h.properties.$event_time_override_provided=!0,h.properties.$event_time_override_system_time=d),g&&(h.properties=(function(L,B){B===void 0&&(B=[]);var Y={},G=T=>{L[T]!==void 0&&(Y[T]=L[T])};return sg.forEach(G),B.forEach(G),Y})(h.properties,tv)),e===Kt.DISMISSED||e===Kt.SENT){var E=n?.[No.SURVEY_ID],k=n?.[No.SURVEY_ITERATION];oh({id:E,current_iteration:k}),h.$set=I({},h.$set,{[(v={id:E,current_iteration:k},b=e===Kt.SENT?"responded":"dismissed",x="$survey_"+b+"/"+v.id,v.current_iteration&&v.current_iteration>0&&(x="$survey_"+b+"/"+v.id+"/"+v.current_iteration),x)]:!0})}else e===Kt.SHOWN&&(h.$set=I({},h.$set,{[No.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Fm.SHOWN){var R=n?.[iu.TOUR_TYPE];R&&(h.$set=I({},h.$set,{[iu.TOUR_LAST_SEEN_DATE+"/"+R]:new Date().toISOString()}))}var S=I({},h.properties.$set,h.$set);if(Zt(S)||this.setPersonPropertiesForFlags(S),!z(this.config.before_send)){var F=this.Pt(h);if(!F)return;(h=F).uuid=Mc(h.uuid,qt)}this.dn.emit("eventCaptured",h);var $=(r=i?._url)!==null&&r!==void 0?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:$,data:h,compression:"best-available",timestampMode:i?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test($)?"body":"capture-body",batchKey:i?._batchKey,transport:i?.transport};return!this.config.request_batching||i&&(i==null||!i._batchKey)||i!=null&&i.send_instantly?this.Pn(M):this.In.enqueue(M),h}A.critical("This capture call is ignored due to client rate limiting.")}}else A.error("No event name provided to posthog.capture")}else A.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new ev(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var i=this._n.indexOf(e);i!==-1&&this._n.splice(i,1)}}}calculateEventProperties(e,n,i,r,s){if(i=i||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=I({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pf]=!0),e==="$snapshot"){var l=I({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!Q(a.distinct_id)&&!Ae(a.distinct_id)||ra(a.distinct_id))&&A.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(E,k,R,S){var F,$,M,L;if(S===void 0&&(S=!1),!Je)return{};var B,Y=E?[...ci,...k||[]]:[],G=(function(Un){for(var Ke=0;Tc.length>Ke;Ke++){var Hn=Tc[Ke],Nt=Hn[1],Ot=Hn[0].exec(Un),gt=Ot&&(We(Nt)?Nt(Ot,Un):Nt);if(gt)return gt}return["",""]})(Je),T=G[0],q=G[1],se=(B=typeof navigator<"u"?navigator:void 0)!=null&&B.brave?{brave:!0}:{},Pe={};C(R)||(Pe.detectGoogleSearchApp=R);var ee={},Ee=(F=navigator)==null||(F=F.userAgentData)==null?void 0:F.platform,$e=($=navigator)==null?void 0:$.maxTouchPoints,ie=w==null||(M=w.screen)==null?void 0:M.width,he=w==null||(L=w.screen)==null?void 0:L.height,ue=w?.devicePixelRatio;C(Ee)||(ee.userAgentDataPlatform=Ee),C($e)||(ee.maxTouchPoints=$e),C(ie)||(ee.screenWidth=ie),C(he)||(ee.screenHeight=he),C(ue)||(ee.devicePixelRatio=ue);var Le,N,Z,Fe,Ne,et,Re,Ce,tt=me(vl({$os:T,$os_version:q,$browser:Xd(Je,navigator.vendor,se,Pe),$device:$c(Je),$device_type:(N=Je,Z=ee,Ce=$c(N),Ce===Md||Ce===$d||Ce==="Kobo"||Ce==="Kindle Fire"||Ce===Gd?si:Ce===er||Ce===ti||Ce===tr||Ce===oa?"Console":Ce===Nd?"Wearable":Ce?ct:Z?.userAgentDataPlatform==="Android"&&((Fe=Z?.maxTouchPoints)!==null&&Fe!==void 0?Fe:0)>0?600>Math.min((Ne=Z?.screenWidth)!==null&&Ne!==void 0?Ne:0,(et=Z?.screenHeight)!==null&&et!==void 0?et:0)/((Re=Z?.devicePixelRatio)!==null&&Re!==void 0?Re:1)?ct:si:"Desktop"),$timezone:Uf(),$timezone_offset:Cm()}),{$current_url:rr(S?hn(_e?.href):_e?.href,Y,sr),$host:_e?.host,$pathname:_e?.pathname,$raw_user_agent:Je.length>1e3?Je.substring(0,997)+"...":Je,$browser_version:xg(Je,navigator.vendor,se,Pe),$browser_language:nu(),$browser_language_prefix:(Le=nu(),typeof Le=="string"?Le.split("-")[0]:void 0),$screen_height:w?.screen.height,$screen_width:w?.screen.width,$viewport_height:w?.innerHeight,$viewport_width:w?.innerWidth,$lib:oe.LIB_NAME,$lib_version:oe.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return oe.SDK_DIST_CHANNEL&&(tt.$sdk_dist_channel=oe.SDK_DIST_CHANNEL),tt})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,i.getTime()),f=d.windowId;a.$session_id=d.sessionId,a.$window_id=f}this.sessionPropsManager&&me(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&me(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(E){a.$sdk_debug_error_capturing_properties=String(E)}if(this.requestRouter.region===Ma&&(a.$lib_custom_api_host=this.config.api_host),u=e!==Yn||s?e!==Ao||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(i):this.pageViewManager.doPageView(i,r),a=me(a,u),e===Yn&&P&&(a.title=P.title),!C(o)){var h=i.getTime()-o;a.$duration=parseFloat((h/1e3).toFixed(3))}Je&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();ae(["$referrer","$referring_domain"],(E=>{E in g&&delete m[E]}));var v={};if(this._n.length>0)for(var b of this._n.slice())try{me(v,b())}catch(E){A.error("Failed to produce browser extension event properties",E)}(a=me({},c,g,m,I({},v,a))).$is_identified=this._isIdentified(),U(this.config.property_denylist)?ae(this.config.property_denylist,(function(E){delete a[E]})):A.error(ah+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var x=this.config.sanitize_properties;x&&(A.error(gu),a=x(a,e));var y=this.Zn();return a.$process_person_profile=y,y&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,i){var r;if(n===void 0&&(n=!0),i===void 0&&(i=!1),!this.persistence||!this.Zn()||this.mn&&!i)return e;var s=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=me({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(A.error(gu),a=l(a,"$set_once")),n&&(this.mn=!0),Zt(a)?void 0:a}register(e,n){var i;(i=this.persistence)==null||i.register(e,n)}register_once(e,n,i){var r;(r=this.persistence)==null||r.register_once(e,n,i)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((i=>this.yn.add(i))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!xe.N())xe.q(this.bn);else{var n=[];this.yn.forEach((i=>n.push(i))),n.length>0?xe.F(this.bn,n):xe.q(this.bn)}}getFeatureFlag(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var i,r;return(i=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&i!==void 0?i:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,i){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,i)}updateEarlyAccessFeatureEnrollment(e,n,i){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,i)}getEarlyAccessFeatures(e,n,i){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,i)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ri}),()=>{})}onSessionId(e){var n,i;return(n=(i=this.sessionManager)==null?void 0:i.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Ri})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Ri})}renderSurvey(e,n){var i;(i=this.surveys)==null||i.renderSurvey(e,n)}displaySurvey(e,n){var i;n===void 0&&(n=Km),(i=this.surveys)==null||i.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,i;return(n=(i=this.surveys)==null?void 0:i.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Ri}}canRenderSurveyAsync(e,n){var i,r;return n===void 0&&(n=!1),(i=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&i!==void 0?i:Promise.resolve({visible:!1,disabledReason:Ri})}Jn(e){return!e||ra(e)?(A.critical("Unique user id has not been set in posthog.identify"),!1):e===Cr?(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,i){if(!this.__loaded||!this.persistence)return A.uninitializedWarning("posthog.identify");if(Ae(e)&&(e=e.toString(),A.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(nr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(Oi)&&(this.unregister(Oi),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(ft)||qn)===qn,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(ft,_n),this.setPersonPropertiesForFlags({$set:n||{},$set_once:i||{}},!1),this.capture(Po,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:i||{}}),this.Sn=jo(e,n,i),(s=this.featureFlags)==null||s.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(ft,_n);var u=n||{},c=i||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=jo(e,n,i)}else(n||i)&&this.setPersonProperties(n,i);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Pn)):l&&(n||i)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var i=jo(this.get_distinct_id(),e,n);this.Sn!==i?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=i):A.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,i=(U(e)?e:[e]).filter((r=>Q(r)&&r.length>0));i.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(i,!0),this.capture("$set",{$unset:i}),this.Sn=null)}group(e,n,i){if(e&&n){var r=this.getGroups(),s=r[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:I({},r,{[e]:n})}),s||i){var o={$group_type:e,$group_key:n};i&&(o.$group_set=i),this.capture(jc,o)}i&&this.setGroupPropertiesForFlags({[e]:i}),s&&!i&&this.reloadFeatureFlags()}else A.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),(i=this.featureFlags)==null||i.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((i=this.featureFlags)==null||i.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var i,r,s,o,a,l,u,c,d,f;if(n===void 0&&(n=!1),A.info("reset"),!this.__loaded)return A.uninitializedWarning("posthog.reset");var p,h=this.get_property(nr),g=this.get_property(Co),m=this.get_property(Fn),v=this.is_capturing();if(this.consent.reset(),n||!v||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(i=this.persistence)==null||i.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),C(m)||(p=this.persistence)==null||p.register({[Fn]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(ft,qn),(f=this.sessionManager)==null||f.resetSessionId(),this.Sn=null,this.config.cookieless_mode===Vt)this.register_once({distinct_id:Cr,$device_id:null},"");else{var b=this.config.get_device_id(qt());this.register_once({distinct_id:b,$device_id:e?b:h},""),e||C(g)||this.register({[Co]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return ce((function*(){var i,r,s,o,a,l,u;if(n.__loaded){(i=n.Un)==null||i.stop(),(r=n.jn)==null||r.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){A.error("Error while destroying feature flags",d)}}else A.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var i;this.config.identity_distinct_id=e,this.config.identity_hash=n,this.alias(e),(i=this.conversations)==null||i.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&i){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!i)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-i)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(lf)?(A.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(C(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(Oi,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(A.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=I({},this.config);if(ve(e)){var i,r,s,o,a,l,u,c,d,f,p,h;me(this.config,mu(e));var g=this.En();(i=this.persistence)==null||i.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Mo(I({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);wt(m)&&(this.config.debug=m),wt(this.config.debug)&&(this.config.debug?(oe.DEBUG=!0,de.N()&&de.F("ph_debug",!0),A.info("set_config",{config:e,oldConfig:n,newConfig:I({},this.config)})):(oe.DEBUG=!1,de.N()&&de.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(f=this.deadClicksAutocapture)==null||f.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(h=this.externalIntegrations)==null||h.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){oe.LIB_NAME=e,oe.LIB_VERSION=n}startSessionRecording(e){var n,i,r,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((i=this.sessionRecording)==null||i.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var i=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:i});return this.exceptions.sendExceptionEvent(I({},r,n))}}addExceptionStep(e,n){var i;(i=this.exceptions)==null||i.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:nt.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,i;return(n=(i=this.toolbar)==null?void 0:i.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:Jn;return n!==Jn&&(n=Jn+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(ft))===_n||((n=this.sessionPersistence)==null?void 0:n.get_property(ft))===_n}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===xa&&!this._isIdentified()&&Zt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Oi])&&((n=this.persistence)==null||(n=n.props)==null||!n[ds]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(A.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(ds,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==An)}es(){var e,n,i,r,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((i=this.persistence)==null||i.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((r=this.sessionPersistence)==null||r.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==Vt){if(this.gn()){var i,r,s,o,a;this.Yn(!0,!0),(i=this.sessionManager)==null||i.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=new du(this),this.pageViewManager=new tu(this),this.persistence&&(this.sessionPropsManager=new uu(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=nt.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==An&&((c=this.surveys)==null||c.loadIfEnabled()),(C(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else A.warn(pu)}opt_out_capturing(){var e,n,i;this.config.cookieless_mode!==Vt?(this.config.cookieless_mode===An&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===An&&(this.register({distinct_id:Cr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):A.warn(pu)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===Vt||(this.config.cookieless_mode===An?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ze?eh(ze,this.config.custom_blocked_useragents):void 0}Hn(){P&&(P.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(Yn,{title:P.title},{send_instantly:!0}),this.kn&&(P.removeEventListener(fs,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),we(P,fs,this.kn)))}debug(e){e===!1?(w?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(w?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(A.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,i,r,s,o){var a=i in n&&!z(n[i]),l=r in n&&!z(n[r]);return a?n[i]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+i+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,A)}Pt(e){var n;if(z(this.config.before_send))return e;var i=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(fg),r=U(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of r){if(s=o(s),z(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return dg(e.event)?A.warn(a+". This can cause unexpected behavior."):A.info(a),null}s.properties&&!Zt(s.properties)||A.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of i)if(s.properties&&z(s.properties[l]))return A.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,i){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(i)})}Cn(e){var n=wt(e)&&!e,i=de.N()&&de.P("ph_debug")==="true";return!n&&(!!i||e)}}nt.__defaultExtensionClasses={},nt.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=em(t.prototype[e[n]])})(nt,["identify"]);class vu{constructor(e){this.disabled=e===!1;var n=ve(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,i){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)i-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:i}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:i}];return!1}}var Wo="$copy_autocapture",qo=ye("[AutoCapture]");function zo(t,e){return e.length>t?e.slice(0,t)+"...":e}function rv(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!pn(e));return e}function sv(t,e){var n,i,r=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!pn(t))return{props:{}};for(var c=[t],d=new Set([t]),f=t;f.parentNode&&!st(f,"body")&&xf>c.length;)if(Sf(f.parentNode)){var p=f.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),f=p}else{if(!pn(f.parentNode)||d.has(f.parentNode))break;d.add(f.parentNode),c.push(f.parentNode),f=f.parentNode}var h,g,m=[],v={},b=!1,x=!1;if(ae(c,(S=>{var F=Ca(S);if(st(S,"a")){var $=S.getAttribute("href");b=!!(F&&$&&Ki($))&&(u?hn($):$)}j(gs(S),"ph-no-capture")&&(x=!0),m.push((function(L,B,Y,G,T){T===void 0&&(T=!1);var q=L.tagName.toLowerCase(),se={tag_name:q};_l.indexOf(q)>-1&&!Y&&(se.$el_text=q.toLowerCase()==="a"||q.toLowerCase()==="button"?zo(1024,Xc(L)):zo(1024,ir(L)));var Pe=gs(L);Pe.length>0&&(se.classes=Pe.filter((function(ie){return ie!==""}))),ae(L.attributes,(function(ie){var he;if((!Pf(L)||["name","id","class","aria-label"].indexOf(ie.name)!==-1)&&(G==null||!G.includes(ie.name))&&!B&&Ki(ie.value)&&(!Q(he=ie.name)||he.substring(0,10)!=="_ngcontent"&&he.substring(0,7)!=="_nghost")){var ue=ie.value;ie.name==="class"&&(ue=yl(ue).join(" ")),se["attr__"+ie.name]=zo(1024,ie.name==="href"&&T?hn(ue):ue)}}));for(var ee=1,Ee=1,$e=L;$e=rv($e);)ee++,$e.tagName===L.tagName&&Ee++;return se.nth_child=ee,se.nth_of_type=Ee,se})(S,s,o,a,u));var M=(function(L){if(!Ca(L))return{};var B={};return ae(L.attributes,(function(Y){if(Y.name&&Y.name.indexOf("data-ph-capture-attribute")===0){var G=Y.name.replace("data-ph-capture-attribute-",""),T=Y.value;G&&T&&Ki(T)&&(B[G]=T)}})),B})(S);me(v,M)})),x)return{props:{},explicitNoCapture:x};if(o||(m[0].$el_text=st(t,"a")||st(t,"button")?Xc(t):ir(t)),b){var y,E;m[0].attr__href=b;var k=(y=ms(b))==null?void 0:y.host,R=w==null||(E=w.location)==null?void 0:E.host;k&&R&&k!==R&&(h=b)}return{props:me({$event_type:r.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(S){return S.map((F=>{var $,M,L="";if(F.tag_name&&(L+=F.tag_name),F.attr_class)for(var B of(F.attr_class.sort(),F.attr_class))L+="."+B.replace(/"/g,"");var Y=I({},F.text?{text:F.text}:{},{"nth-child":($=F.nth_child)!==null&&$!==void 0?$:0,"nth-of-type":(M=F.nth_of_type)!==null&&M!==void 0?M:0},F.href?{href:F.href}:{},F.attr_id?{attr_id:F.attr_id}:{},F.attributes),G={};return qr(Y).sort(((T,q)=>T[0].localeCompare(q[0]))).forEach((T=>{var q=T[1];return G[Qc(T[0].toString())]=Qc(q.toString())})),(L+=":")+qr(G).map((T=>T[0]+'="'+T[1]+'"')).join("")})).join(";")})((function(S){return S.map((F=>{var $,M,L={text:($=F.$el_text)==null?void 0:$.slice(0,400),tag_name:F.tag_name,href:(M=F.attr__href)==null?void 0:M.slice(0,2048),attr_class:_m(F),attr_id:F.attr__id,nth_child:F.nth_child,nth_of_type:F.nth_of_type,attributes:{}};return qr(F).filter((B=>B[0].indexOf("attr__")===0)).forEach((B=>L.attributes[B[0]]=B[1])),L}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(i=m[0])==null?void 0:i.$el_text}:{},h&&r.type==="click"?{$external_click_url:h}:{},v)}}var Ti=ye("[ExceptionAutocapture]"),yu=()=>{},ov=ye("[TracingHeaders]"),En=ye("[Web Vitals]"),_u=9e5,wu="disabled",bu="lazy_loading",$i="awaiting_config",Mr="missing_config";ye("[SessionRecording]"),ye("[SessionRecording]");var La="[SessionRecording]",jt=ye(La),av=ye("[Heatmaps]");function Vo(t){return ve(t)&&"clientX"in t&&"clientY"in t&&Ae(t.clientX)&&Ae(t.clientY)}var Lr=ye("[Product Tours]"),Go=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(pl))},lv=["$set_once","$set"],xt=ye("[SiteApps]"),Eu="Error while initializing PostHog app with config id ";function Gn(t,e,n){if(z(t))return!1;switch(n){case"exact":return t===e;case"contains":var i=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(i,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class cv{constructor(e){this.ns=new Sl,this.ss=(n,i)=>this.os(n,i)&&this.ls(n,i)&&this.us(n,i)&&this.hs(n,i),this.os=(n,i)=>i==null||!i.event||n?.event===i?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;C((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((i,r)=>{this.on(i,r)}))}register(e){var n,i;if(!C((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(i=this._instance)!=null&&i.autocapture)){var r,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(s)}}on(e,n){var i;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((i=this.vs)==null?void 0:i.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var i of n.steps)if(this.ss(e,i))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var i,r=e==null||(i=e.properties)==null?void 0:i.$current_url;if(!r||typeof r!="string"||!Gn(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var i;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>Gn(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!o&&Gn((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var i;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>Gn(u.text,n.text,n.text_matching||"exact")||Gn(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!l&&(s=(function(u){for(var c,d=[],f=/(?::|")text="(.*?)"/g;!z(c=f.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=n.text,a=n.text_matching||"exact",s.some((u=>Gn(u,o,a))))}ys(e,n){var i,r;if(n==null||!n.selector)return!0;var s=e==null||(i=e.properties)==null?void 0:i.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||ih(n.properties.reduce(((i,r)=>{var s=U(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return i[r.key]={values:s,operator:r.operator||"exact"},i}),{}),e?.properties)}}class uv{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((i=>this.Ss(i)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&ih(e.propertyFilters,n?.properties)}Ps(e,n){var i=new Map;return e.forEach((r=>{var s;(s=r.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.forEach((o=>{if(o!=null&&o.name){var a=i.get(o.name)||[];a.push(r.id),i.set(o.name,a)}}))})),i}Rs(e,n,i){var r=(i===Ci.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>r?.includes(a.id)))})),s.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[i])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;C((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((i=>{var r,s;return((r=i.conditions)==null?void 0:r.actions)&&((s=i.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new cv(this._instance),this.Os.init(),this.Os.fs((i=>{this.onAction(i)}))),n.forEach((i=>{var r,s,o,a,l;i.conditions&&(r=i.conditions)!=null&&r.actions&&(s=i.conditions)!=null&&(s=s.actions)!=null&&s.values&&((o=i.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(i.conditions.actions.values),(l=i.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(i.id),this.xs.set(u.name,c||[i.id])}})))})))}Fs(e){var n,i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));i.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Ci.Activation),this.ks=this.Ps(e,Ci.Cancellation))}onEvent(e,n){var i,r,s=this.Ds(),o=(n==null||(i=n.properties)==null?void 0:i.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Ci.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Ci.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var i=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var s of e)i&&this.Cs(s)?this.qs(s)&&this.Us(s):r.push(s);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((i=>i!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var i=this.Zs(),r=i.filter((s=>!n.has(s)));r.length!==i.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return i&&typeof i=="object"?i:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(I({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),i={},r=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?r=!0:i[o]=a}r&&(Zt(i)?this.Es():this.Ts(i))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return Ae(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,i=this.Zs();if(i.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&r===s?i:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,i=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(i&&i!==e){var r=this.Zs(),s=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>Ae(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class dv extends uv{constructor(e){super(e)}Js(){return _a}Ys(){return Ur}Ms(){return Hr}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Hr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Hr)}Cs(e){var n,i;this.As((s=>{i=s.find((o=>o.id===e))}));var r=(n=i)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return Ae(r)&&r>0}ra(){return Kt.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return te}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[_a]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Ur]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ur)}ea(){return!1}$s(e,n){var i;this.As((s=>{i=s.find((o=>o.id===n))}));var r=!i||(function(s){var o;return rh(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(i);return r?e===Kt.SHOWN?"consume":"ignore":e===Kt.SHOWN?"persist":e===Kt.DISMISSED||e===Kt.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Nr="SDK is not enabled or survey functionality is not yet loaded",Su="Disabled. Not loading surveys.",fv=w!=null&&w.location?vs(w.location.hash,"__posthog")||vs(location.hash,"state"):null,xu="_postHogToolbarParams",Iu=ye("[Toolbar]"),ku=ye("[FeatureFlags]");class hv{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((i,r)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=i.bootstrap)==null?void 0:s.featureFlags,featureFlagPayloads:(o=i.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,featureFlagsDisabled:!!i.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!i.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!i.advanced_feature_flags_dedup_per_session,cacheTtlMs:i.feature_flag_cache_ttl_ms,requestTimeoutMs:i.feature_flag_request_timeout_ms,compression:i.disable_compression?"none":"base64",evaluationContexts:(a=(l=i.evaluation_contexts)!==null&&l!==void 0?l:i.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:U(i.flag_keys)?i.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(ku.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),C(e.flag_keys)||U(e.flag_keys)||ku.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Cu=ye("[FeatureFlags]"),Sn=ye("[FeatureFlags]",{debugEnabled:!0}),Ko=`" failed. Feature flags didn't load in time.`,Au="connection_error",Pu=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},Fu=t=>{var e={};for(var n of qr(t||{})){var i=n[1];i&&(e[n[0]]=i)}return e},It=ye("[Error tracking]"),Ru="Refusing to render web experiment since the viewer is a likely bot",pv={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>ws(e,t),not_regex:(t,e)=>!ws(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class De{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(i){i===void 0&&(i=!1),n.getWebExperiments((r=>{De.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(De.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);Q(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];De.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),i)},this._instance=e,this._instance.onFeatureFlags((i=>{this.onFeatureFlags(i)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())De.aa(Ru);else if(!this.Ne.disable_web_experiments){if(z(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();De.aa("applying feature flags",e),e.forEach((n=>{var i;if(this.oa&&(i=this.oa)!=null&&i.has(n)){var r,s=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=De.getWindowLocation();if(e!=null&&e.search){var n=li(e?.search,"__experiment_id"),i=li(e?.search,"__experiment_variant");n&&i&&(De.aa("previewing web experiments "+n+" && "+i),this.getWebExperiments((r=>{this.ha(parseInt(n),i,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,i){if(this.Ne.disable_web_experiments&&!i)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,i){var r=i.filter((s=>s.id===e));r&&r.length>0&&(De.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!z(e.conditions)&&De.da(e,n)&&De.va(e)}static da(e,n){var i;if(z(e.conditions)||z((i=e.conditions)==null?void 0:i.url))return!0;var r=De.getWindowLocation();if(r){var s,o,a,l=wf(n,r.href);return(s=e.conditions)==null||!s.url||pv[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return w?.location}static va(e){var n;if(z(e.conditions)||z((n=e.conditions)==null?void 0:n.utm))return!0;var i=Lf();if(i.utm_source){var r,s,o,a,l,u,c,d,f=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==i.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==i.utm_source,h=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==i.utm_medium,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==i.utm_term;return f&&h&&g&&p}return!1}static aa(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;n>r;r++)i[r-1]=arguments[r];A.info("[WebExperiments] "+e,i)}la(e,n,i){this._is_bot()?De.aa(Ru):n!=="control"?i.forEach((r=>{if(r.selector){var s;De.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(s=document)==null?void 0:s.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):De.aa("Control variants leave the page unmodified.")}_is_bot(){return ze&&this._instance?eh(ze,this.Ne.custom_blocked_useragents):void 0}}var dt=ye("[Conversations]"),xn="Conversations not available yet.",Tu="console",ch="__posthogHandledLogsRequestError",Yo=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[ch]=!0,n},$u=t=>!!t&&typeof t=="object"&&t[ch]===!0,Us={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Cu,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new hv(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return w&&we(w,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){w?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],w?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Di,ji,jr,Ct]){var n=this.Oa(e);C(n)||(t[e]=n)}this.fa=t;var i=I({},t),r=this.Oa(In);if(r)for(var s of Object.entries(r))i["$feature/"+s[0]]=s[1];this.pa=i}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Gi);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!C(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,i=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(i).length){var r,s,o=(r=(s=n.bootstrap)==null?void 0:s.featureFlagPayloads)!==null&&r!==void 0?r:{},a=Object.keys(i).filter((u=>!!i[u])).reduce(((u,c)=>(u[c]=i[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,n){var i,r,s=n!=null&&n.merge&&(i=this.Oa(In))!==null&&i!==void 0?i:{},o=n!=null&&n.merge&&(r=this.Oa(ji))!==null&&r!==void 0?r:{},a=I({},s,t),l=I({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],f=c[1];u[d]={key:d,enabled:Ic(f),variant:kc(f),reason:void 0,metadata:C(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(va),e=this.Oa(Ct),n=this.Oa(kn);if(!n&&!e)return t||{};var i=me({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of r){var o,a,l=i[s],u=e?.[s],c=C(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=C(u)?l?.variant:typeof u=="string"?u:void 0,f=n?.[s],p=I({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),f&&(p.metadata=I({},l?.metadata,{payload:f,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),i[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:i}),this.ca=!0),i}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var i=t[n];return{key:n,enabled:Ic(i),variant:kc(i),payload:xc(e[n])}}))}getFlagVariants(){var t=this.Oa(In),e=this.Oa(Ct);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(ji),e=this.Oa(kn);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Pn)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:I({},e.initialPersonProperties,this.Oa(Ht)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Cn),timezone:Uf()};C(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var i=this.Na();i.length&&(n.evaluation_contexts=i);var r=this.qa();C(r)||(n.flag_keys=r);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Wr]:[Au]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?qe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,f,p=(d=c.json)!==null&&d!==void 0?d:{},h=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),h||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!h;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Au:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((f=p.quotaLimited)==null||!f.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Wr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,h,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return $f(this.Sa,3)}Ua(t){this.Sa=Mf(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var i=this.getFeatureFlagResult(t,e);return(n=i?.variant)!==null&&n!==void 0?n:i?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+Ko)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,i=this.getFlagVariants(),r=t in i,s=i[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(jr)||void 0,u=this.Oa(Gi)||void 0,c=this.Oa(Pn)||{};if(this.Ne.deduplicateCallsPerSession){var d,f=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Hi);f&&f!==p&&(c={},n=f)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Pn]:c,[Hi]:n});else{var h,g,m,v,b,x,y,E,k,R;U(c[t])?c[t].push(a):c[t]=[a],this.F(I({[Pn]:c},n?{[Hi]:n}:{}));var S=this.getFeatureFlagDetails(t),F=[...(h=this.Oa(Wr))!==null&&h!==void 0?h:[]];C(s)&&F.push("flag_missing");var $={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};C(S==null||(v=S.metadata)==null?void 0:v.has_experiment)||($.$feature_flag_has_experiment=S.metadata.has_experiment),C(S==null||(b=S.metadata)==null?void 0:b.version)||($.$feature_flag_version=S.metadata.version);var M,L=(x=S==null||(y=S.reason)==null?void 0:y.description)!==null&&x!==void 0?x:S==null||(E=S.reason)==null?void 0:E.code;L&&($.$feature_flag_reason=L),S!=null&&(k=S.metadata)!=null&&k.id&&($.$feature_flag_id=S.metadata.id),C(S?.original_variant)&&C(S?.original_enabled)||($.$feature_flag_original_response=C(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(R=S.metadata)!=null&&R.original_payload&&($.$feature_flag_original_payload=S==null||(M=S.metadata)==null?void 0:M.original_payload),F.length&&($.$feature_flag_error=F.join(",")),this.za($)}else n&&this.F({[Pn]:c,[Hi]:n});if(r)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:xc(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+Ko)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r={distinct_id:i.distinctId,token:i.projectToken,person_properties:{$lib:i.library.name,$lib_version:i.library.version}},s=n.Na();s.length&&(r.evaluation_contexts=s);var o,a=n.qa();C(a)||(r.flag_keys=a);try{var l,u=(l=(yield i.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?qe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+Ko),e.defaultValue;var n=this.getFeatureFlag(t,e);return C(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var i=(function(r,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Cu);var c=((k,R)=>{var S=k.flags;return S?I({},k,{featureFlags:Object.fromEntries(Object.keys(S).map((F=>{var $;return[F,($=S[F].variant)!==null&&$!==void 0?$:S[F].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((F=>S[F].enabled)).filter((F=>{var $;return($=S[F].metadata)==null?void 0:$.payload})).map((F=>{var $;return[F,($=S[F].metadata)==null?void 0:$.payload]})))}):(k.featureFlags&&R.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),k)})(r,u),d=c.flags,f=c.featureFlags,p=c.featureFlagPayloads;if(f){var h=r.requestId,g=r.evaluatedAt;if(U(f)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(f)for(var v=0;f.length>v;v++)m[f[v]]=!0;return{[Di]:f,[In]:m,[ls]:!1}}var b=f,x=p,y=d;if(l!=null&&l.partialResponse)b=I({},s,b),x=I({},o,x),y=I({},a,y);else if(r.errorsWhileComputingFlags)if(d){var E=new Set(Object.keys(d).filter((k=>{var R;return!((R=d[k])!=null&&R.failed)})));b=I({},s,Object.fromEntries(Object.entries(b).filter((k=>E.has(k[0]))))),x=I({},o,Object.fromEntries(Object.entries(x||{}).filter((k=>E.has(k[0]))))),y=I({},a,Object.fromEntries(Object.entries(y||{}).filter((k=>E.has(k[0])))))}else b=I({},s,b),x=I({},o,x),y=I({},a,y);return I({[Di]:Object.keys(Fu(b)),[In]:b||{},[ji]:x||{},[va]:y||{},[ls]:r.minimalFlagCalledEvents===!0},h?{[jr]:h}:{},g?{[Gi]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,this.rt);i&&this.F(i),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([Ct,kn]),this.Va(),void Sn.info("All overrides cleared");if(U(t))return this.F({[Ct]:Pu(t)}),this.Va(),void Sn.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var i={},r=n.flags,s=n.payloads;return r&&(i[Ct]=U(r)?Pu(r):r),s&&(i[kn]=s),Object.keys(i).length&&this.F(i),r===!1&&s===!1?this.q([Ct,kn]):r===!1?this.q(Ct):s===!1&&this.q(kn),this.Va(),r===!1?Sn.info("Flag overrides cleared"):r&&Sn.info("Flag overrides set",{flags:r}),void(s===!1?Sn.info("Payload overrides cleared"):s&&Sn.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[Ct]:t}),this.Va(),void Sn.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,i=e.flagVariants;try{t(n,i)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var i=(this.Oa(Dr)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:r};i&&(s.$early_access_feature_name=i.name),n&&(s.$feature_enrollment_stage=n);var o=I({},this.getFlagVariants(),{[t]:e});this.F({[Di]:Object.keys(Fu(o)),[In]:o,[Ht]:I({},this.Oa(Ht)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var i=this.Oa(Dr);!i||e?this.Qa(t,n):t(i)}Qa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield i.sendRequest("/api/early_access_features/?token="+i.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Dr]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,i)=>(n[i]=e[i],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,i=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,i,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(Ht)||{},i=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,s={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(s[o]=r[o]));this.F({[Ht]:I({},n,s,i)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=I({},this.Oa(Ht)||{});t.forEach((i=>{delete n[i]})),this.F({[Ht]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(Ht),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(Cn)||{},i=I({},n);for(var r of Object.keys(t))i[r]=I({},n[r],t[r]);this.F({[Cn]:i}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Cn)||{};this.F({[Cn]:I({},e,{[t]:{}})})}else this.q(Cn)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},gv={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===$i||this.Ya===Mr?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=wu,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(P==null||!P.visibilityState||P.visibilityState==="visible")return!0;var n=w==null||(e=w.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((i=>i.name==="visible"))})(),this.Ie=()=>{var e;P?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw jt.error("started without valid sessionManager"),new Error(La+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===Vt)throw new Error(La+' cannot be used with cookieless_mode="always"');P!=null&&P.addEventListener&&we(P,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,P==null||P.removeEventListener==null||P.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Fn))==null||!t.enabled),n=!this.Ne.disable_session_recording,i=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return w&&e&&n&&!i}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!C(Object.assign)&&!C(Array.from);this.ro&&n?(this.no(t),jt.info("starting")):(this.Ya=wu,this.stopRecording())}}no(t){var e,n,i;this.ro&&(this.Ya!==$i&&this.Ya!==Mr&&(this.Ya=bu),O!=null&&(e=O.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=O.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return jt.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(gl),(e=this.Mr)==null||e.unregister(cf)}uo(t,e){if(z(t))return null;var n,i=Ae(t)?t:parseFloat(t);return typeof(n=i)!="number"||!Number.isFinite(n)||0>n||n>1?(jt.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):i}ho(t){if(this.Mr){var e,n,i=this.Mr,r=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;z(u)&&this.lo();var c=o?.minimumDurationMilliseconds;i.register({[Fn]:I({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:I({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:C(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===$i&&(this.Ya=Mr,jt.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):jt.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Fn);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Fn);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return jt.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!z(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,i;if(!this.eo){if((e=O.__PosthogExtensions__)==null||!e.initSessionRecording)return jt.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[vf]:!0});var r;if(this.Ja||(this.Ja=(r=O.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Mr||this.Ya===$i?void 0:(this.Ya=$i,jt.info("persisted remote config is stale, requesting fresh config before starting"),void new Hf(this._instance).load());this.Ya=bu,(n=(i=this.Ja).setDocumentWasEverVisible)==null||n.call(i,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[df]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uf]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?ff:hf]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},mv={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new vu(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=ve(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((i=>new RegExp(i))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((i=>new RegExp(i))),n}yo(){if(this.isBrowserSupported()){if(w&&P){var t=n=>{n=n||w?.event;try{this.bo(n)}catch(i){qo.error("Failed to capture event",i)}};if(we(P,"submit",t,{capture:!0}),we(P,"change",t,{capture:!0}),we(P,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||w?.event;try{this.bo(n,Wo)}catch(i){qo.error("Failed to capture copy/cut event",i)}};we(P,"copy",e,{capture:!0}),we(P,"cut",e,{capture:!0})}}}else qo.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;wt(n)&&(this.instance.persistence&&this.instance.persistence.register({[ua]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((i=>{var r=P?.querySelectorAll(i);r?.forEach((s=>{t===s&&n.push(i)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[ua],i=this.co,r=this.instance.Qi()&&!this.fo;if(Qe(i)&&!wt(n)&&!r)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,i=Ro(t);Ef(i)&&(i=i.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&Gc(i,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===Wo;if(i&&(function(d,f,p,h,g,m){var v;if(!w||wl(d)||p!=null&&p.url_allowlist&&!qc(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&qc(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var b=p.dom_event_allowlist;if(b&&!b.some((S=>f.type===S)))return!1}var x=Af(d,h),y=x.parentIsUsefulElement,E=x.targetElementList;if(!(function(S,F){var $=F?.element_allowlist;if(C($))return!0;var M,L=function(Y){if($.some((G=>Y.tagName.toLowerCase()===G)))return{v:!0}};for(var B of S)if(M=L(B))return M.v;return!1})(E,p)||!ka(E,p?.css_selector_allowlist)||ka(E,(v=p?.css_selector_ignorelist)!==null&&v!==void 0?v:hm))return!1;try{var k=w.getComputedStyle(d);if(k&&k.getPropertyValue("cursor")==="pointer"&&f.type==="click")return!0}catch{}var R=d.tagName.toLowerCase();switch(R){case"html":return!1;case"form":return(g||["submit"]).indexOf(f.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(f.type)>=0;default:return y?(g||["click"]).indexOf(f.type)>=0:(g||["click"]).indexOf(f.type)>=0&&(_l.indexOf(R)>-1||d.getAttribute("contenteditable")==="true")}})(i,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var s=sv(i,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(i);if(a&&a.length>0&&(o.$element_selectors=a),e===Wo){var l,u=If(w==null||(l=w.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return We(P?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(w==null||(e=w.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(A.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,A.info("History API monitoring stopped")}monitorHistoryChanges(){w&&w.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(w&&((e=w.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(i,r,s){try{if(!(r in i))return yu;var o={next:i[r]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return We(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),i[r]=a,()=>{if(i[r]!==a)for(var l=i[r];We(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else i[r]=o.next}}catch{return yu}})(w.history,t,(i=>function(r,s,o){i.call(this,r,s,o),n.So(t)}))}}So(t){try{var e,n=w==null||(e=w.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(Yn,{navigation_type:t}),this._o=n}catch(i){A.error("Error capturing "+t+" pageview",i)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};we(w,"popstate",t),this.wo=()=>{w&&w.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[da]),this.rageclicks=new vu(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return ve(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return z(this.Ne.capture_heatmaps)?z(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;av.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[da]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Vo(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=P?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){w&&P&&(this.Po=this.cr.bind(this),we(w,hs,this.Po),this.Ro=t=>this.ke(t||w?.event),we(P,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||w?.event),we(P,"mousemove",this.Ao,{capture:!0}),this.Lo=new eu(this.instance,wm,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),we(P,fs,this.Oo),this.vo=!0)}Eo(){var t;w&&P&&(this.Po&&w.removeEventListener(hs,this.Po),this.Ro&&P.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&P.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&P.removeEventListener(fs,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),i=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&pn(u)&&!st(u,"body");){if(u===l)return!1;var c=void 0;try{var d,f,p;c=(d=(f=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&f!==void 0?f:w)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(j(a,c))return!0;u=kf(u)}return!1})(Ro(t),["fixed","sticky"],r);return{x:t.clientX+(s?0:i),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!Wc(t.target)&&Vo(t)){var i=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&Gc(Ro(t),this.instance.config.rageclick)&&this.Vt(I({},i,{type:"rageclick"})),this.Vt(i)}}Fo(t){!Wc(t.target)&&Vo(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(w){var e=this.Ne.disable_capture_url_hashes?hn(w.location.href):w.location.href,n=this.Ne.custom_personal_data_properties,i=this.Ne.mask_personal_data_properties?[...ci,...n||[]]:[],r=rr(e,i,sr);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].push(t)}}cr(){this.R&&!Zt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:eu,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",I({$current_url:this.R.url},this.R.metrics.reduce(((n,i)=>I({},n,{["$web_vitals_"+i.name+"_event"]:I({},i),["$web_vitals_"+i.name+"_value"]:i.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var i;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},z(n?.name)||z(n?.value))En.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(r);if(!C(s)){var o=Ae(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),C(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=C(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(i=this._instance.sessionManager)==null?void 0:i.checkAndGetSessionAndWindowId(!0),l=I({},n,r?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});C(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else En.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,i,r,s,o=O.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&C(a)?o?.postHogWebVitalsCallbacks:void 0);if(C(l)||(n=l.onLCP,i=l.onCLS,r=l.onFCP,s=l.onINP),n&&i&&r&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&s(this.jo.bind(this),u),this.vo=!0}else En.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[ga]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=ve(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return z(n)?((e=this._instance.persistence)==null?void 0:e.props[ma])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(ve(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=ve(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=ve(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=ve(this.Wo)&&Ae(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:_u;return t>0&&6e4>=t?_u:t}get isEnabled(){var t=_e?.protocol;if(t!=="http:"&&t!=="https:")return En.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=ve(this.Wo)?this.Wo.web_vitals:wt(this.Wo)?this.Wo:void 0;return wt(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(En.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=ve(e.capturePerformance)&&!!e.capturePerformance.web_vitals,i=ve(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[ga]:n}),this._instance.persistence.register({[ma]:i})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=O.__PosthogExtensions__,n=this.zo,i=e?.postHogWebVitalsCallbacksByFlavor;i!=null&&i[n]||n==="web-vitals"&&C(i)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?En.error("failed to load script",r):t()}))}Bo(t){var e=t||w?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?hn(e):e,i=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...ci,...i||[]]:[];return rr(n,r,sr)}En.error("Could not determine current URL")}}},vv={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(w&&this.isEnabled&&(n=O.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var i=O.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=O.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=O.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=i(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=s(this.captureException.bind(this)))}catch(o){Ti.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[fa]),this.Jo=new gg(I({},(function(n){var i,r,s,o;return n===void 0&&(n={}),{refillRate:(i=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ti})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return ve(t)?e=I({},e,t):(C(t)?this.Ko:t)&&(e=I({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ti.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(i=>{if(i)return Ti.error("failed to load script",i);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[fa]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,i,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Ti.info("Skipping exception capture because of client rate limiting.",{exception:r}):(i=this._instance.exceptions)==null||i.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Tg([new jg,new Yg,new Hg,new Ug,new Gg,new Vg,new qg,new Kg],(function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;r>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` -`),d=l;c.length>d;d++){var f=c[d];if(1024>=f.length){var p=Dc.test(f)?f.replace(Dc,"$1"):f;if(!p.match(/\S*Error: /)){for(var h of s){var g=h(p,i);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var v=Array.from(m);return v.reverse(),v.slice(0,50).map((b=>{return I({},b,{filename:b.filename||(x=v,x[x.length-1]||{}).filename,function:b.function||ai});var x}))})(u)}})("web:javascript",Ng,Dg)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(ha))!==null&&e!==void 0?e:[],this.el=as(this.il()),this.rl=new Zg(this.el)}onConfigChange(){this.el=as(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,i;if(t.ok){var r=t.config;if("errorTracking"in r){var s=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(i=r.errorTracking)==null?void 0:i.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[ha]:this.Xo,[pa]:o})}}}get nl(){var t,e=!!this._instance.get_property(pa),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!Q(t)||t.trim().length===0)return void It.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>Jg.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),i=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&It.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(I({[ss]:t,[os]:new Date().toISOString()},i))}catch(s){It.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void It.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void It.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void It.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&z(t.$exception_steps)?this.dl(t):t,i=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;i&&(n.$release_id=i);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}catch(o){return It.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void It.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:I({},t,{$exception_steps:e})}catch(n){return It.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[ss]:t,[os]:new Date().toISOString()})}sl(t){return ve(t)?I({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,i)=>{var r=i.type,s=i.value;return Q(r)&&r.length>0&&n.$exception_types.push(r),Q(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var i=n.values.map((r=>{var s=nh[r.operator],o=e[r.key];if(!s||!o)return!1;var a=U(r.value)?r.value:[r.value];return a.length>0&&s(a,o)}));return n.type==="OR"?i.some(Boolean):i.every(Boolean)}))}catch(n){return It.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,i;return(n=(i=e.stacktrace)==null?void 0:i.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,i,r,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.length-1];return(i=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&i!==void 0&&i}return!1}al(t){return!z(t)&&U(t)}}},yv=I({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,i;if(this.Mr&&this.Mr.register({[pl]:!!e.productTours}),!Go(this._instance))return!this.vl&&z((n=this.Mr)==null?void 0:n.props[Ui])||Lr.info("product tours disabled; stopping and clearing cached tours"),(i=this.vl)==null||i.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&Go(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(i=>{i?Lr.error("Could not load product tours script",i):t()}))}fl(){var t;!this.vl&&(t=O.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=O.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!U(this.cl)||e){var n=this.Mr;if(n){var i=n.props[Ui];if(U(i)&&!e)return this.cl=i,void t(i,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:r=>{if(Go(this._instance)){var s=r.statusCode;if(s!==200||!r.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?r.error||Lr.warn(o):Lr.error(o),void t([],{isLoaded:!1,error:o})}var a=U(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[Ui]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){z(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Ui)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},Us),_v={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=O._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,i,r,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var f=d[0];l[f]={id:u[f],type:f,properties:d[1]}}var p=t.$set_once,h=t.$set;return{event:I({},kd(t,lv),{properties:I({},t.properties,h?{$set:I({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},h)}:{},p?{$set_once:I({},(i=(r=t.properties)==null?void 0:r.$set_once)!==null&&i!==void 0?i:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(xt.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(xt.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,i,r,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=P?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,f=new WeakSet,p=(m,v,b)=>{if(m!=null&&m[v]){var x=m[v];m[v]=b(x),c.push((()=>{m[v]=x}))}},h=m=>{if(f.has(m))return m;var v=d.bl(m);return v&&f.add(v),v},g=m=>m.map((v=>typeof v=="string"?v:h(v))).filter((v=>!Qe(v)));return p(u,"appendChild",(m=>function(v){var b=h(v);return b?m.call(this,b):v})),p(u,"insertBefore",(m=>function(v,b){var x=h(v);return x?m.call(this,x,b):v})),p(u,"replaceChild",(m=>function(v,b){var x=h(v);return x?m.call(this,x,b):b})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(i=l.DocumentFragment)==null?void 0:i.prototype].forEach((m=>{p(m,"append",(v=>function(){for(var b=arguments.length,x=new Array(b),y=0;b>y;y++)x[y]=arguments[y];return v.apply(this,g(x))})),p(m,"prepend",(v=>function(){for(var b=arguments.length,x=new Array(b),y=0;b>y;y++)x[y]=arguments[y];return v.apply(this,g(x))}))})),[(r=l.Element)==null?void 0:r.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(v=>function(){for(var b=arguments.length,x=new Array(b),y=0;b>y;y++)x[y]=arguments[y];return v.apply(this,g(x))})),p(m,"after",(v=>function(){for(var b=arguments.length,x=new Array(b),y=0;b>y;y++)x[y]=arguments[y];return v.apply(this,g(x))})),p(m,"replaceWith",(v=>function(){for(var b=arguments.length,x=new Array(b),y=0;b>y;y++)x[y]=arguments[y];var E=g(x);return x.length&&!E.length?void 0:v.apply(this,E)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(v,b){var x=h(b);return x?m.call(this,v,x):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var i=t(n);return e&&n(),i}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(xt.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},i=!1,r=o=>{e.errored=!o,e.loaded=!0,xt.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),i&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;s&&(e.processEvent=s),i=!0}catch(o){xt.error(Eu+t.id,o),r(!1)}if(i&&e.loaded)try{n()}catch(o){xt.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),i=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){xt.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var r of Object.values(this.apps))i(r)}}onRemoteConfig(t){var e,n,i,r=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void xt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((i=s.siteApps)!=null&&i.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;O["__$$ph_site_app_"+u]=r._instance,(l=O.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return xt.error(Eu+u,d)}))};for(var a of s.siteApps)o()}else xt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},wv={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,i=this.Il();i?(C(this.Ml)&&(this.Ml=(e=O.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),C(this.Tl)&&(this.Tl=(n=O.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(i=>{if(i)return ov.error("failed to load script",i);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return U(t)?(U(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(U(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},bv=I({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return te.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(z(e))return te.warn("Flags not loaded yet. Not loading surveys.");var n=U(e);this.Rl=n?e.length>0:e,te.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)te.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)te.info(Su);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())te.info("Not loading surveys in cookieless mode without consent.");else{var t=O?.__PosthogExtensions__;if(t){if(!C(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var i=t.loadExternalDependency;if(!i)return void this.$l(ml);i(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else te.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new dv(this._instance),te.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){te.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return te.info(Su),t([]);var n,i=this._instance.get_property(ya);if(i&&!e)return t(i,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var s;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?te.error(a):r.error||te.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(h){return!(!h.start_date||h.end_date)})(p)&&(rh(p)||(function(h){var g;return!((g=h.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[ya]:c,[cs]:Date.now()});var f={isLoaded:!0};t(c,f),n?.({surveys:c,context:f})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(cs);return Ae(t)&&Date.now()-t>3e5}Bl(){return Ae(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,i={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};oh(i);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(n){te.error("Error in survey callback",n)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!z(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);te.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((n=>{var i;e=(i=n.find((r=>r.id===t)))!==null&&i!==void 0?i:null})),e}Ul(t){if(z(this._surveyManager))return{eligible:!1,reason:Nr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(z(this._surveyManager))return{eligible:!1,reason:Nr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(z(this._surveyManager))return te.warn("init was not called"),{visible:!1,disabledReason:Nr};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return z(this._surveyManager)?(te.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Nr})):new Promise((n=>{this.getSurveys((i=>{var r,s=(r=i.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var i;if(z(this._surveyManager))te.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(Gm.includes(r.type)){var s=P?.querySelector(e);if(s)return(i=r.appearance)!=null&&i.surveyPopupDelaySeconds?(te.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;te.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,s,n),te.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,s,n);te.warn("Survey element not found")}else te.warn("Surveys of type "+r.type+" cannot be rendered in the app");else te.warn("Survey not found")}}displaySurvey(t,e){var n;if(z(this._surveyManager))te.warn("init was not called");else{var i=this.Hl(t);if(i){var r=i;if((n=i.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=I({},i,{appearance:I({},i.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Aa.Popover&&e.initialResponses&&te.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(i);if(!s.eligible)return void te.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==Aa.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,e.selector,e.properties)}else te.warn("Survey not found")}}cancelPendingSurvey(t){z(this._surveyManager)?te.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Us),Ev={toolbar:class{constructor(t){this.instance=t}Wl(t){O.ph_toolbar_state=t}Vl(){var t;return(t=O.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),Ia(this.instance.config)||!w||!P)return!1;t=t??w.location,n=n??w.history;try{if(!e){try{w.localStorage.setItem("test","test"),w.localStorage.removeItem("test")}catch{return!1}e=w?.localStorage}var i,r=fv||vs(t.hash,"__posthog")||vs(t.hash,"state"),s=r?Uc((()=>JSON.parse(atob(decodeURIComponent(r)))))||Uc((()=>JSON.parse(decodeURIComponent(r)))):null;return s&&s.action==="ph_authorize"?((i=s).source="url",i&&Object.keys(i).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((i=JSON.parse(e.getItem(xu)||"{}")).source="localstorage",delete i.userIntent),!(!i.token||this.instance.config.token!==i.token||(this.loadToolbar(i),0))}catch{return!1}}Zl(t){var e=O.ph_load_toolbar||O.ph_load_editor;!z(e)&&We(e)?e(t,this.instance):Iu.warn("No toolbar load function found")}loadToolbar(t){var e=!(P==null||!P.getElementById(bf));if(!w||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,i=I({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(w.localStorage.setItem(xu,JSON.stringify(I({},i,{source:void 0}))),this.Vl()===2)this.Zl(i);else if(this.Vl()===0){var r;this.Wl(1),(r=O.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return Iu.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(i)})),we(w,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(i)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},Sv=I({experiments:De},Us),xv={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;z(e)||(wt(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||Ia(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=O?.__PosthogExtensions__;if(t&&!C(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(ml);n(this._instance,"conversations",(i=>{i||!t.initConversations?this.eu("Could not load conversations script",i):this.tu(t.initConversations),this.Kl=!1}))}catch(i){this.eu("Error initializing conversations",i),this.Kl=!1}}else dt.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,dt.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else dt.error("Cannot complete initialization: remote config is null")}eu(t,e){dt.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():dt.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!Qe(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":Ia(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":C(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?z(this.Jl)||!this.Jl.token?"missing_token":O!=null&&O.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var i=this;return ce((function*(){return i._conversationsManager?i._conversationsManager.sendMessage(t,e,n):(dt.warn(xn),null)}))()}getMessages(t,e){var n=this;return ce((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(dt.warn(xn),null)}))()}markAsRead(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(dt.warn(xn),null)}))()}getTickets(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(dt.warn(xn),null)}))()}requestRestoreLink(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(dt.warn(xn),null)}))()}restoreFromToken(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(dt.warn(xn),null)}))()}restoreFromUrlToken(){var t=this;return ce((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(dt.warn(xn),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},Iv={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ye("[logs]"),this.nu=I({},this.rt,{error(){for(var i=arguments.length,r=new Array(i),s=0;i>s;s++)r[s]=arguments[s];r.some($u)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var i,r;this.Sa=0,(i=this.ou)==null||i.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),w&&we(w,"online",this.au)}uu(t,e,n,i){var r,s=(function(o,a){var l,u,c,d,f,p,h,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,v=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,b=C(v)?Math.max(m,2048):Math.max(m,v),x=o?.resourceAttributes;return{serviceName:(d=(f=x?.["service.name"])!==null&&f!==void 0?f:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=x?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(h=x?.["deployment.environment"])!==null&&h!==void 0?h:o?.environment,resourceAttributes:x,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:b,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:v,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new Pg(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,i),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var i=this.uu((()=>this.tr),(r=>{this.tr=r}));this.ou=i[0],this.fu=i[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var n;(n=this.lu)==null||n.reset(),this.gu=e;var i=this.uu((()=>this.su),(r=>{this.su=r}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},Tu);this.lu=i[0],this.mu=i[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!z(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){$u(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=O?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var i;n||(i=t.logs)==null||!i.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(ml)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:i=>i===Wt.LogsQueue?t():void 0,setPersistedProperty(i,r){var s;i===Wt.LogsQueue&&e((s=r)!==null&&s!==void 0?s:[])},Ot:i=>this.Ot(i),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Ot(t){return new Promise((e=>{if($f(this.Sa,3))e({kind:"fatal",error:Yo(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,i=s=>{n||(n=!0,clearTimeout(r),e(s))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),i({kind:"retry-later",error:Yo(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)i({kind:"ok"});else if(o===413)i({kind:"too-large"});else if(o!==0&&o!==429&&500>o)i({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),i({kind:"retry-later",error:Yo(s.error,"logs request failed before receiving an HTTP response")})):i({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Mf(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,oe.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,Tu,(e=>{this.su=e}))}xu(t,e,n,i,r){if(e.length!==0){var s=e.map((a=>a.record));r([]);var o=rf(s,nf(n,oe.LIB_NAME,oe.LIB_VERSION),i,oe.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.windowId,r=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=i,z(r)||(e.sessionStartTimestamp=r),z(s)||(e.lastActivityTimestamp=s)}if(O!=null&&(t=O.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?hn(O.location.href):O.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},kv={metrics:class{constructor(t){this.rt=ye("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new Fg(this.hu(),(function(i){var r,s,o,a,l,u=i?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:i?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:i?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:i?.environment,resourceAttributes:u,beforeSend:i?.beforeSend,flushIntervalMs:(a=i?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=i?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var i=!1,r=o=>{i||(i=!0,clearTimeout(s),n(o))},s=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(I({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Cv=I({},Us,gv,mv,vv,yv,_v,bv,wv,Ev,Sv,xv,Iv,kv);nt.__defaultExtensionClasses=I({},Cv);(function(){oe.SDK_DIST_CHANNEL="npm";var t=Ji[Jn]=new nt;return(function(){function e(){e.done||(e.done=!0,lh=!1,ae(Ji,(function(n){n._dom_loaded()})))}P!=null&&P.addEventListener?P.readyState==="complete"?e():we(P,"DOMContentLoaded",e,{capture:!1}):w&&A.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const Av=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Ze=null,Es=null,uh="";const Na=new Map;function dh(t){return[...t.querySelectorAll(Av)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function Pv(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Na.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function Fv(){for(const[t,e]of Na)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Na.clear()}function fh(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function Ve(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;const i=Ze&&Ze!==n?Ze:null,r=Es;if(i&&Ge(i,{restoreFocus:!1,force:!0}),Ze!==n){let a=e.trigger||document.activeElement;a&&(i?.contains(a)||n.contains(a))&&(a=r),Es=a,uh=document.body.style.overflow,Pv(n),document.body.style.overflow="hidden"}Ze=n,n.classList.add("open"),n.setAttribute("aria-hidden","false");const s=n.querySelector(".modal-content");s&&(s.style.transform="scale(1) translateY(0)");const o=()=>{if(Ze!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||dh(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(o),setTimeout(o,260),!0}function Ge(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!fh(n))return!1;if(n.classList.remove("open"),n.setAttribute("aria-hidden","true"),n!==Ze)return!0;Fv(),document.body.style.overflow=uh,Ze=null;const i=Es;return Es=null,e.restoreFocus!==!1&&i?.isConnected&&i.focus({preventScroll:!0}),!0}function Rv(){return!!Ze}function Mu(t,e,n="Operation in progress"){const i=typeof t=="string"?document.getElementById(t):t;i&&(i.dataset.modalDismissible=e?"false":"true",i.setAttribute("aria-busy",String(!!e)),e?i.setAttribute("aria-label",n):i.removeAttribute("aria-label"))}function Tv(t){if(!fh(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():Ge(t)}document.addEventListener("keydown",t=>{if(!Ze)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),Tv(Ze);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=dh(Ze);if(!e.length){t.preventDefault(),(Ze.querySelector(".modal-content")||Ze).focus();return}const n=e[0],i=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),n.focus())},!0);function $v(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(i=>{i.getAttribute("aria-label")||i.setAttribute("aria-label","Close dialog")})})}const xl=Object.freeze({free:"Free",professional:"Pro",power:"Power"}),Mv=Object.freeze({free:2,professional:50,power:2e3}),Lv="(contact us)",Nv=Object.freeze({free:Object.freeze(["2 generations/month","Gemini model only","Code Review"]),professional:Object.freeze(["50 generations/month","All models","Code Regeneration","Code Review"]),power:Object.freeze(["2000 generations/month","All models","Code Regeneration","Bring your own key (BYOK)","Code Review","All models + early access",`API & MCP access ${Lv}`])}),hh="CodeFile",ph="GeneratedCode",Ov={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function un(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Oa(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Bv(t={},e=0){const n=Oa(t.artifactType||t.type||hh),i=Oa(t.artifactName||t.name||t.fileName||`${ph}-${e+1}`);return`${n||"artifact"}-${i||e+1}`}function gh(t={},e=0){const n=un(t),i=n.artifactType||n.type||hh,r=n.artifactName||n.name||ph;let s=n.fileName||r;return s.endsWith(".dart")||(s+=".dart"),{id:Oa(n.id)||Bv({...n,artifactType:i,artifactName:r,fileName:s},e),artifactType:i,artifactName:r,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:mh(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:vh(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:un(n.metadata),codeType:n.codeType||Ov[i]||"O"}}function mh(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=un(e),i=n.name||n.package;return i?{name:i,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(un(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function vh(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=un(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Ba(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function or(t,e={}){const n=[],i=typeof t=="string"?Ba(t):t,s=un(i||{});!i&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,f)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${f+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,f)=>gh(d,f)),l=new Map(o.map((d,f)=>[un(d).id,a[f]?.id]).filter(([d,f])=>d&&f)),u=d=>l.get(d)||d,c=vh(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:mh(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:un(s.metadata)}}function di(t){return or(t).artifacts[0]||gh()}function en(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function fi(t){return JSON.stringify(t,null,2)}function Dv(t){return fi({task:"architect",userRequest:String(t??"")})}function jv(t){const e=en(t);return e&&typeof e=="object"&&typeof e.task=="string"?fi(e):fi({task:"generate_bundle",bundleSpec:e})}function Uv(t){return fi({task:"review_bundle",generatedBundle:en(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function Il(t,e=null){const n={stage:t};return e!=null&&(n.bundle=en(e)),n}function Hv({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:i,userFeedback:r}){return fi({task:"regenerate_artifact",artifactId:i,bundleSpec:en(t),artifactBundle:en(e),bundleReview:en(n),userFeedback:String(r)})}function yh({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:i}){return fi({task:"regenerate_bundle",bundleSpec:en(t),artifactBundle:en(e),bundleReview:en(n),userFeedback:String(i??"")})}const Lu={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},Wv=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function ot(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function qv(t){return ot(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||ot(t.filterSummary)||ot(t.filterResults):!1}function _h(t,e=0){if(!ot(t)||e>3)return null;if(qv(t))return t;for(const n of Wv){const i=t[n];if(ot(i)){const r=_h(i,e+1);if(r)return r}}return null}function Ss(t){return Array.isArray(t)?t.some(Ss):ot(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(Ss):!1}function Da(t){return Array.isArray(t)?t.some(Da):ot(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(Da):!1}function wh(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function zv(t,e){if(ot(t))for(const[n,i]of Object.entries(t)){if(!ot(i))continue;const r=ot(i.categories)?i.categories:{},s=Object.entries(r).filter(([,o])=>ot(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):i.matched===!0&&e.add(wh(n))}}function Vv(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(i=>ot(i)?Object.entries(i):[]):Object.entries(t);for(const[i,r]of n){if(!Ss(r))continue;const s=wh(i),o=r?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?r?.raiFilterTypeResults:null),a=ot(o)?Object.entries(o).filter(([,l])=>Ss(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function Gv(t){return Lu[t]?Lu[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Nu(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function Kv(t){const e=_h(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);zv(e.filterSummary,n),Vv(e.filterResults,n);const i=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,s=Da(e.filterSummary||e.filterResults);return!i&&!s&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:i?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function Yv(t,e){const n=Kv(t);if(!n)return null;const i=[...new Set(n.matchedFilters.map(Gv))],r=n.kind==="blocked",s=new Error(r?`Safety screening blocked this pipeline step for ${Nu(i)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=r?"Request blocked for safety":"Safety check unavailable",s.userMessage=r?`The safety check detected ${Nu(i)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",s.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function Jv(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Ou(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const i of Jv(t).split(` -`)){if(!/^[A-Za-z_$]/.test(i)||e.test(i))continue;const r=i.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function kl(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(i,r,s)=>s.toUpperCase());if(e==="A"){const i=n.replace(/(^|_)(\w)/g,(r,s,o)=>o.toUpperCase());return i.charAt(0).toLowerCase()+i.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Bu(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),i=>i.toString(16).padStart(2,"0")).join("")}async function Zv(t,e=new Map){const n={},i=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=kl(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Bu(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Bu(c)),n[o]=u,a.type==="F"){const d=Ou(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>i.add(p))}}const r=new Set(Ou(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(i).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const Xv=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Du={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Qv=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),ey=["Struct","Record"],ty=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>Jo(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } -class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>Jo(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let i;for(;(i=n.exec(e))!==null;){const r=i[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=n(r);fetch(r.href,s)}})();var w=typeof window<"u"?window:void 0,Ue=typeof globalThis<"u"?globalThis:w,Ve=Ue?.navigator,F=Ue?.document,_e=Ue?.location,_l=Ue?.fetch,ua=Ue!=null&&Ue.XMLHttpRequest&&"withCredentials"in new Ue.XMLHttpRequest?Ue.XMLHttpRequest:void 0,Oc=Ue?.AbortController,_g=Ue?.CompressionStream,Xe=Ve?.userAgent;function jd(){return!(!w||w.navigator.onLine===!1)}var Pi=typeof globalThis<"u"?globalThis:w;Pi&&typeof self>"u"&&(Pi.self=Pi),Pi&&typeof File>"u"&&(Pi.File=function(){});var O=w??{},oe={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Bc(t,e,n,i,r,s,o){try{var a=t[s](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(i,r)}function ce(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var s=t.apply(e,n);function o(l){Bc(s,i,r,o,a,"next",l)}function a(l){Bc(s,i,r,o,a,"throw",l)}o(void 0)}))}}function k(){return k=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var i in n)({}).hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},k.apply(null,arguments)}function Ud(t,e){if(t==null)return{};var n={};for(var i in t)if({}.hasOwnProperty.call(t,i)){if(e.indexOf(i)!==-1)continue;n[i]=t[i]}return n}var Dc=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function jc(t){return typeof t=="string"||t}function Uc(t){return typeof t=="string"?t:void 0}var Fi,wg=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],Kt=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),Hc=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),bg=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],Eg=["token"],Hd="NativeGzipValidationError",da=t=>t.length>=2&&t[0]===31&&t[1]===139,Wc=(t,e)=>t===Hc.GZipJS||e===Hc.GZipJS||e==="gzip",qc=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",Tr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Hd,e},Sg=(function(){var t=ce((function*(e,n){18>e.size&&Tr("too-short");var i=new Uint8Array(yield e.slice(0,10).arrayBuffer());da(i)&&i[2]===8||Tr("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fi)return Fi;Fi=[];for(var c=0;256>c;c++){for(var d=c,f=0;8>f;f++)d=1&d?3988292384^d>>>1:d>>>1;Fi[c]=d>>>0}return Fi})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Tr("invalid-crc");var s=n.length>>>0;r.getUint32(4,!0)!==s&&Tr("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function fa(){return fa=ce((function*(t,e,n){e===void 0&&(e=!0);try{var i=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),s=r.writable.getWriter(),o=s.write(i).then((()=>s.close())).catch((function(){var u=ce((function*(c){try{yield s.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield Sg(l,i),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),fa.apply(this,arguments)}var xg=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],zc=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var n=t.toLowerCase();return xg.concat(e).some((i=>{var r=i.toLowerCase();return n.indexOf(r)!==-1}))};function j(t,e){return t.indexOf(e)!==-1}var Vs=function(t){return t.trim()},ha=function(t){return t.replace(/^\$/,"")};function Wd(t){var e,n=[];return(e=JSON.stringify(t,(function(i,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var qd=Object.prototype,zd=qd.hasOwnProperty,Gs=qd.toString,U=Array.isArray||function(t){return Gs.call(t)==="[object Array]"},qe=t=>typeof t=="function",ve=t=>t===Object(t)&&!U(t),rn=t=>{if(ve(t)){for(var e in t)if(zd.call(t,e))return!1;return!0}return!1},C=t=>t===void 0,Q=t=>Gs.call(t)=="[object String]",pa=t=>Q(t)&&t.trim().length===0,tt=t=>t===null,z=t=>C(t)||tt(t),Pe=t=>Gs.call(t)=="[object Number]"&&t==t,Vt=t=>Pe(t)&&t>0,St=t=>Gs.call(t)==="[object Boolean]",Ig=t=>t instanceof FormData,kg=t=>j(bg,t),Cg=t=>j(Eg,t);function Vd(t){return t===null||typeof t!="object"}function as(t,e){return{}.toString.call(t)==="[object "+e+"]"}function wl(t){return typeof Event<"u"&&Gd(t,Event)}function Gd(t,e){try{return t instanceof e}catch{return!1}}var Ag=[!0,"true",1,"1","yes"],Ro=t=>j(Ag,t),Pg=[!1,"false",0,"0","no"];function Tt(t,e,n,i,r){return e>n&&(i.warn("min cannot be greater than max."),e=n),Pe(t)?t>n?(i.warn(" cannot be greater than max: "+n+". Using max value instead."),n):e>t?(i.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(i.warn(" must be a number. using max or fallback. max: "+n+", fallback: "+r),Tt(r||n,e,n,i))}class Fg{constructor(e){this.tt={},this.et=e.et,this.it=Tt(e.bucketSize,0,100,e.rt),this.nt=Tt(e.refillRate,0,this.it,e.rt),this.st=Tt(e.refillInterval,0,864e5,e.rt)}ot(e,n){var i=Math.floor((n-e.lastAccess)/this.st);i>0&&(e.tokens=Math.min(e.tokens+i*this.nt,this.it),e.lastAccess=e.lastAccess+i*this.st)}consumeRateLimit(e){var n,i=Date.now(),r=String(e),s=this.tt[r];return s?this.ot(s,i):this.tt[r]=s={tokens:this.it,lastAccess:i},s.tokens===0||(s.tokens--,s.tokens===0&&((n=this.et)==null||n.call(this,e)),s.tokens===0)}stop(){this.tt={}}}var dt="Mobile",ls="iOS",sn="Android",fi="Tablet",Kd=sn+" "+fi,Yd="iPad",Jd="Apple",Zd=Jd+" Watch",Ji="Safari",hi="BlackBerry",Xd="Samsung",Qd=Xd+"Browser",ef=Xd+" Internet",Dn="Chrome",Rg=Dn+" OS",tf=Dn+" "+ls,bl="Internet Explorer",nf=bl+" "+dt,El="Opera",Tg=El+" Mini",Sl="Edge",rf="Microsoft "+Sl,ai="Firefox",sf=ai+" "+ls,sr="Nintendo",or="PlayStation",li="Xbox",of=sn+" "+dt,af=dt+" "+Ji,Ui="Windows",ga=Ui+" Phone",Vc="Nokia",ma="Ouya",lf="Generic",$g=lf+" "+dt.toLowerCase(),cf=lf+" "+fi.toLowerCase(),va="Konqueror",uf="Oculus Browser",cs="Vivaldi",df="Yandex",us="Whale",ya="DuckDuckGo",ff="Pale Moon",ds="Waterfox",Zi="Brave",hf="Google Search App",Se="(\\d+(\\.\\d+)?)",To=new RegExp("Version/"+Se),Mg=new RegExp(li,"i"),Lg=new RegExp(or+" \\w+","i"),Ng=new RegExp(sr+" \\w+","i"),xl=new RegExp(hi+"|PlayBook|BB10","i"),Og={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},pf=function(t,e,n,i){e=e||"";var r=(function(s){return s!=null&&s.brave?Zi:null})(n);return r||(i!=null&&i.detectGoogleSearchApp&&j(t,"GSA/")?hf:j(t," OPR/")&&j(t,"Mini")?Tg:j(t," OPR/")?El:xl.test(t)?hi:j(t,"IE"+dt)||j(t,"WPDesktop")?nf:j(t,"OculusBrowser")?uf:j(t,Qd)?ef:j(t,Sl)||j(t,"Edg/")?rf:j(t,cs+"/")?cs:j(t,"YaBrowser/")?df:j(t,us+"/")?us:j(t,ya+"/")||j(t,"Ddg/")?ya:j(t,"FBIOS")?"Facebook "+dt:j(t,"UCWEB")||j(t,"UCBrowser")?"UC Browser":j(t,"CriOS")?tf:j(t,"CrMo")||j(t,Dn)?Dn:j(t,sn)&&j(t,Ji)?of:j(t,"FxiOS")?sf:j(t.toLowerCase(),va.toLowerCase())?va:j(t,Zi+"/")?Zi:((s,o)=>o&&j(o,Jd)||(function(a){return j(a,Ji)&&!j(a,Dn)&&!j(a,sn)})(s))(t,e)?j(t,dt)?af:Ji:j(t,"PaleMoon/")?ff:j(t,ds+"/")?ds:j(t,ai)?ai:j(t,"MSIE")||j(t,"Trident/")?bl:j(t,"Gecko")?ai:"")},Bg={[nf]:[new RegExp("rv:"+Se)],[rf]:[new RegExp(Sl+"?\\/"+Se)],[Dn]:[new RegExp("("+Dn+"|CrMo)\\/"+Se)],[tf]:[new RegExp("CriOS\\/"+Se)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+Se)],[Ji]:[To],[af]:[To],[El]:[new RegExp("(Opera|OPR)\\/"+Se)],[ai]:[new RegExp(ai+"\\/"+Se)],[sf]:[new RegExp("FxiOS\\/"+Se)],[va]:[new RegExp("Konqueror[:/]?"+Se,"i")],[hi]:[new RegExp(hi+" "+Se),To],[of]:[new RegExp("android\\s"+Se,"i")],[ef]:[new RegExp(Qd+"\\/"+Se)],[uf]:[new RegExp("OculusBrowser\\/"+Se)],[cs]:[new RegExp(cs+"\\/"+Se)],[df]:[new RegExp("YaBrowser\\/"+Se)],[us]:[new RegExp(us+"\\/"+Se)],[Zi]:[new RegExp(Zi+"\\/"+Se)],[ya]:[new RegExp("(DuckDuckGo|Ddg)\\/"+Se)],[ff]:[new RegExp("PaleMoon\\/"+Se)],[ds]:[new RegExp(ds+"\\/"+Se)],[hf]:[new RegExp("GSA\\/"+Se)],[bl]:[new RegExp("(rv:|MSIE )"+Se)],Mozilla:[new RegExp("rv:"+Se)]},Dg=function(t,e,n,i){var r=pf(t,e,n,i),s=Bg[r];if(C(s))return null;for(var o=0;s.length>o;o++){var a=t.match(s[o]);if(a)return parseFloat(a[a.length-2])}return null},Gc=[[new RegExp(li+"; "+li+" (.*?)[);]","i"),t=>[li,t&&t[1]||""]],[new RegExp(sr,"i"),[sr,""]],[new RegExp(or,"i"),[or,""]],[xl,[hi,""]],[new RegExp(Ui,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[ga,""];if(new RegExp(dt).test(e)&&!/IEMobile\b/.test(e))return[Ui+" "+dt,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var i=Og[n[1]]||"";return/arm/i.test(e)&&(i="RT"),[Ui,i]}return[Ui,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[ls,[t[3],t[4],t[5]||"0"].join(".")]:[ls,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=C(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+sn+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+sn+")","i"),t=>t&&t[2]?[sn,[t[2],t[3],t[4]||"0"].join(".")]:[sn,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[Rg,""]],[/Linux|debian/i,["Linux",""]]],Kc=function(t){return Ng.test(t)?sr:Lg.test(t)?or:Mg.test(t)?li:new RegExp(ma,"i").test(t)?ma:new RegExp("("+ga+"|WPDesktop)","i").test(t)?ga:/iPad/.test(t)?Yd:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Zd:xl.test(t)?hi:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(Vc,"i").test(t)?Vc:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(dt).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?sn:Kd:new RegExp("(pda|"+dt+")","i").test(t)?$g:new RegExp(fi,"i").test(t)&&!new RegExp(fi+" pc","i").test(t)?cf:""},jg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Yc(t,e){return typeof(n=t)=="string"&&jg.test(n)?t:e();var n}function wn(t){return t&&t.split("#")[0]}function Il(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Jc(t,e,n){return gf.apply(this,arguments)}function gf(){return(gf=ce((function*(t,e,n){var i;try{return yield Promise.race([t,new Promise(((r,s)=>{i=Il((()=>{try{n?.(),r()}catch(o){s(o)}}),e)}))])}finally{clearTimeout(i)}}))).apply(this,arguments)}var Ug=t=>t instanceof Error,mf={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Hg=mf.info;function vf(t){if(St(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(U(t))return{arrayValue:{values:t.map((e=>vf(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function fs(t){var e=[];for(var n in t){var i=t[n];tt(i)||C(i)||e.push({key:n,value:vf(i)})}return e}function Wg(t,e){var n=mf[t.level||"info"]||Hg,i=n.text,r=n.number,s=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),z(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),z(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=k({},o,t.attributes||{}),l={timeUnixNano:s,observedTimeUnixNano:s,severityNumber:r,severityText:i,body:{stringValue:t.body},attributes:fs(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),C(t.trace_flags)||(l.flags=t.trace_flags),l}function yf(t,e,n){return k({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function _f(t,e,n,i){return{resourceLogs:[{resource:{attributes:fs(e)},scopeLogs:[{scope:{name:n,version:i},logRecords:t}]}]}}let qg=class{constructor(t,e,n,i,r,s,o){var a;s===void 0&&(s=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=i,this.ht=r,this.dt=s,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Wg(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Log was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return i}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return ce((function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally((()=>{t.ct=null}))),t.ct}))()}Ft(){var t=this;return ce((function*(){var e;t.Et();var n=(e=t._instance.getPersistedProperty(Kt.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var i=n.length,r=0;n.length>0&&i>r;){var s,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=_f(l.map((d=>d.record)),t.Lt(),(s=t.vt)!==null&&s!==void 0?s:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(Kt.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return ce((function*(){var n,i=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(Kt.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(Kt.LogsQueue,r.slice(i)),yield e.dt()}))()}Lt(){return yf(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(Kt.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(Kt.LogsQueue,n),this.kt>n.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Il((()=>{this.Nt=void 0,this.It()}),t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(Kt.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return ce((function*(){e.Et();var n=e.flush().catch((()=>{}));t!==void 0?yield Jc(n,t):yield n}))()}flushWithTimeout(t){var e=this;return ce((function*(){var n=e.flush();yield Jc(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var $o=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Zc(t){return String(t)+"000000"}function Xc(t,e,n,i){var r="";return i&&(r=Object.keys(i).sort().map((s=>JSON.stringify(s)+":"+JSON.stringify(i[s]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let zg=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=ce((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),i=n().finally((()=>{this.ct===i&&(this.ct=null)}));return this.ct=i,i}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var n,i;try{n=e.attributes?k({},e.attributes):void 0,i=Xc(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(i);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(i,r)}var s=this.Ut.get(e.name);s===void 0?this.Ut.set(e.name,e.type):s===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+s+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array($o.length+1).fill(0)});var i=t.hist;i.count+=1,i.sum+=e,i.min=Math.min(i.min,e),i.max=Math.max(i.max,e),i.bucketCounts[(function(r,s){for(var o=0;s.length>o;o++)if(s[o]>=r)return o;return s.length})(e,$o)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Metric was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return i}$t(){this.Nt||(this.Nt=Il((()=>{this.Nt=void 0,this.flush().catch((t=>{this.rt.error("Metrics flush failed:",t)}))}),this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return ce((function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var n=t.Wt,i=yield t._instance.Jt(t.Gt(e));if(n===t.Wt)switch(i.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",i.error)}}}))()}Gt(t){return e=this.Xt(t),n=(function(s,o,a){return k({},s.resourceAttributes,{"service.name":s.serviceName||"unknown_service"},s.environment&&{"deployment.environment":s.environment},s.serviceVersion&&{"service.version":s.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),i=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:fs(n)},scopeMetrics:[{scope:{name:i,version:r},metrics:e}]}]};var e,n,i,r}Xt(t){var e=Zc(Date.now()),n=new Map;for(var i of t.values()){var r,s=Xc(i.type,i.name,i.unit,void 0),o=n.get(s);o||(o=k({name:i.name},i.unit&&{unit:i.unit}),i.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:i.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},n.set(s,o));var a=fs((r=i.attributes)!==null&&r!==void 0?r:{}),l=Zc(i.windowStartMs);if(i.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=i.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(i.type==="gauge"){var d,f={attributes:a,timeUnixNano:e,asDouble:(d=i.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(f)}else i.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:i.hist.count,sum:i.hist.sum,min:i.hist.min,max:i.hist.max,bucketCounts:i.hist.bucketCounts,explicitBounds:$o})}return Array.from(n.values())}Yt(t){var e,n;for(var i of t){var r=i[0],s=i[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,s.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=s.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(s.hist)if(o.hist){o.hist.count+=s.hist.count,o.hist.sum+=s.hist.sum,o.hist.min=Math.min(o.hist.min,s.hist.min),o.hist.max=Math.max(o.hist.max,s.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=s.hist.bucketCounts[a]}else o.hist=s.hist}else this.Qt()&&this.Bt.set(r,s)}}};var $r,Qc,Mo;function Vg(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return Mo&&n.length===Qc||(Qc=n.length,Mo=n.reduce(((i,r)=>{$r||($r={});var s=$r[r];if(s)i[s[0]]=s[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){i[u]=c,$r[r]=[u,c];break}}return i}),{})),Mo}}class Gg{constructor(e,n,i){i===void 0&&(i=[]),this.coercers=e,this.stackParser=n,this.modifiers=i}buildFromUnknown(e,n){n===void 0&&(n={});var i=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(i,n,0).apply(e),s=this.buildParsingContext(n),o=this.parseStacktrace(r,s);return{$exception_list:this.convertToExceptionList(o,i),$exception_level:"error"}}modifyFrames(e){var n=this;return ce((function*(){for(var i of e)i.stacktrace&&i.stacktrace.frames&&U(i.stacktrace.frames)&&(i.stacktrace.frames=yield n.applyModifiers(i.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var i,r;return e.cause!=null&&(i=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),k({},e,{cause:i,stack:r})}applyChunkIds(e,n){return e.map((i=>(i.filename&&n&&(i.chunk_id=n[i.filename]),i)))}applyCoercers(e,n){for(var i of this.coercers)if(i.match(e))return i.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return ce((function*(){var i=e;for(var r of n.modifiers)i=yield r(i);return i}))()}convertToExceptionList(e,n){var i,r,s,o={type:e.type,value:e.value,mechanism:{type:(i=n.type)!==null&&i!==void 0?i:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(s=e.synthetic)!==null&&s!==void 0&&s}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,k({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Vg(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,i){i===void 0&&(i=0);var r=(s,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(s,a)}};return k({},n,{syntheticException:i==0?n.syntheticException:void 0,mechanism:e,apply:s=>r(s,i),next:s=>r(s,i+1)})}}var pi="?";function _a(t,e,n,i,r){var s={platform:t,filename:e,function:n===""?pi:n,in_app:!0};return C(i)||(s.lineno=i),C(r)||(s.colno=r),s}var wf=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,i=t.indexOf("safari-web-extension")!==-1;return n||i?[t.indexOf("@")!==-1?t.split("@")[0]:pi,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Kg=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Yg=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Jg=/\((\S*)(?::(\d+))(?::(\d+))\)/,Zg=(t,e)=>{var n=Kg.exec(t);if(n)return _a(e,n[1],pi,+n[2],+n[3]);var i=Yg.exec(t);if(i){if(i[2]&&i[2].indexOf("eval")===0){var r=Jg.exec(i[2]);r&&(i[2]=r[1],i[3]=r[2],i[4]=r[3])}var s=wf(i[1]||pi,i[2]);return _a(e,s[1],s[0],i[3]?+i[3]:void 0,i[4]?+i[4]:void 0)}},Xg=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Qg=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,em=(t,e)=>{var n=Xg.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var i=Qg.exec(n[3]);i&&(n[1]=n[1]||"eval",n[3]=i[1],n[4]=i[2],n[5]="")}var r=n[3],s=n[1]||pi,o=wf(s,r);return _a(e,r=o[1],s=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},eu=/\(error: (.*)\)/;class tm{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var i=Q(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:i?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return as(e,"DOMException")}isDOMError(e){return as(e,"DOMError")}}class nm{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Gd(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var i=e.message;return String(i.error&&typeof i.error.message=="string"?i.error.message:i)}getStack(e){return e.stacktrace||e.stack||void 0}}class im{constructor(){}match(e){return!!as(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var i;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return k({},r,{stack:(i=this.pe(e))!==null&&i!==void 0?i:r.stack,synthetic:!0})}fe(e){return Q(e.message)&&e.message.length>0}pe(e){var n=e;if(Q(n.filename)&&n.filename.length>0){var i,r,s=(i=n.lineno)!==null&&i!==void 0?i:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error + at `+n.filename+":"+s+":"+o}}}var rm=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class sm{match(e){return typeof e=="string"}coerce(e,n){var i,r=this.getInfos(e),s=r[0],o=r[1];return{type:s??"Error",value:o??e,stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}getInfos(e){var n="Error",i=e,r=e.match(rm);return r&&(n=r[1],i=r[2]),[n,i]}}var om=["fatal","error","warning","log","info","debug"];function bf(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var i=n.length;i>0;i--){var r=n.slice(0,i).join(", ");if(e>=r.length)return i===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class am{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var i,r,s=this.getErrorPropertyFromObject(e);return s?n.apply(s):{type:this.getType(e),value:this.getValue(e),stack:(i=this.getStack(e))!==null&&i!==void 0?i:(r=n.syntheticException)==null?void 0:r.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return wl(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var i=this.getObjectClassName(e);return(i&&i!=="Object"?"'"+i+"'":"Object")+" captured as exception with keys: "+bf(e)}isSeverityLevel(e){return Q(e)&&!pa(e)&&om.indexOf(e)>=0}getStack(e){try{return Q(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:Q(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var i=e[n];if(Ug(i))return i}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class lm{match(e){return wl(e)}coerce(e,n){var i,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+bf(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class cm{match(e){return Vd(e)}coerce(e,n){var i;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class um{match(e){return as(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!wl(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var i,r=this.getUnhandledRejectionReason(e);return Vd(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var hs="$message",ps="$timestamp",dm=new Set([hs,ps]),Lo={enabled:!0,max_bytes:32768};function gs(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:Lo.enabled,max_bytes:hm(t.max_bytes,Lo.max_bytes)}:k({},Lo)}class fm{constructor(e){this.Ke=[],this.Je=0,this.Ne=gs(e)}setConfig(e){this.Ne=gs(e),this.Xe()}add(e){var n=(function(r){var s;try{s=Wd(r)}catch{return}try{var o=JSON.parse(s);if(!ve(o))return;var a=o,l=a[hs],u=a[ps];return!Q(l)||l.trim().length===0||!Q(u)&&!Pe(u)?void 0:{step:a,json:s}}catch{return}})(e);if(n){var i=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var s=encodeURIComponent(r),o=0,a=0;s.length>a;a++)s[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);i>this.Ne.max_bytes||(this.Ke.push({step:n.step,bytes:i}),this.Je+=i,this.Xe())}}getAttachable(){return this.Ke.map((e=>e.step))}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function hm(t,e){if(!Pe(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var Ef=function(t,e){var n=(e===void 0?{}:e).debugEnabled,i={k(r){if(w&&(oe.DEBUG||w.POSTHOG_DEBUG||n)&&!C(w.console)&&w.console){for(var s=("__rrweb_original__"in w.console[r])?w.console[r].__rrweb_original__:w.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];s(t,...a)}},debug(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("debug",...s)},info(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("log",...s)},warn(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("warn",...s)},error(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("error",...s)},critical(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];console.error(t,...s)},uninitializedWarning(r){i.error("You must initialize PostHog before calling "+r)},createLogger:(r,s)=>Ef(t+" "+r,s)};return i},A=Ef("[PostHog.js]"),ye=A.createLogger,pm=ye("[ExternalScriptsLoader]"),No=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return pm.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var i=F?.querySelectorAll("script");if(i){for(var r,s=function(){if(i[o].src===e){var l=i[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;i.length>o;o++)if(r=s())return r.v}var a=()=>{if(!F)return n("document not found");var l=F.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")F.head.appendChild(l);else{var u,c=F.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):F.body.appendChild(l)}};F!=null&&F.body?a():F?.addEventListener("DOMContentLoaded",a)};O.__PosthogExtensions__=O.__PosthogExtensions__||{},O.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var i;if(t.config.strict_script_versioning)i=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var s=3e5;r=r+"&t="+Math.floor(Date.now()/s)*s}i=t.requestRouter.endpointFor("assets",r)}No(t,i,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");No(t,o,n)}},O.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var i=t.requestRouter.endpointFor("api",e);No(t,i,n)};oe.DEBUG=!1,oe.LIB_VERSION="1.415.7",oe.LIB_NAME="web";var Sf="$people_distinct_id",ar="$device_id",Oo="$device_model",Hi="__alias",Wi="__timers",wa="$autocapture_disabled_server_side",ba="$heatmaps_enabled_server_side",Ea="$exception_capture_enabled_server_side",Sa="$error_tracking_suppression_rules",xa="$error_tracking_capture_extension_exceptions",Ia="$web_vitals_enabled_server_side",kl="$dead_clicks_enabled_server_side",Cl="$product_tours_enabled_server_side",ka="$web_vitals_allowed_metrics",On="$session_recording_remote_config",xf="$replay_sample_rate",If="$replay_override_sampling",kf="$replay_override_linked_flag",Cf="$replay_override_url_trigger",Af="$replay_override_event_trigger",ri="$sesid",Al="$session_is_sampled",Tn="$enabled_feature_flags",qi="$active_feature_flags",Vr="$early_access_features",Ca="$feature_flag_details",zi="$feature_flag_payloads",Gr="$feature_flag_request_id",ms="$minimal_flag_called_events",Pt="$override_feature_flags",$n="$override_feature_flag_payloads",Gt="$stored_person_properties",Mn="$stored_group_properties",Aa="$surveys",vs="$surveys_loaded_at",Pa="$surveys_activated",Kr="$surveys_activated_session",Yr="$surveys_activated_timestamps",Vi="ph_product_tours",Nn="$flag_call_reported",Gi="$flag_call_reported_session_id",Jr="$feature_flag_errors",Xi="$feature_flag_evaluated_at",pt="$user_state",Fa="$client_session_props",Ra="$capture_rate_limit",Ta="$initial_campaign_params",$a="$initial_referrer_info",ys="$initial_person_info",_s="$epp",Mr="$posthog_cookieless",Pf="$cookieless_mode",Ff="$sdk_debug_extensions_init_method",Rf="$sdk_debug_extensions_init_time_ms",Tf="$sdk_debug_recording_script_not_loaded",Pl="PostHog loadExternalDependency extension not found.",Ln="on_reject",Xt="always",Zn="anonymous",kn="identified",Ma="identified_only",ws="visibilitychange",bs="beforeunload",ni="$pageview",Bo="$pageleave",Do="$identify",tu="$groupidentify";function Lr(t,e){U(t)&&t.forEach(e)}function ae(t,e){if(!z(t))if(U(t))t.forEach(e);else if(Ig(t))t.forEach(((i,r)=>e(i,r)));else for(var n in t)zd.call(t,n)&&e(t[n],n)}var me=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;e>i;i++)n[i-1]=arguments[i];for(var r of n)for(var s in r)r[s]!==void 0&&(t[s]=r[s]);return t};function Zr(t){for(var e=Object.keys(t),n=e.length,i=new Array(n);n--;)i[n]=[e[n],t[e[n]]];return i}var nu=function(t){try{return t()}catch{return}},gm=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),i=0;e>i;i++)n[i]=arguments[i];return t.apply(this,n)}catch(r){A.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),A.critical(r)}}},Fl=function(t){var e={};return ae(t,(function(n,i){(Q(n)&&n.length>0||Pe(n))&&(e[i]=n)})),e},mm=["herokuapp.com","vercel.app","netlify.app"];function vm(t){var e=t?.hostname;if(!Q(e))return!1;var n=e.split(".").slice(-2).join(".");for(var i of mm)if(n===i)return!1;return!0}function we(t,e,n,i){var r=i??{},s=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:s!==void 0&&s,passive:o===void 0||o})}function La(t){return t.name==="ph_toolbar_internal"}var $f=t=>{if(F){try{for(var e=t+"=",n=F.cookie.split(";").filter((s=>s.length)),i=0;n.length>i;i++){for(var r=n[i];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return Pe(t)&&isFinite(t)&&Math.floor(t)===t});class Es{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,i,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(i)||!Number.isInteger(r)||0>e||0>n||0>i||0>r||e>0xffffffffffff||n>4095||i>1073741823||r>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=e/Math.pow(2,40),s[1]=e/Math.pow(2,32),s[2]=e/Math.pow(2,24),s[3]=e/Math.pow(2,16),s[4]=e/256,s[5]=e,s[6]=112|n>>>8,s[7]=n,s[8]=128|i>>>24,s[9]=i>>>16,s[10]=i>>>8,s[11]=i,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new Es(s)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Es(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var i=this.bytes[n]-e.bytes[n];if(i!==0)return Math.sign(i)}return 0}}class ym{generate(){var e=this.generateOrAbort();if(!C(e))return e;this.S=0;var n=this.generateOrAbort();if(C(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return Es.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new _m}}var iu,Mf=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};w&&!C(w.crypto)&&crypto.getRandomValues&&(Mf=t=>crypto.getRandomValues(t));class _m{nextUint32(){return this.R.length>this.O||(Mf(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var Yt=()=>wm().toString(),wm=()=>(iu||(iu=new ym)).generate(),Ri="",bm=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,Qt={N:()=>!!F,j(t){A.error("cookieStore error: "+t)},P:$f,H(t){var e;try{e=JSON.parse(Qt.P(t))||{}}catch{}return e},F(t,e,n,i,r){if(!F)return!1;try{var s="",o="",a=(function(c,d){if(d){var f=(function(h,g){if(g===void 0&&(g=F),Ri)return Ri;if(!g||["localhost","127.0.0.1"].includes(h))return"";for(var m=h.split("."),v=Math.min(m.length,8),x="dmn_chk_"+Yt();!Ri&&v--;){var E=m.slice(v).join("."),y=x+"=1;domain=."+E+";path=/";g.cookie=y+";max-age=3",g.cookie.includes(x)&&(g.cookie=y+";max-age=0",Ri=E)}return Ri})(c);if(!f){var p=(h=>{var g=h.match(bm);return g?g[0]:""})(c);p!==f&&A.info("Warning: cookie subdomain discovery mismatch",p,f),f=p}return f?"; domain=."+f:""}return""})(F.location.hostname,i);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),s="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+s+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&A.warn("cookieStore warning: large cookie, len="+u.length),F.cookie=u,!0}catch{return!1}},q(t,e){if(F!=null&&F.cookie)try{Qt.F(t,"",-1,e)}catch{return}}},jo=null,de={N(){if(!tt(jo))return jo;var t=!0;if(C(w))t=!1;else try{var e="__mplssupport__";de.F(e,"xyz"),de.P(e)!=='"xyz"'&&(t=!1),de.q(e)}catch{t=!1}return t||A.error("localStorage unsupported; falling back to cookie store"),jo=t,t},j(t){A.error("localStorage error: "+t)},P(t){try{return w?.localStorage.getItem(t)}catch(e){de.j(e)}return null},H(t){try{return JSON.parse(de.P(t))||{}}catch{}return null},F(t,e){try{return w?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){de.j(n)}return!1},q(t){try{w?.localStorage.removeItem(t)}catch(e){de.j(e)}}},Em=[ar,"distinct_id",ri,Al,_s,ys,pt],Nr={},Sm={N:()=>!0,j(t){A.error("memoryStorage error: "+t)},P:t=>Nr[t]||null,H:t=>Nr[t]||null,F:(t,e)=>(Nr[t]=e,!0),q(t){delete Nr[t]}},Cn=null,xe={N(){if(!tt(Cn))return Cn;if(Cn=!0,C(w))Cn=!1;else try{var t="__support__";xe.F(t,"xyz"),xe.P(t)!=='"xyz"'&&(Cn=!1),xe.q(t)}catch{Cn=!1}return Cn},j(t){A.error("sessionStorage error: ",t)},P(t){try{return w?.sessionStorage.getItem(t)}catch(e){xe.j(e)}return null},H(t){try{return JSON.parse(xe.P(t))||null}catch{}return null},F(t,e){try{return w?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){xe.j(n)}return!1},q(t){try{w?.sessionStorage.removeItem(t)}catch(e){xe.j(e)}}};class xm{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===Xt||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ln}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,n=e.token,i=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(i?i+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return Ro(e)?1:j(Pg,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?de:Qt;if(!this.ni||this.ni!==n){this.ni=n;var i=e==="localStorage"?Qt:de;i.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Ro(i.P(this.ri))),i.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[Ve?.doNotTrack,Ve?.msDoNotTrack,O.doNotTrack].some((e=>Ro(e)))}}function Lf(t,e){var n,i=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!qe(i))return e;try{var r=i(e);return Q(r)&&r?r:e}catch(s){return A.error("Error in get_current_url, falling back to window.location.href",s),e}}var Nf="__POSTHOG_TOOLBAR__",Im=1,km=3,Cm=11;function ru(t){return t instanceof Element&&(t.id===Nf||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function bn(t){return!!t&&t.nodeType===Im}function at(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Of(t){return!!t&&t.nodeType===km}function Bf(t){return!!t&&t.nodeType===Cm&&bn(t.host)}var Df=1e3;function Rl(t){return t?Vs(t).split(/\s+/):[]}function su(t,e){var n=(function(i){var r,s=w==null||(r=w.location)==null?void 0:r.href;return C(s)?void 0:Lf(i,s)})(e);return!!(n&&t&&t.some((i=>n.match(i))))}function Ss(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return Rl(e)}function jf(t){return z(t)?null:Vs(t).split(/(\s+)/).filter((e=>Qi(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function lr(t){var e="";return Oa(t)&&!qf(t)&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;Of(n)&&n.textContent&&(e+=(i=jf(n.textContent))!==null&&i!==void 0?i:"")})),Vs(e)}function Uo(t){var e;return C(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Tl=["a","button","form","input","select","textarea","label"];function Na(t,e){if(C(e))return!0;var n,i=function(s){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(s,o))))return{v:!0}};for(var r of t)if(n=i(r))return n.v;return!1}function Uf(t){var e=t.parentNode;return!(!e||!bn(e))&&e}var Am=[".ph-no-autocapture","[data-ph-no-autocapture]"],Hf=["next","previous","prev",">","<"],Pm=[...Hf,"+","-","−","–"],ou=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,au=[".ph-no-rageclick",".ph-no-capture"],Fm=["","text","search","email","password","url","tel","number"];function lu(t,e){if(!w||$l(t))return!1;var n,i,r,s,o;if(St(e)?(n=!!e&&au,i=void 0,r=!1):(n=(s=e?.css_selector_ignorelist)!==null&&s!==void 0?s:au,i=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!bn(l))&&(!!at(l,"textarea")||(at(l,"input")?j(Fm,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Wf(t,!1).targetElementList;return!(function(l,u){if(l===!1||C(l))return!1;var c;if(l===!0)c=Hf;else{if(!U(l))return!1;if(l.length>10)return A.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var f=d.safeText,p=d.ariaLabel;return c.some((h=>ou(f,h)||ou(p,h)))}))})(i,a.map((l=>{var u;return{safeText:lr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!Na(a,n)}var $l=t=>!t||at(t,"html")||!bn(t),Wf=(t,e)=>{if(!w||$l(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,i=[t],r=t;r.parentNode&&!at(r,"body");)if(Bf(r.parentNode))i.push(r.parentNode.host),r=r.parentNode.host;else{var s=Uf(r);if(!s)break;if(e||Tl.indexOf(s.tagName.toLowerCase())>-1)n=!0;else try{var o=w.getComputedStyle(s);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}i.push(s),r=s}return{parentIsUsefulElement:n,targetElementList:i}};function Oa(t){for(var e=new Set,n=0,i=t;i.parentNode&&!at(i,"body");i=i.parentNode){if(n++>=Df||e.has(i))return!1;e.add(i);var r=Ss(i);if(j(r,"ph-sensitive")||j(r,"ph-no-capture"))return!1}if(j(Ss(t),"ph-include"))return!0;var s=t.type||"";if(Q(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!Q(o)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(o.replace(/[^a-zA-Z0-9]/g,""))}function qf(t){return!!(at(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||at(t,"select")||at(t,"textarea")||t.getAttribute("contenteditable")==="true")}var cu=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),uu=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Rm=[16,15,14,13],Tm=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),du=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),fu=/[0-9A-Za-z_]/;function $m(t){for(var e=0,n=!1,i=t.length-1;i>=0;i--){var r=t.charCodeAt(i)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Qi(t,e){if(e===void 0&&(e=!0),z(t))return!1;if(Q(t)){t=Vs(t);var n=e?cu.test((t||"").replace(/[- ]/g,"")):(function(r){var s;for(uu.lastIndex=0;s=uu.exec(r);){var o=s[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Rm){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(cu.test(d)&&$m(d))return!0}}}return!1})(t);if(n)return!1;var i=e?Tm.test(t):(function(r){var s;for(du.lastIndex=0;s=du.exec(r);){var o=s[1],a=s[3];if(!(o&&a&&fu.test(o)&&fu.test(a)))return!0}return!1})(t);if(i)return!1}return!0}function hu(t){var e=lr(t);return Qi(e=(e+" "+zf(t)).trim())?e:""}function zf(t){var e="";return t&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;if(n&&((i=n.tagName)==null?void 0:i.toLowerCase())==="span")try{var r=lr(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+zf(n)).trim())}catch(s){A.error("[AutoCapture]",s)}})),e}function pu(t){return t.replace(/"|\\"/g,'\\"')}function Mm(t){var e=t.attr__class;if(e)return U(e)?e:Rl(e)}var Or=ye("[Dead Clicks]"),Lm=()=>!0,Nm=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(kl)),i=t.instance.config.capture_dead_clicks;return St(i)?i:!!ve(i)||n};class gu{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,i){this.instance=e,this.isEnabled=n,this.onCapture=i,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[kl]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,i;(n=O.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Or.error("failed to load script",r):e()}))}oi(){var e;if(F){if(!this.si&&(e=O.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=ve(this.instance.config.capture_dead_clicks)?k({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=O.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(F),Or.info("starting...")}}else Or.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Or.info("stopping..."))}}var Ho=ye("[SegmentIntegration]"),Vf="posthog-js";function Gf(t,e){var n=e===void 0?{}:e,i=n.organization,r=n.projectId,s=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,f,p,h,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var v,x=((d=c.exception)==null?void 0:d.values)||[],E=x.map((S=>k({},S,{stacktrace:S.stacktrace?k({},S.stacktrace,{type:"raw",frames:(S.stacktrace.frames||[]).map((I=>k({},I,{platform:"web:javascript"})))}):void 0}))),y={$exception_message:((f=x[0])==null?void 0:f.value)||c.message,$exception_type:(p=x[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:E,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((h=x[0])==null?void 0:h.value)||c.message,$sentry_exception_type:(g=x[0])==null?void 0:g.type,$sentry_tags:c.tags};return i&&r&&(y.$sentry_url=(s||"https://sentry.io/organizations/")+i+"/issues/?project="+r+"&query="+c.event_id),u&&((v=t.exceptions)==null||v.sendExceptionEvent(y)),c}}class Om{constructor(e,n,i,r,s,o){this.name=Vf,this.setupOnce=function(a){a(Gf(e,{organization:n,projectId:i,prefix:r,severityAllowList:s,sendExceptionsToPostHog:o==null||o}))}}}class mu{constructor(e){this.li=(n,i,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(A.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var i,r=this.vi(e,n);return this.ui={pathname:(i=w?.location.pathname)!==null&&i!==void 0?i:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var i=this.ui;if(!i)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:i.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var o=s.maxScrollHeight,a=s.lastScrollY,l=s.maxScrollY,u=s.maxContentHeight,c=s.lastContentY,d=s.maxContentY;if(!(C(o)||C(a)||C(l)||C(u)||C(c)||C(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var f=o>1?Tt(a/o,0,1,A):1,p=o>1?Tt(l/o,0,1,A):1,h=u>1?Tt(c/u,0,1,A):1,g=u>1?Tt(d/u,0,1,A):1;r=me(r,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:f,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:h,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return i.pathname&&(r.$prev_pageview_pathname=i.pathname),i.timestamp&&(r.$prev_pageview_duration=(e.getTime()-i.timestamp.getTime())/1e3),r}}var Wo=["flags","surveys"],Bm={[Sf]:{exposure:"hidden"},[Hi]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Wi]:{exposure:"hidden"},[wa]:{exposure:"event"},[ba]:{exposure:"hidden"},[Ea]:{exposure:"event"},[Sa]:{exposure:"hidden"},[xa]:{exposure:"event"},[Ia]:{exposure:"event"},[kl]:{exposure:"event"},[Cl]:{exposure:"hidden"},[ka]:{exposure:"event"},[On]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[ri]:{exposure:"hidden"},[Al]:{exposure:"event"},[xf]:{exposure:"event",shouldSkipFromEventProperties:t=>tt(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Tn]:{exposure:"hidden",storageGroup:"flags"},[qi]:{exposure:"hidden",storageGroup:"flags"},[Vr]:{exposure:"hidden"},[Ca]:{exposure:"hidden",storageGroup:"flags"},[zi]:{exposure:"hidden",storageGroup:"flags"},[Gr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ms]:{exposure:"hidden",storageGroup:"flags"},[Pt]:{exposure:"hidden"},[$n]:{exposure:"hidden"},[Gt]:{exposure:"hidden"},[Mn]:{exposure:"hidden"},[Aa]:{exposure:"hidden",storageGroup:"surveys"},[vs]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Pa]:{exposure:"event"},[Kr]:{exposure:"hidden"},[Yr]:{exposure:"hidden"},[Vi]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[Nn]:{exposure:"hidden"},[Gi]:{exposure:"hidden"},[Jr]:{exposure:"hidden"},[Xi]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[pt]:{exposure:"hidden"},[Fa]:{exposure:"hidden"},[Ra]:{exposure:"hidden"},[Ta]:{exposure:"hidden"},[$a]:{exposure:"hidden"},[ys]:{exposure:"hidden"},[_s]:{exposure:"hidden"},[If]:{exposure:"event"},[kf]:{exposure:"event"},[Cf]:{exposure:"event"},[Af]:{exposure:"event"},[Ff]:{exposure:"event"},[Rf]:{exposure:"event"},[Tf]:{exposure:"event"},$sdk_debug_replay_event_trigger_status:{exposure:"event"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:"event"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:"event"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:"event"},$sdk_debug_replay_trigger_groups_count:{exposure:"event"},$sdk_debug_replay_url_trigger_status:{exposure:"event"},$session_recording_start_reason:{exposure:"event"}},Dm=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],An=t=>{var e=Bm[t];if(e)return e;for(var n of Dm){var i=n[1];if(t.indexOf(n[0])===0)return i}},si=(t,e)=>{try{return JSON.stringify(t,((n,i)=>typeof i=="bigint"?i.toString():i),e)}catch{return Wd(t)}},xs=t=>{var e=F?.createElement("a");return C(e)?null:(e.href=t,e)},gi=function(t,e){for(var n,i=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;i.length>r;r++){var s=i[r].split("=");if(s[0]===e){n=s;break}}if(!U(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{A.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},cr=function(t,e,n){if(!t||!e||!e.length)return t;for(var i=t.split("#"),r=i[1],s=(i[0]||"").split("?"),o=s[1],a=s[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");U(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var f=a;return o!=null&&(f+="?"+u.join("&")),r!=null&&(f+="#"+r),f},Is=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Kf=(t,e)=>t>=e&&jd(),Yf=(t,e,n,i)=>{if(t===0){if(jd()){var r=e+1;return r===n&&i(),r}return e}return 0},Br="https?://(.*)",mi=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],jm=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...mi],ur="",Um=["li_fat_id"];function Jf(t,e,n){if(!F)return{};var i,r=e?[...mi,...n||[]]:[],s=Zf(cr(F.URL,r,ur),t),o=(i={},ae(Um,(function(a){var l=$f(a);i[a]=l||null})),i);return me(o,s)}function Zf(t,e){var n=jm.concat(e||[]),i={};return ae(n,(function(r){var s=gi(t,r);i[r]=s||null})),i}function Xf(t){var e=(function(s){return s?s.search(Br+"google.([^/?]*)")===0?"google":s.search(Br+"bing.com")===0?"bing":s.search(Br+"yahoo.com")===0?"yahoo":s.search(Br+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",i={};if(!tt(e)){i.$search_engine=e;var r=F?gi(F.referrer,n):"";r.length&&(i.ph_keyword=r)}return i}function vu(){return navigator.language||navigator.userLanguage}var ks="$direct";function Qf(){return F?.referrer||ks}function eh(t,e,n){n===void 0&&(n=!1);var i=t?[...mi,...e||[]]:[],r=n?wn(_e?.href):_e?.href,s=r?.substring(0,1e3);return{r:Qf().substring(0,1e3),u:s?cr(s,i,ur):void 0}}function th(t,e){var n;e===void 0&&(e=!1);var i=t.r,r=t.u,s=e?wn(r):r,o={$referrer:i,$referring_domain:i==null?void 0:i==ks?ks:(n=xs(i))==null?void 0:n.host};if(s){o.$current_url=s;var a=xs(s);o.$host=a?.host,o.$pathname=a?.pathname;var l=Zf(s);me(o,l)}if(i){var u=Xf(i);me(o,u)}return o}function nh(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Hm(){try{return new Date().getTimezoneOffset()}catch{return}}var Wm={flags:Xi,surveys:vs},qm=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],Xn="main";class qo{constructor(e,n,i){if(i===void 0&&(i=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=i,this.props={},this.mi=void 0,this.yi=(s=>{var o="";return s.token&&(o=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&A.info("Persistence loaded",e.persistence,k({},this.props)),this.update_config(e,e,n),this.save(),w){var r=()=>this.flush();we(w,"beforeunload",r,{capture:!1}),we(w,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Pe(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){qm.indexOf(e.persistence.toLowerCase())===-1&&(A.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,i=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Em,...o];return k({},de,{H(u){try{var c={};try{c=Qt.H(u)||{}}catch{}var d,f=JSON.parse(de.P(u)||"{}");if(a){var p={};for(var h in c){var g=c[h];tt(g)||g===""||(p[h]=g)}d=me(f,p)}else d=me(c,f);return de.F(u,d),d}catch{}return null},F(u,c,d,f,p,h){var g=de.F(u,c,void 0,void 0,h);try{var m={};l.forEach((v=>{c[v]&&(m[v]=c[v])})),Object.keys(m).length&&Qt.F(u,m,d,f,p,h)}catch(v){de.j(v)}return g},q(u,c){try{w?.localStorage.removeItem(u),Qt.q(u,c)}catch(d){de.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),r=!1,s=e.persistence.toLowerCase();return s==="localstorage"&&de.N()?(n=de,r=!0):s==="localstorage+cookie"&&i.N()?(n=i,r=!0):s==="sessionstorage"&&xe.N()?n=xe:s==="memory"?n=Sm:s==="cookie"?n=Qt:i.N()?(n=i,r=!0):n=Qt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return ae(this.props,((n,i)=>{var r=An(i);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[i]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=me({},e)),this.pi&&this.Ci()}}Ci(){for(var e of Wo){var n=de.H(this.Si(e));if(n&&!rn(n)){var i=this.Mi(e);i.persisted=!0,this.Ti(e)||(i.fingerprint=this.Ei(n,e)),this.Ii(e,n)||me(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var i;return((i=An(n))==null?void 0:i.storageGroup)===e}))}Ii(e,n){var i=Wm[e];if(!i)return!1;var r=n[i],s=this.props[i];return Pe(r)&&Pe(s)&&s>r}refreshKey(e){var n;if(!this.xi){var i=this.pi?(n=An(e))==null?void 0:n.storageGroup:void 0,r=i?de.H(this.Si(i)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(i){var s=this.ii.H(this.yi);if(s&&e in s)return void this.Pi(e,s[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?C(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,Xn))}Li(){var e=this.Di(),n=e.main,i=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,Xn),Wo)){var s,o=i[r];(!rn(o)||(s=this.ci[r])!=null&&s.persisted)&&this.Oi(de,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return ae(this.props,((i,r)=>{var s,o=(s=An(r))==null?void 0:s.storageGroup;o?n[o][r]=i:e[r]=i})),{main:e,groups:n}}Ei(e,n){if(n===Xn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var i={};return ae(e,((r,s)=>{var o;i[s]=(o=An(s))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(i)}Oi(e,n,i,r){var s=this.Mi(r);if(r===Xn||s.dirty||C(s.fingerprint)){var o;try{if((o=this.Ei(i,r))===s.fingerprint)return void(s.dirty=!1)}catch{o=void 0}e.F(n,i,this.$i,this.Ni,this.qi,this.Ne.debug)?(s.dirty=!1,r!==Xn&&(s.persisted=!0),C(o)||(s.fingerprint=o)):this.Ne.debug&&A.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,i=n!==void 0&&n;if(C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!i&&this.gi)for(var r of Wo)de.q(this.Si(r));i?delete this.ci[Xn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,i){if(ve(e)){C(n)&&(n="None"),this.$i=C(i)?this.ji:i;var r=!1;if(ae(e,((s,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,s),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(ve(e)){this.$i=C(n)?this.ji:n;var i=!1;if(ae(e,((r,s)=>{e.hasOwnProperty(s)&&(this.props[s]!==r||ve(r)||U(r))&&(this.Pi(s,r),i=!0)})),i)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,i=!1;for(var r of n)r in this.props&&(this.Ri(r),i=!0);i&&this.save()}update_campaign_params(){var e=F?.URL;if(e!==this.mi){var n=Jf(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);rn(Fl(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=F?.referrer)?Xf(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Qf(),$referring_domain:F!=null&&F.referrer&&((e=xs(F.referrer))==null?void 0:e.host)||ks},void 0)}set_initial_person_info(){this.props[Ta]||this.props[$a]||this.register_once({[ys]:eh(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};ae([$a,Ta],(r=>{var s=this.props[r];s&&ae(s,(function(o,a){e["$initial_"+ha(a)]=o}))}));var n=this.props[ys];if(n){var i=(function(r,s){s===void 0&&(s=!1);var o=th(r,s),a={};return ae(o,(function(l,u){a["$initial_"+ha(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);me(e,i)}return e}safe_merge(e){return ae(this.props,(function(n,i){i in e||(e[i]=n)})),e}update_config(e,n,i){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!i),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((f,p)=>f===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),s=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=s,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var i=this.props[Wi]||{};i[e]=n,this.Pi(Wi,i),this.save()}remove_event_timer(e){var n=this.props[Wi]||{},i=n[e];return C(i)||(delete n[e],this.Pi(Wi,n),this.save()),i}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var i;this.props[e]=n,(i=An(e))!=null&&i.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,i=(n=An(e))==null?void 0:n.storageGroup;i&&(this.Mi(i).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Dr(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&qe(n.then)&&n.then(void 0,(()=>{}))}}}}var ze={GZipJS:"gzip-js",Base64:"base64"},Ti={Activation:"events",Cancellation:"cancelEvents"},zo={Popover:"popover",API:"api",Widget:"widget"},en={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},Vo={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Ba={Popover:"popover",Inline:"inline"},zm={SHOWN:"product tour shown"},yu={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},_u=ye("[RateLimiter]");class Vm{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var i=n.text;if(i&&i.length)try{(JSON.parse(i).quota_limited||[]).forEach((r=>{_u.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void _u.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:i})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,i,r;e===void 0&&(e=!1);var s=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(i=this.instance.persistence)==null?void 0:i.get_property(Ra))!==null&&n!==void 0?n:{tokens:s,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>s&&(l.tokens=s);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(Pe(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(r=this.instance.persistence)==null||r.set_property(Ra,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!U(n)||!n.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&_e!=null&&_e.pathname)return""+((e=_e.origin)!==null&&e!==void 0?e:"")+_e.pathname}Hi(e){var n,i,r=this.captureEventsBurstLimit,s=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(i=this.instance).get_session_id)==null?void 0:n.call(i):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+s+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return mn.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void mn.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return mn.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((n=>{this.Zi(n.json,n),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){mn.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&F&&F.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||mn.warn("Failed to fetch remote config from PostHog."):mn.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(r){mn.error("Error applying remote config",r)}if(e?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var i;(i=this._instance.featureFlags)==null||i.ensureFlagsLoaded()}catch(r){mn.error("Error loading feature flags",r)}}}var mt=Uint8Array,et=Uint16Array,vi=Uint32Array,Ml=new mt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ll=new mt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),wu=new mt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rh=function(t,e){for(var n=new et(31),i=0;31>i;++i)n[i]=e+=1<i;++i)for(var s=n[i];n[i+1]>s;++s)r[s]=s-n[i]<<5|i;return[n,r]},sh=rh(Ml,2),Da=sh[1];sh[0][28]=258,Da[258]=28;for(var bu=rh(Ll,0)[1],oh=new et(32768),be=0;32768>be;++be){var Qn=(43690&be)>>>1|(21845&be)<<1;oh[be]=((65280&(Qn=(61680&(Qn=(52428&Qn)>>>2|(13107&Qn)<<2))>>>4|(3855&Qn)<<4))>>>8|(255&Qn)<<8)>>>1}var er=function(t,e,n){for(var i=t.length,r=0,s=new et(e);i>r;++r)++s[t[r]-1];var o,a=new et(e);for(r=0;e>r;++r)a[r]=a[r-1]+s[r-1]<<1;for(o=new et(i),r=0;i>r;++r)o[r]=oh[a[t[r]-1]++]>>>15-t[r];return o},Hn=new mt(288);for(be=0;144>be;++be)Hn[be]=8;for(be=144;256>be;++be)Hn[be]=9;for(be=256;280>be;++be)Hn[be]=7;for(be=280;288>be;++be)Hn[be]=8;var Cs=new mt(32);for(be=0;32>be;++be)Cs[be]=5;var Gm=er(Hn,9),Km=er(Cs,5),ah=function(t){return(t/8>>0)+(7&t&&1)},lh=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var i=new(t instanceof et?et:t instanceof vi?vi:mt)(n-e);return i.set(t.subarray(e,n)),i},qt=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8},$i=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8,t[i+2]|=n>>>16},Go=function(t,e){for(var n=[],i=0;t.length>i;++i)t[i]&&n.push({s:i,f:t[i]});var r=n.length,s=n.slice();if(!r)return[new mt(0),0];if(r==1){var o=new mt(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(S,I){return S.f-I.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var f=s[0].s;for(i=1;r>i;++i)s[i].s>f&&(f=s[i].s);var p=new et(f+1),h=ja(n[c-1],p,0);if(h>e){i=0;var g=0,m=h-e,v=1<i;++i){var x=s[i].s;if(e>=p[x])break;g+=v-(1<>>=m;g>0;){var E=s[i].s;e>p[E]?g-=1<=0&&g;--i){var y=s[i].s;p[y]==e&&(--p[y],++g)}h=e}return[new mt(p),h]},ja=function(t,e,n){return t.s==-1?Math.max(ja(t.l,e,n+1),ja(t.r,e,n+1)):e[t.s]=n},Eu=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new et(++e),i=0,r=t[0],s=1,o=function(l){n[i++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++s;else{if(!r&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(r),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(r);s=1,r=t[a]}return[n.subarray(0,i),e]},Mi=function(t,e){for(var n=0,i=0;e.length>i;++i)n+=t[i]*e[i];return n},Ua=function(t,e,n){var i=n.length,r=ah(e+2);t[r]=255&i,t[r+1]=i>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var s=0;i>s;++s)t[r+s+4]=n[s];return 8*(r+4+i)},Su=function(t,e,n,i,r,s,o,a,l,u,c){qt(e,c++,n),++r[256];for(var d=Go(r,15),f=d[0],p=d[1],h=Go(s,15),g=h[0],m=h[1],v=Eu(f),x=v[0],E=v[1],y=Eu(g),S=y[0],I=y[1],R=new et(19),b=0;x.length>b;++b)R[31&x[b]]++;for(b=0;S.length>b;++b)R[31&S[b]]++;for(var P=Go(R,7),T=P[0],M=P[1],L=19;L>4&&!T[wu[L-1]];--L);var B,Y,G,$,q=u+5<<3,se=Mi(r,Hn)+Mi(s,Cs)+o,Fe=Mi(r,f)+Mi(s,g)+o+14+3*L+Mi(R,T)+(2*R[16]+3*R[17]+7*R[18]);if(se>=q&&Fe>=q)return Ua(e,c,t.subarray(l,l+u));if(qt(e,c,1+(se>Fe)),c+=2,se>Fe){B=er(f,p),Y=f,G=er(g,m),$=g;var ee=er(T,M);for(qt(e,c,E-257),qt(e,c+5,I-1),qt(e,c+10,L-4),c+=14,b=0;L>b;++b)qt(e,c+3*b,T[wu[b]]);c+=3*L;for(var Ee=[x,S],Me=0;2>Me;++Me){var ie=Ee[Me];for(b=0;ie.length>b;++b)qt(e,c,ee[he=31&ie[b]]),c+=T[he],he>15&&(qt(e,c,ie[b]>>>5&127),c+=ie[b]>>>12)}}else B=Gm,Y=Hn,G=Km,$=Cs;for(b=0;a>b;++b)if(i[b]>255){var he;$i(e,c,B[257+(he=i[b]>>>18&31)]),c+=Y[he+257],he>7&&(qt(e,c,i[b]>>>23&31),c+=Ml[he]);var ue=31&i[b];$i(e,c,G[ue]),c+=$[ue],ue>3&&($i(e,c,i[b]>>>5&8191),c+=Ll[ue])}else $i(e,c,B[i[b]]),c+=Y[i[b]];return $i(e,c,B[256]),c+Y[256]},Ym=new vi([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Jm=(function(){for(var t=new vi(256),e=0;256>e;++e){for(var n=e,i=9;--i;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Ko=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Zm(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(f){for(var p=d,h=0;f.length>h;++h)p=Jm[255&p^f[h]]^p>>>8;d=p},d(){return 4294967295^d}}})(),i=t.length;n.p(t);var r,s,o,a,l,u=(a=10+((r=e).filename&&r.filename.length+1||0),l=8,(function(d,f,p,h,g,m){var v=d.length,x=new mt(h+v+5*(1+Math.floor(v/7e3))+g),E=x.subarray(h,x.length-g),y=0;if(!f||8>v)for(var S=0;v>=S;S+=65535){var I=S+65535;v>I?y=Ua(E,y,d.subarray(S,I)):(E[S]=!0,y=Ua(E,y,d.subarray(S,v)))}else{for(var R=Ym[f-1],b=R>>>13,P=8191&R,T=(1<S;++S){var he=G(S),ue=32767&S,Oe=L[he];if(M[ue]=Oe,L[he]=ue,S>=Me){var N=v-S;if((Fe>7e3||Ee>24576)&&N>423){y=Su(d,E,0,$,q,se,ee,Ee,ie,S-ie,y),Ee=Fe=ee=0,ie=S;for(var Z=0;286>Z;++Z)q[Z]=0;for(Z=0;30>Z;++Z)se[Z]=0}var Re=2,Be=0,nt=P,Te=ue-Oe&32767;if(N>2&&he==G(S-Te))for(var Ae=Math.min(b,N)-1,it=Math.min(32767,S),Kn=Math.min(258,N);it>=Te&&--nt&&ue!=Oe;){if(d[S+Re]==d[S+Re-Te]){for(var Je=0;Kn>Je&&d[S+Je]==d[S+Je-Te];++Je);if(Je>Re){if(Re=Je,Be=Te,Je>Ae)break;var Yn=Math.min(Te,Je-2),Ut=0;for(Z=0;Yn>Z;++Z){var Ht=S-Te+Z+32768&32767,yt=Ht-M[Ht]+32768&32767;yt>Ut&&(Ut=yt,Oe=Ht)}}}Te+=(ue=Oe)-(Oe=M[ue])+32768&32767}if(Be){$[Ee++]=268435456|Da[Re]<<18|bu[Be];var pn=31&Da[Re],Ci=31&bu[Be];ee+=Ml[pn]+Ll[Ci],++q[257+pn],++se[Ci],Me=S+Re,++Fe}else $[Ee++]=d[S],++q[d[S]]}}y=Su(d,E,!0,$,q,se,ee,Ee,ie,S-ie,y)}return lh(x,0,h+ah(y)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,f){var p=f.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>f.level?4:f.level==9?2:0,d[9]=3,f.mtime!=0&&Ko(d,4,Math.floor(new Date(f.mtime||Date.now())/1e3)),p){d[3]=8;for(var h=0;p.length>=h;++h)d[h+10]=p.charCodeAt(h)}})(u,e),Ko(u,c-8,n.d()),Ko(u,c-4,i),u}var Xm=!!ua||!!_l,ch="text/plain",Xr=!1,uh=(t,e)=>{var n=t.split("#"),i=n[1],r=n[0].split("?"),s=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(i?"#"+i:"")},Ks=function(t,e,n){var i;n===void 0&&(n=!0);var r=t.split("?"),s=r[0],o=r[1],a=k({},e),l=(i=o?.split("&").map((c=>{var d,f=c.split("="),p=f[0],h=n&&(d=a[p])!==null&&d!==void 0?d:f[1];return delete a[p],p+"="+h})))!==null&&i!==void 0?i:[],u=(function(c,d){var f,p;d===void 0&&(d="&");var h=[];return ae(c,(function(g,m){C(g)||C(m)||m==="undefined"||(f=encodeURIComponent((v=>v instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),h[h.length]=p+"="+f)})),h.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Yo=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===ze.GZipJS){var i=Zm((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new mt(a.length+(a.length>>>1)),d=0,f=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var h=new mt(d+8+(u-p<<1));h.set(c),c=h}var g=a.charCodeAt(p);128>g?f(g):2048>g?(f(192|g>>>6),f(128|63&g)):g>55295&&57344>g?(f(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),f(128|g>>>12&63),f(128|g>>>6&63),f(128|63&g)):(f(224|g>>>12),f(128|g>>>6&63),f(128|63&g))}return lh(c,0,d)})(si(e)),{mtime:0});return{contentType:ch,body:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength),estimatedSize:i.byteLength}}if(n===ze.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(si(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:si(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=si(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},dh=t=>{var e,n,i=()=>t.transport==="sendBeacon"?{url:Ks(t.url,{compression:ze.Base64}),encodedBody:Yo(k({},t,{compression:ze.Base64,Ji:void 0}))}:{url:uh(t.url,"compression"),encodedBody:Yo(k({},t,{compression:void 0,Ji:void 0}))};try{e=Yo(t)}catch(r){if(Wc(t.compression,gi(t.url,"compression")))return A.error("Failed to gzip request body, sending uncompressed payload",r),i();throw r}return e&&Wc(t.compression,gi(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?da(new Uint8Array(n)):ArrayBuffer.isView(n)&&da(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Xr=!0,i()):{url:t.url,encodedBody:e}},fh=t=>{try{return dh(t)}catch(e){return A.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Qm=(function(){var t=ce((function*(e){var n=si(e.data),i=yield(function(s,o,a){return fa.apply(this,arguments)})(n,oe.DEBUG,{rethrow:!0});if(!i)return e;var r=yield i.arrayBuffer();return k({},e,{Ji:{contentType:ch,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),ev=/Failed to fetch|NetworkError|Load failed/i,hh=t=>t?.name==="TypeError"&&ev.test(t?.message||""),ph=t=>{var e=fh(t);if(e){var n=e.url,i=e.encodedBody,r=i??{},s=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;ae(t.headers,(function(h,g){l.append(g,h)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(Oc){var d=new Oc;u={signal:d.signal,timeout:setTimeout((()=>{var h,g;c=!0,d.abort((h=t.timeout,(g=new Error("PostHog request timed out"+(h?" after "+h+"ms":""))).name="AbortError",g))}),t.timeout)}}var f=h=>{c&&h?.name==="AbortError"||hh(h)?A.warn(h):A.error(h),t.callback==null||t.callback({statusCode:0,error:h})};try{var p;_l(n,k({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((h=>h.text().then((g=>{var m={statusCode:h.status,text:g};if(h.status===200)try{m.json=JSON.parse(g)}catch(v){A.error(v)}t.callback==null||t.callback(m)})))).catch(f).finally((()=>u?clearTimeout(u.timeout):null))}catch(h){u&&clearTimeout(u.timeout),f(h)}}},Ha=t=>{try{var e,n=dh(t),i=n.url,r=n.encodedBody,s=r??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(Ve.sendBeacon(i,l))return;var u=U(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(U(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=f=>U(t.data)?f:k({},t.data,{batch:f});return Ha(k({},t,{data:d(u.slice(0,c))})),void Ha(k({},t,{data:d(u.slice(c))}))}A.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),ph(k({},t,{Yi:!0}))}catch(f){A.warn("Beacon send failed",f)}},xu=(t,e,n,i)=>{var r=i==="query"?e==="POST"?"sent_at":"_":void 0;return Ks(n===ze.GZipJS?uh(t,"compression"):t,k({},r?{[r]:Date.now().toString()}:{},n===ze.GZipJS?{}:{compression:n}))},Qr=[];_l&&Qr.push({transport:"fetch",method:ph}),ua&&Qr.push({transport:"XHR",method(t){var e=fh(t);if(e){var n=new ua,i=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=i??{},s=r.contentType,o=r.body;ae(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),Ve!=null&&Ve.sendBeacon&&Qr.push({transport:"sendBeacon",method:Ha});var Wa=3e3;class tv{constructor(e,n){this.Xi=!0,this.tr=[],this.er=Tt(n?.flush_interval_ms||Wa,250,5e3,A.createLogger("flush interval"),Wa),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((i=>i.url.indexOf("/e")===0)),...n.filter((i=>i.url.indexOf("/e")!==0))].map((i=>{this.lr(k({},i,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var n=this.ar(),i=function(){var s=n[r],o=new Date().getTime();s.data&&U(s.data)&&ae(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var r in n)i()}}),this.er))}lr(e){try{this.ir(e)}catch(n){A.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return ae(this.tr,(n=>{var i,r=n,s=(r?r.batchKey:null)||r.url;C(e[s])&&(e[s]=k({},r,{data:[]})),(i=e[s].data)==null||i.push(r.data)})),this.tr=[],e}}var nv=["retriesPerformedSoFar"];class iv{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!C(w)&&"onLine"in w.navigator&&(this.dr=w.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},we(w,"online",this.vr),we(w,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,i=Ud(e,nv);Vt(n)&&(i.url=Ks(i.url,{retry_count:n})),this._instance._send_request(k({},i,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(k({retriesPerformedSoFar:n},i));r.statusCode===0&&A.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}i.callback==null||i.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+1;var i=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(n),r=Date.now()+i;this.tr.push({retryAt:r,requestOptions:e});var s="Enqueued failed request for retry in "+i;navigator.onLine||(s+=" (Browser is offline)"),A.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],i=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,i.length>0)for(var r of i)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,C(w)||(this.vr&&(w.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(w.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(k({},n,{transport:"sendBeacon"}))}catch(i){A.error(i)}}this.tr=[]}}class rv{constructor(e){this.yr=()=>{var n,i,r,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(i=this.br.maxScrollHeight)!==null&&i!==void 0?i:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){we(w,"scroll",this.yr,{capture:!0}),we(w,"scrollend",this.yr,{capture:!0}),we(w,"resize",this.yr)}scrollElement(){if(!this._r)return w?.document.documentElement;var e=U(this._r)?this._r:[this._r];for(var n of e){var i=w?.document.querySelector(n);if(i)return i}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var i=this.scrollElement();return i&&i[n]||0}return w?e==="y"?w.scrollY||w.pageYOffset||w.document.documentElement.scrollTop||0:w.scrollX||w.pageXOffset||w.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var sv=t=>eh(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Iu{constructor(e,n,i,r){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[Fa]:a})}},this._instance=e,this.Tr=n,this.Mr=i,this.Cr=r||sv,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Fa]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?th(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return ae(Fl(this.getSetOnceProps()),((n,i)=>{i==="$current_url"&&(i="url"),e["$session_entry_"+ha(i)]=n})),e}}class Nl{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((i=>i!==n))}}emit(e,n){for(var i of this.Er[e]||[])i(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Li=ye("[SessionId]");class ku{on(e,n){return this.Ir.on(e,n)}constructor(e,n,i){var r;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Nl,this.Lr=(u,c)=>!(!Vt(u)||!Vt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===Xt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||Yt,this.Nr=i||Yt;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*Tt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Li.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=xe.H(this.jr),a=xe.H(this.Br);o&&!a?this.Or=o:xe.q(this.jr),xe.F(this.Br,!0)}if((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Li.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return C(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&xe.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&xe.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?xe.H(this.jr):null}Zr(e){var n=this.Pr;return!tt(n)&&!tt(e)&&5e3>Math.abs(e-n)}Ur(e,n,i){var r=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||i!==this._sessionStartTimestamp);this._sessionStartTimestamp=i,this._sessionActivityTimestamp=n,this.Dr=e,s&&!r||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[ri]:[n,e,i]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Vt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(ri):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!tt(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[ri]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=Vt(e)?e:0,i=Vt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,i)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[ri];return U(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&w&&(w.removeEventListener(bs,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&xe.q(this.Br)},we(w,bs,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===Xt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var i=n||new Date().getTime(),r=this.Jr(),s=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=Vt(o)&&Math.abs(i-o)>864e5,c=!1,d=!1,f=!s,p=s,h=!f&&!e&&this.Lr(i,a);if(h){(h=this.Xr(i))||Li.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}f||h||u?(s=this.$r(),l=this.Nr(),Li.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u}}),o=i,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(Li.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=Vt(a)&&e&&!u?a:i,v=Vt(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,v),e||this.qr();var x={noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((E=>E(s,l,x))),{sessionId:s,windowId:l,sessionStartTimestamp:v,changeReason:c?x:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var gh=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&zc(n,e))return!0;try{var i=t?.userAgentData;if(i!=null&&i.brands&&i.brands.some((r=>zc(r?.brand,e))))return!0}catch{}return!!t.webdriver};function mh(){return(mh=ce((function*(){var t=Ve?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return Q(n)&&n.length>0?n:void 0}catch(i){return void A.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",i)}}))).apply(this,arguments)}var As=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function Jo(t,e,n){return si({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var vh={exact:(t,e)=>e.some((n=>t.some((i=>n===i)))),is_not:(t,e)=>e.every((n=>t.every((i=>n!==i)))),regex:(t,e)=>e.some((n=>t.some((i=>As(n,i))))),not_regex:(t,e)=>e.every((n=>t.every((i=>!As(n,i))))),icontains:(t,e)=>e.map(jr).some((n=>t.map(jr).some((i=>n.includes(i))))),not_icontains:(t,e)=>e.map(jr).every((n=>t.map(jr).every((i=>!n.includes(i))))),gt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>i>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>it.toLowerCase();function yh(t,e){return!t||Object.entries(t).every((n=>{var i=n[1],r=e?.[n[0]];if(C(r)||tt(r))return!1;var s=[String(r)],o=vh[i.operator];return!!o&&o(i.values,s)}))}var qa="custom",Cu="i.posthog.com",ov=/^\/static\//;class av{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+Cu,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":qa),this.en[this.apiHost]}rn(e){if(ov.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var i=this.rn(n);if(i)return""+i+n}if(this.region===qa)return this.apiHost+n;var r=Cu+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function _h(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var te=ye("[Surveys]"),wh="seenSurvey_",bh=t=>{try{var e=(n=>((i,r)=>""+wh+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){te.error("Failed to persist survey seen state",n)}},lv=[zo.Popover,zo.Widget,zo.API],cv={ignoreConditions:!1,ignoreDelay:!1,displayType:Ba.Popover},uv=ye("[PostHog ExternalIntegrations]"),dv={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class fv{constructor(e){this._instance=e}ai(e,n){var i;(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,e,(r=>{if(r)return uv.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=i[0],u=i[1];!u||(s=O.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(dv[l],(()=>{var c;(c=O.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=O.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=O.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var i of Object.entries((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class hv{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return ce((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var i=e.setup(n.nn);i&&(yield i)}catch(s){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&qe(n.then)&&n.then(void 0,(i=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}))}catch(i){this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}}}class pv{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var i={};for(var r of e){var s=n?.get_property(r);C(s)||(i[r]=s)}return i}set(e,n){var i;(i=this._instance.persistence)==null||i.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var Au="extensionsRemoteConfig";class gv{constructor(e){this.an=!1,this.instance=e,this.rt=A,this.un=e.hn,this.kv=new pv(e),this.onEvent=n=>Dr(this.instance.on("eventCaptured",(i=>{try{n({event:i.event,properties:i.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Dr((()=>{}));var i=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(Au,i);return this.un&&i(this.un),Dr(r)},this.vn=new hv(A.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(ar))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(ar);return typeof e=="string"?e:void 0}get library(){return{name:oe.LIB_NAME,version:oe.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,i,r,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(i=s?.windowId)!==null&&i!==void 0?i:"",sessionStartTimestamp:(r=s?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,i){var r=this;return ce((function*(){i?r.instance.capture(e,n,{timestamp:i.timestamp,uuid:i.uuid,$set:i.set,$set_once:i.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Dr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Au,e))}sendRequest(e,n){var i=this;return ce((function*(){var r;n===void 0&&(n={});var s=i.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Ks(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(i.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,i.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var tr={},Zo=0,Ps=()=>{},Pu='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ni="Surveys module not available",Fu="sanitize_properties is deprecated. Use before_send instead",Eh="Invalid value for property_denylist config: ",mv=["token","distinct_id",Pf],ii="posthog",Sh=!Xm&&Xe?.indexOf("MSIE")===-1&&Xe?.indexOf("Mozilla")===-1,Xo=t=>{var e;return k({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:vm(F?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:Ps,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:_e&&Q(_e?.search)&&_e.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(w==null||(e=w.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){A.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:Ma,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:Wa},error_tracking:{},_onCapture:Ps},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:Pm,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},vv=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Ru=t=>{var e={};for(var n of vv){var i=n[0],r=n[1];C(t[i])||(e[r]=t[i])}var s=me({},e,t),o=t.__preview_external_dependency_versioned_paths;return C(o)||(C(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),Q(o)&&C(t.asset_host)&&(s.asset_host=o)),U(t.property_blacklist)&&(C(t.property_denylist)?s.property_denylist=t.property_blacklist:U(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:A.error(Eh+t.property_denylist)),s};class yv{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){A.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class rt{pn(e,n){if(e){var i=this.sn.indexOf(e);i!==-1&&this.sn.splice(i,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===Xt||this.config.cookieless_mode===Ln&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new yv,this.mn=!1,this.version=oe.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Nl,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Xo(),this.SentryIntegration=Om,this.sentryIntegration=i=>(function(r,s){var o=Gf(r,s);return{name:Vf,processEvent:a=>o(a)}})(this,i),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new rv(this),this.pageViewManager=new mu(this),this.rateLimiter=new Vm(this),this.requestRouter=new av(this),this.consent=new xm(this),this.externalIntegrations=new fv(this);var n=(e=rt.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(o),s?.({})},set_once:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(i=>A.info('send "'+i?.event+'"',i)))}init(e,n,i){if(i&&i!==ii){var r,s=(r=tr[i])!==null&&r!==void 0?r:new rt;return s._init(e,n,i),tr[i]=s,tr[ii][i]=s,s}return this._init(e,n,i)}_init(e,n,i){var r,s;n===void 0&&(n={});var o,a=Q(e)?e.trim():"";if(!a)return A.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=Xo(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Xo(n.defaults),u=Ru(n),c=me({},l,u,{name:i,token:a});ve(l.rageclick)&&ve(u.rageclick)&&(c.rageclick=me({},l.rageclick,u.rageclick)),ve(l.session_recording)&&ve(u.session_recording)&&(c.session_recording=me({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&A.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:ze.GZipJS;var d=this.En();if(this.persistence=new qo(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new qo(k({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&xe.N()){var f=xe.H(this.bn);U(f)&&f.forEach((I=>{Q(I)&&this.yn.add(I)}))}else xe.q(this.bn);var p=k({},this.persistence.props),h=k({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new tv((I=>this.Pn(I)),this.config.request_queue_config),this.Rn=new iv(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new ku(this),this.sessionPropsManager=new Iu(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((I,R,b)=>{(b!=null&&b.activityTimeout||b!=null&&b.sessionPastMaximumLength||b!=null&&b.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(A.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(A.info("Initializing extensions synchronously"),this.Ln(g)),oe.DEBUG=oe.DEBUG||this.config.debug,oe.DEBUG&&A.info("Starting in debug mode",{this:this,config:n,thisC:k({},this.config),p,s:h}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=k({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,v=this.get_distinct_id(),x=this.persistence.get_property(pt);if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&x===Zn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&x===kn)A.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var E=this.config.get_device_id(Yt()),y=n.bootstrap.isIdentifiedID?E:m;this.persistence.set_property(pt,n.bootstrap.isIdentifiedID?kn:Zn),this.register({distinct_id:m,$device_id:y})}}if(g)this.register_once({distinct_id:Mr,$device_id:null},"");else if(!this.get_distinct_id()){var S=this.config.get_device_id(Yt());this.register_once({distinct_id:S,$device_id:S},""),this.persistence.set_property(pt,Zn)}return we(w,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(I,R){var b=I.config.segment;if(!b)return R();(function(P,T){var M=P.config.segment;if(!M)return T();var L=Y=>{var G=()=>Y.anonymousId()||Yt();P.config.get_device_id=G,Y.id()&&(P.register({distinct_id:Y.id(),$device_id:G()}),P.persistence.set_property(pt,kn)),T()},B=M.user();"then"in B&&qe(B.then)?B.then(L):L(B)})(I,(()=>{b.register((P=>{typeof Promise<"u"&&Promise.resolve||Ho.warn("This browser does not have Promise support, and can not use the segment integration");var T=(M,L)=>{if(!L)return M;M.event.userId||M.event.anonymousId===P.get_distinct_id()||(Ho.info("No userId set, resetting PostHog"),P.reset()),M.event.userId&&M.event.userId!==P.get_distinct_id()&&(Ho.info("UserId set, identifying with PostHog"),P.identify(M.event.userId));var B=P.calculateEventProperties(L,M.event.properties);return M.event.properties=Object.assign({},B,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>T(M,M.event.event),page:M=>T(M,ni),identify:M=>T(M,Do),screen:M=>T(M,"$screen")}})(I)).then((()=>{R()}))}))})(this,(()=>this.On())):this.On(),qe(this.config._onCapture)&&this.config._onCapture!==Ps&&(A.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(I=>this.config._onCapture(I.event,I)))),this.config.ip&&A.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return mh.apply(this,arguments)})().then((I=>{I&&this.register({[Oo]:I})})).catch(Ps),this}Fn(){var e,n,i,r,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(i=rt.__defaultExtensionClasses)==null?void 0:i.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.call(this),this.Dn=void 0,this.featureFlags=new a(this)),qe(this.featureFlags.onReloading)&&qe(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,i,r,s,o,a,l,u=performance.now(),c=k({},rt.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(i=this.surveys)!==null&&i!==void 0?i:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,Nm)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((f=>{f.initialize&&d.push((()=>{f.initialize==null||f.initialize()}))})),d.push((()=>{if(this.Nn){var f=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(f)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var i=e.shift();if(i)try{i()}catch(s){A.error("Error initializing extension:",s)}}var r=Math.round(performance.now()-n);this.register_for_session({[Ff]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Rf]:r}),this.config.__preview_deferred_init_extensions&&A.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!F||!F.body)return A.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var i,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=j(r.supportedCompression,ze.GZipJS)?ze.GZipJS:j(r.supportedCompression,ze.Base64)?ze.Base64:void 0),(i=r.analytics)!=null&&i.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:Ma}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(i){A.critical("`loaded` function failed",i)}if(this.Bn(),this.config.internal_or_test_user_hostname&&_e!=null&&_e.hostname){var e=_e.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new ih(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Lr(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,i,r,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Bo),(i=this.logs)==null||i.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(Bo,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?Sh?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=k({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(C(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var i,r,s,o=k({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,f=(i=o.transport)!==null&&i!==void 0?i:"fetch";f==="sendBeacon"&&C(o.compression)&&o.data&&(o.compression=ze.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=U(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,v){return v===void 0&&(v=new Date().toISOString()),U(m)?m.map((x=>k({},x,{sent_at:v}))):k({},m,{sent_at:v})})(o.data))),o.url=xu(o.url,o.method,o.compression,o.timestampMode);var p=Qr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),h=(r=(s=(function(m,v){for(var x=0;m.length>x;x++)if(m[x].transport===f)return m[x]})(p))==null?void 0:s.method)!==null&&r!==void 0?r:p[0].method;if(!h)throw new Error("No available transport method");var g=m=>{try{h(m)}catch(v){hh(v)?A.warn(v):A.error(v),o.callback==null||o.callback({statusCode:0,error:v})}};f!=="sendBeacon"&&o.data&&o.compression===ze.GZipJS&&_g&&typeof Promise<"u"&&!Xr?Qm(o).then((m=>{g(m)})).catch((m=>{if(qc(m))return Xr=!0,void g(k({},o,{compression:void 0,url:xu(n.url,n.method,void 0,n.timestampMode)}));(v=>{if(!v||typeof v!="object")return!1;var x="name"in v?String(v.name):"";return qc(v)||x===Hd})(m)&&(Xr=!0),g(o)})):h(o)})(k({},e,{callback:n=>{var i,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(i=(r=this.config).on_request_error)==null||i.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){Zo++;try{var n,i=[],r=[],s=[];Lr(e,(a=>{if(a)if(U(n=a[0]))s.push(a);else if(qe(a))try{a.call(this)}catch(l){A.error("Error executing queued PostHog call",a,l)}else U(a)&&n==="alias"?i.push(a):U(a)&&n.indexOf("capture")!==-1&&qe(this[n])?s.push(a):r.push(a)}));var o=function(a,l){Lr(a,(function(u){try{if(U(u[0])){var c=l;ae(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){A.error("Error executing queued PostHog call",u,d)}}))};o(i,this),o(r,this),o(s,this)}finally{Zo--}}push(e){if(Zo>0&&U(e)&&Q(e[0])){var n=rt.prototype[e[0]];qe(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,i){var r,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!C(e)&&Q(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=i!=null&&i.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){n!=null&&n.$current_url&&!Q(n?.$current_url)&&(A.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||i!=null&&i.Wn||A.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,f=i?.timestamp||d,p=Yc(i?.uuid,Yt),h={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},f,p)};e===ni&&this.config.__preview_capture_bot_pageviews&&u&&(h.event="$bot_pageview",h.properties.$browser_type="bot"),c&&(h.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&h.properties.$feature_flag_has_experiment===!1&&this.get_property(ms)===!0;i?.$set&&!g&&(h.$set=i?.$set);var m=i?.$unset;m&&(h.$unset=m);var v,x,E,y=g?void 0:this.Vn(i?.$set_once,e!==tu,e===Do);if(y&&(h.$set_once=y),i!=null&&i._noTruncate||(s=this.config.properties_string_max_length,o=h,a=L=>Q(L)?L.slice(0,s):L,l=new Set,h=(function L(B,Y){if(B!==Object(B))return a?a(B):B;if(!l.has(B)){var G;if(l.add(B),U(B))G=[],Lr(B,(q=>{G.push(L(q))}));else{var $={};ae(B,((q,se)=>{l.has(q)||($[se]=L(q))})),G=$}return G}})(o)),h.timestamp=f,C(i?.timestamp)||(h.properties.$event_time_override_provided=!0,h.properties.$event_time_override_system_time=d),g&&(h.properties=(function(L,B){B===void 0&&(B=[]);var Y={},G=$=>{L[$]!==void 0&&(Y[$]=L[$])};return wg.forEach(G),B.forEach(G),Y})(h.properties,mv)),e===en.DISMISSED||e===en.SENT){var S=n?.[Vo.SURVEY_ID],I=n?.[Vo.SURVEY_ITERATION];bh({id:S,current_iteration:I}),h.$set=k({},h.$set,{[(v={id:S,current_iteration:I},x=e===en.SENT?"responded":"dismissed",E="$survey_"+x+"/"+v.id,v.current_iteration&&v.current_iteration>0&&(E="$survey_"+x+"/"+v.id+"/"+v.current_iteration),E)]:!0})}else e===en.SHOWN&&(h.$set=k({},h.$set,{[Vo.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===zm.SHOWN){var R=n?.[yu.TOUR_TYPE];R&&(h.$set=k({},h.$set,{[yu.TOUR_LAST_SEEN_DATE+"/"+R]:new Date().toISOString()}))}var b=k({},h.properties.$set,h.$set);if(rn(b)||this.setPersonPropertiesForFlags(b),!z(this.config.before_send)){var P=this.Pt(h);if(!P)return;(h=P).uuid=Yc(h.uuid,Yt)}this.dn.emit("eventCaptured",h);var T=(r=i?._url)!==null&&r!==void 0?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:T,data:h,compression:"best-available",timestampMode:i?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(T)?"body":"capture-body",batchKey:i?._batchKey,transport:i?.transport};return!this.config.request_batching||i&&(i==null||!i._batchKey)||i!=null&&i.send_instantly?this.Pn(M):this.In.enqueue(M),h}A.critical("This capture call is ignored due to client rate limiting.")}}else A.error("No event name provided to posthog.capture")}else A.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new gv(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var i=this._n.indexOf(e);i!==-1&&this._n.splice(i,1)}}}calculateEventProperties(e,n,i,r,s){if(i=i||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=k({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Pf]=!0),e==="$snapshot"){var l=k({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!Q(a.distinct_id)&&!Pe(a.distinct_id)||pa(a.distinct_id))&&A.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(S,I,R,b){var P,T,M,L;if(b===void 0&&(b=!1),!Xe)return{};var B,Y=S?[...mi,...I||[]]:[],G=(function(Kn){for(var Je=0;Gc.length>Je;Je++){var Yn=Gc[Je],Ut=Yn[1],Ht=Yn[0].exec(Kn),yt=Ht&&(qe(Ut)?Ut(Ht,Kn):Ut);if(yt)return yt}return["",""]})(Xe),$=G[0],q=G[1],se=(B=typeof navigator<"u"?navigator:void 0)!=null&&B.brave?{brave:!0}:{},Fe={};C(R)||(Fe.detectGoogleSearchApp=R);var ee={},Ee=(P=navigator)==null||(P=P.userAgentData)==null?void 0:P.platform,Me=(T=navigator)==null?void 0:T.maxTouchPoints,ie=w==null||(M=w.screen)==null?void 0:M.width,he=w==null||(L=w.screen)==null?void 0:L.height,ue=w?.devicePixelRatio;C(Ee)||(ee.userAgentDataPlatform=Ee),C(Me)||(ee.maxTouchPoints=Me),C(ie)||(ee.screenWidth=ie),C(he)||(ee.screenHeight=he),C(ue)||(ee.devicePixelRatio=ue);var Oe,N,Z,Re,Be,nt,Te,Ae,it=me(Fl({$os:$,$os_version:q,$browser:pf(Xe,navigator.vendor,se,Fe),$device:Kc(Xe),$device_type:(N=Xe,Z=ee,Ae=Kc(N),Ae===Yd||Ae===Kd||Ae==="Kobo"||Ae==="Kindle Fire"||Ae===cf?fi:Ae===sr||Ae===li||Ae===or||Ae===ma?"Console":Ae===Zd?"Wearable":Ae?dt:Z?.userAgentDataPlatform==="Android"&&((Re=Z?.maxTouchPoints)!==null&&Re!==void 0?Re:0)>0?600>Math.min((Be=Z?.screenWidth)!==null&&Be!==void 0?Be:0,(nt=Z?.screenHeight)!==null&&nt!==void 0?nt:0)/((Te=Z?.devicePixelRatio)!==null&&Te!==void 0?Te:1)?dt:fi:"Desktop"),$timezone:nh(),$timezone_offset:Hm()}),{$current_url:cr(b?wn(_e?.href):_e?.href,Y,ur),$host:_e?.host,$pathname:_e?.pathname,$raw_user_agent:Xe.length>1e3?Xe.substring(0,997)+"...":Xe,$browser_version:Dg(Xe,navigator.vendor,se,Fe),$browser_language:vu(),$browser_language_prefix:(Oe=vu(),typeof Oe=="string"?Oe.split("-")[0]:void 0),$screen_height:w?.screen.height,$screen_width:w?.screen.width,$viewport_height:w?.innerHeight,$viewport_width:w?.innerWidth,$lib:oe.LIB_NAME,$lib_version:oe.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return oe.SDK_DIST_CHANNEL&&(it.$sdk_dist_channel=oe.SDK_DIST_CHANNEL),it})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,i.getTime()),f=d.windowId;a.$session_id=d.sessionId,a.$window_id=f}this.sessionPropsManager&&me(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&me(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(S){a.$sdk_debug_error_capturing_properties=String(S)}if(this.requestRouter.region===qa&&(a.$lib_custom_api_host=this.config.api_host),u=e!==ni||s?e!==Bo||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(i):this.pageViewManager.doPageView(i,r),a=me(a,u),e===ni&&F&&(a.title=F.title),!C(o)){var h=i.getTime()-o;a.$duration=parseFloat((h/1e3).toFixed(3))}Xe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();ae(["$referrer","$referring_domain"],(S=>{S in g&&delete m[S]}));var v={};if(this._n.length>0)for(var x of this._n.slice())try{me(v,x())}catch(S){A.error("Failed to produce browser extension event properties",S)}(a=me({},c,g,m,k({},v,a))).$is_identified=this._isIdentified(),U(this.config.property_denylist)?ae(this.config.property_denylist,(function(S){delete a[S]})):A.error(Eh+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var E=this.config.sanitize_properties;E&&(A.error(Fu),a=E(a,e));var y=this.Zn();return a.$process_person_profile=y,y&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,i){var r;if(n===void 0&&(n=!0),i===void 0&&(i=!1),!this.persistence||!this.Zn()||this.mn&&!i)return e;var s=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=me({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(A.error(Fu),a=l(a,"$set_once")),n&&(this.mn=!0),rn(a)?void 0:a}register(e,n){var i;(i=this.persistence)==null||i.register(e,n)}register_once(e,n,i){var r;(r=this.persistence)==null||r.register_once(e,n,i)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((i=>this.yn.add(i))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!xe.N())xe.q(this.bn);else{var n=[];this.yn.forEach((i=>n.push(i))),n.length>0?xe.F(this.bn,n):xe.q(this.bn)}}getFeatureFlag(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var i,r;return(i=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&i!==void 0?i:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,i){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,i)}updateEarlyAccessFeatureEnrollment(e,n,i){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,i)}getEarlyAccessFeatures(e,n,i){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,i)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ni}),()=>{})}onSessionId(e){var n,i;return(n=(i=this.sessionManager)==null?void 0:i.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Ni})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Ni})}renderSurvey(e,n){var i;(i=this.surveys)==null||i.renderSurvey(e,n)}displaySurvey(e,n){var i;n===void 0&&(n=cv),(i=this.surveys)==null||i.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,i;return(n=(i=this.surveys)==null?void 0:i.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Ni}}canRenderSurveyAsync(e,n){var i,r;return n===void 0&&(n=!1),(i=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&i!==void 0?i:Promise.resolve({visible:!1,disabledReason:Ni})}Jn(e){return!e||pa(e)?(A.critical("Unique user id has not been set in posthog.identify"),!1):e===Mr?(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,i){if(!this.__loaded||!this.persistence)return A.uninitializedWarning("posthog.identify");if(Pe(e)&&(e=e.toString(),A.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(ar)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(Hi)&&(this.unregister(Hi),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(pt)||Zn)===Zn,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(pt,kn),this.setPersonPropertiesForFlags({$set:n||{},$set_once:i||{}},!1),this.capture(Do,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:i||{}}),this.Sn=Jo(e,n,i),(s=this.featureFlags)==null||s.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(pt,kn);var u=n||{},c=i||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=Jo(e,n,i)}else(n||i)&&this.setPersonProperties(n,i);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Nn)):l&&(n||i)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var i=Jo(this.get_distinct_id(),e,n);this.Sn!==i?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=i):A.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,i=(U(e)?e:[e]).filter((r=>Q(r)&&r.length>0));i.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(i,!0),this.capture("$set",{$unset:i}),this.Sn=null)}group(e,n,i){if(e&&n){var r=this.getGroups(),s=r[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:k({},r,{[e]:n})}),s||i){var o={$group_type:e,$group_key:n};i&&(o.$group_set=i),this.capture(tu,o)}i&&this.setGroupPropertiesForFlags({[e]:i}),s&&!i&&this.reloadFeatureFlags()}else A.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),(i=this.featureFlags)==null||i.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((i=this.featureFlags)==null||i.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var i,r,s,o,a,l,u,c,d,f;if(n===void 0&&(n=!1),A.info("reset"),!this.__loaded)return A.uninitializedWarning("posthog.reset");var p,h=this.get_property(ar),g=this.get_property(Oo),m=this.get_property(On),v=this.is_capturing();if(this.consent.reset(),n||!v||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(i=this.persistence)==null||i.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),C(m)||(p=this.persistence)==null||p.register({[On]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(pt,Zn),(f=this.sessionManager)==null||f.resetSessionId(),this.Sn=null,this.config.cookieless_mode===Xt)this.register_once({distinct_id:Mr,$device_id:null},"");else{var x=this.config.get_device_id(Yt());this.register_once({distinct_id:x,$device_id:e?x:h},""),e||C(g)||this.register({[Oo]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return ce((function*(){var i,r,s,o,a,l,u;if(n.__loaded){(i=n.Un)==null||i.stop(),(r=n.jn)==null||r.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){A.error("Error while destroying feature flags",d)}}else A.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var i;this.config.identity_distinct_id=e,this.config.identity_hash=n,this.alias(e),(i=this.conversations)==null||i.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&i){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!i)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-i)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(Sf)?(A.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(C(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(Hi,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(A.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=k({},this.config);if(ve(e)){var i,r,s,o,a,l,u,c,d,f,p,h;me(this.config,Ru(e));var g=this.En();(i=this.persistence)==null||i.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new qo(k({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);St(m)&&(this.config.debug=m),St(this.config.debug)&&(this.config.debug?(oe.DEBUG=!0,de.N()&&de.F("ph_debug",!0),A.info("set_config",{config:e,oldConfig:n,newConfig:k({},this.config)})):(oe.DEBUG=!1,de.N()&&de.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(f=this.deadClicksAutocapture)==null||f.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(h=this.externalIntegrations)==null||h.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){oe.LIB_NAME=e,oe.LIB_VERSION=n}startSessionRecording(e){var n,i,r,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((i=this.sessionRecording)==null||i.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var i=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:i});return this.exceptions.sendExceptionEvent(k({},r,n))}}addExceptionStep(e,n){var i;(i=this.exceptions)==null||i.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:rt.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,i;return(n=(i=this.toolbar)==null?void 0:i.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:ii;return n!==ii&&(n=ii+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(pt))===kn||((n=this.sessionPersistence)==null?void 0:n.get_property(pt))===kn}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===Ma&&!this._isIdentified()&&rn(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Hi])&&((n=this.persistence)==null||(n=n.props)==null||!n[_s]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(A.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(_s,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Ln)}es(){var e,n,i,r,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((i=this.persistence)==null||i.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((r=this.sessionPersistence)==null||r.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==Xt){if(this.gn()){var i,r,s,o,a;this.Yn(!0,!0),(i=this.sessionManager)==null||i.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=new ku(this),this.pageViewManager=new mu(this),this.persistence&&(this.sessionPropsManager=new Iu(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=rt.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Ln&&((c=this.surveys)==null||c.loadIfEnabled()),(C(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else A.warn(Pu)}opt_out_capturing(){var e,n,i;this.config.cookieless_mode!==Xt?(this.config.cookieless_mode===Ln&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ln&&(this.register({distinct_id:Mr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):A.warn(Pu)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===Xt||(this.config.cookieless_mode===Ln?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return Ve?gh(Ve,this.config.custom_blocked_useragents):void 0}Hn(){F&&(F.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(ni,{title:F.title},{send_instantly:!0}),this.kn&&(F.removeEventListener(ws,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),we(F,ws,this.kn)))}debug(e){e===!1?(w?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(w?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(A.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,i,r,s,o){var a=i in n&&!z(n[i]),l=r in n&&!z(n[r]);return a?n[i]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+i+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,A)}Pt(e){var n;if(z(this.config.before_send))return e;var i=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(Cg),r=U(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of r){if(s=o(s),z(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return kg(e.event)?A.warn(a+". This can cause unexpected behavior."):A.info(a),null}s.properties&&!rn(s.properties)||A.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of i)if(s.properties&&z(s.properties[l]))return A.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,i){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(i)})}Cn(e){var n=St(e)&&!e,i=de.N()&&de.P("ph_debug")==="true";return!n&&(!!i||e)}}rt.__defaultExtensionClasses={},rt.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=gm(t.prototype[e[n]])})(rt,["identify"]);class Tu{constructor(e){this.disabled=e===!1;var n=ve(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,i){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)i-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:i}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:i}];return!1}}var Qo="$copy_autocapture",ea=ye("[AutoCapture]");function ta(t,e){return e.length>t?e.slice(0,t)+"...":e}function _v(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!bn(e));return e}function wv(t,e){var n,i,r=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!bn(t))return{props:{}};for(var c=[t],d=new Set([t]),f=t;f.parentNode&&!at(f,"body")&&Df>c.length;)if(Bf(f.parentNode)){var p=f.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),f=p}else{if(!bn(f.parentNode)||d.has(f.parentNode))break;d.add(f.parentNode),c.push(f.parentNode),f=f.parentNode}var h,g,m=[],v={},x=!1,E=!1;if(ae(c,(b=>{var P=Oa(b);if(at(b,"a")){var T=b.getAttribute("href");x=!!(P&&T&&Qi(T))&&(u?wn(T):T)}j(Ss(b),"ph-no-capture")&&(E=!0),m.push((function(L,B,Y,G,$){$===void 0&&($=!1);var q=L.tagName.toLowerCase(),se={tag_name:q};Tl.indexOf(q)>-1&&!Y&&(se.$el_text=q.toLowerCase()==="a"||q.toLowerCase()==="button"?ta(1024,hu(L)):ta(1024,lr(L)));var Fe=Ss(L);Fe.length>0&&(se.classes=Fe.filter((function(ie){return ie!==""}))),ae(L.attributes,(function(ie){var he;if((!qf(L)||["name","id","class","aria-label"].indexOf(ie.name)!==-1)&&(G==null||!G.includes(ie.name))&&!B&&Qi(ie.value)&&(!Q(he=ie.name)||he.substring(0,10)!=="_ngcontent"&&he.substring(0,7)!=="_nghost")){var ue=ie.value;ie.name==="class"&&(ue=Rl(ue).join(" ")),se["attr__"+ie.name]=ta(1024,ie.name==="href"&&$?wn(ue):ue)}}));for(var ee=1,Ee=1,Me=L;Me=_v(Me);)ee++,Me.tagName===L.tagName&&Ee++;return se.nth_child=ee,se.nth_of_type=Ee,se})(b,s,o,a,u));var M=(function(L){if(!Oa(L))return{};var B={};return ae(L.attributes,(function(Y){if(Y.name&&Y.name.indexOf("data-ph-capture-attribute")===0){var G=Y.name.replace("data-ph-capture-attribute-",""),$=Y.value;G&&$&&Qi($)&&(B[G]=$)}})),B})(b);me(v,M)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=at(t,"a")||at(t,"button")?hu(t):lr(t)),x){var y,S;m[0].attr__href=x;var I=(y=xs(x))==null?void 0:y.host,R=w==null||(S=w.location)==null?void 0:S.host;I&&R&&I!==R&&(h=x)}return{props:me({$event_type:r.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(b){return b.map((P=>{var T,M,L="";if(P.tag_name&&(L+=P.tag_name),P.attr_class)for(var B of(P.attr_class.sort(),P.attr_class))L+="."+B.replace(/"/g,"");var Y=k({},P.text?{text:P.text}:{},{"nth-child":(T=P.nth_child)!==null&&T!==void 0?T:0,"nth-of-type":(M=P.nth_of_type)!==null&&M!==void 0?M:0},P.href?{href:P.href}:{},P.attr_id?{attr_id:P.attr_id}:{},P.attributes),G={};return Zr(Y).sort((($,q)=>$[0].localeCompare(q[0]))).forEach(($=>{var q=$[1];return G[pu($[0].toString())]=pu(q.toString())})),(L+=":")+Zr(G).map(($=>$[0]+'="'+$[1]+'"')).join("")})).join(";")})((function(b){return b.map((P=>{var T,M,L={text:(T=P.$el_text)==null?void 0:T.slice(0,400),tag_name:P.tag_name,href:(M=P.attr__href)==null?void 0:M.slice(0,2048),attr_class:Mm(P),attr_id:P.attr__id,nth_child:P.nth_child,nth_of_type:P.nth_of_type,attributes:{}};return Zr(P).filter((B=>B[0].indexOf("attr__")===0)).forEach((B=>L.attributes[B[0]]=B[1])),L}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(i=m[0])==null?void 0:i.$el_text}:{},h&&r.type==="click"?{$external_click_url:h}:{},v)}}var Oi=ye("[ExceptionAutocapture]"),$u=()=>{},bv=ye("[TracingHeaders]"),Pn=ye("[Web Vitals]"),Mu=9e5,Lu="disabled",Nu="lazy_loading",Bi="awaiting_config",Ur="missing_config";ye("[SessionRecording]"),ye("[SessionRecording]");var za="[SessionRecording]",zt=ye(za),Ev=ye("[Heatmaps]");function na(t){return ve(t)&&"clientX"in t&&"clientY"in t&&Pe(t.clientX)&&Pe(t.clientY)}var Hr=ye("[Product Tours]"),ia=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Cl))},Sv=["$set_once","$set"],kt=ye("[SiteApps]"),Ou="Error while initializing PostHog app with config id ";function ei(t,e,n){if(z(t))return!1;switch(n){case"exact":return t===e;case"contains":var i=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(i,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class xv{constructor(e){this.ns=new Nl,this.ss=(n,i)=>this.os(n,i)&&this.ls(n,i)&&this.us(n,i)&&this.hs(n,i),this.os=(n,i)=>i==null||!i.event||n?.event===i?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;C((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((i,r)=>{this.on(i,r)}))}register(e){var n,i;if(!C((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(i=this._instance)!=null&&i.autocapture)){var r,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(s)}}on(e,n){var i;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((i=this.vs)==null?void 0:i.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var i of n.steps)if(this.ss(e,i))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var i,r=e==null||(i=e.properties)==null?void 0:i.$current_url;if(!r||typeof r!="string"||!ei(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var i;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>ei(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!o&&ei((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var i;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>ei(u.text,n.text,n.text_matching||"exact")||ei(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!l&&(s=(function(u){for(var c,d=[],f=/(?::|")text="(.*?)"/g;!z(c=f.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=n.text,a=n.text_matching||"exact",s.some((u=>ei(u,o,a))))}ys(e,n){var i,r;if(n==null||!n.selector)return!0;var s=e==null||(i=e.properties)==null?void 0:i.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||yh(n.properties.reduce(((i,r)=>{var s=U(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return i[r.key]={values:s,operator:r.operator||"exact"},i}),{}),e?.properties)}}class Iv{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((i=>this.Ss(i)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&yh(e.propertyFilters,n?.properties)}Ps(e,n){var i=new Map;return e.forEach((r=>{var s;(s=r.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.forEach((o=>{if(o!=null&&o.name){var a=i.get(o.name)||[];a.push(r.id),i.set(o.name,a)}}))})),i}Rs(e,n,i){var r=(i===Ti.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>r?.includes(a.id)))})),s.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[i])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;C((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((i=>{var r,s;return((r=i.conditions)==null?void 0:r.actions)&&((s=i.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new xv(this._instance),this.Os.init(),this.Os.fs((i=>{this.onAction(i)}))),n.forEach((i=>{var r,s,o,a,l;i.conditions&&(r=i.conditions)!=null&&r.actions&&(s=i.conditions)!=null&&(s=s.actions)!=null&&s.values&&((o=i.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(i.conditions.actions.values),(l=i.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(i.id),this.xs.set(u.name,c||[i.id])}})))})))}Fs(e){var n,i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));i.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Ti.Activation),this.ks=this.Ps(e,Ti.Cancellation))}onEvent(e,n){var i,r,s=this.Ds(),o=(n==null||(i=n.properties)==null?void 0:i.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Ti.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Ti.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var i=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var s of e)i&&this.Cs(s)?this.qs(s)&&this.Us(s):r.push(s);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((i=>i!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var i=this.Zs(),r=i.filter((s=>!n.has(s)));r.length!==i.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return i&&typeof i=="object"?i:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(k({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),i={},r=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?r=!0:i[o]=a}r&&(rn(i)?this.Es():this.Ts(i))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return Pe(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,i=this.Zs();if(i.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&r===s?i:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,i=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(i&&i!==e){var r=this.Zs(),s=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>Pe(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class kv extends Iv{constructor(e){super(e)}Js(){return Pa}Ys(){return Kr}Ms(){return Yr}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Yr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Yr)}Cs(e){var n,i;this.As((s=>{i=s.find((o=>o.id===e))}));var r=(n=i)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return Pe(r)&&r>0}ra(){return en.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return te}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Pa]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Kr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Kr)}ea(){return!1}$s(e,n){var i;this.As((s=>{i=s.find((o=>o.id===n))}));var r=!i||(function(s){var o;return _h(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(i);return r?e===en.SHOWN?"consume":"ignore":e===en.SHOWN?"persist":e===en.DISMISSED||e===en.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Wr="SDK is not enabled or survey functionality is not yet loaded",Bu="Disabled. Not loading surveys.",Cv=w!=null&&w.location?Is(w.location.hash,"__posthog")||Is(location.hash,"state"):null,Du="_postHogToolbarParams",ju=ye("[Toolbar]"),Uu=ye("[FeatureFlags]");class Av{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((i,r)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=i.bootstrap)==null?void 0:s.featureFlags,featureFlagPayloads:(o=i.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,featureFlagsDisabled:!!i.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!i.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!i.advanced_feature_flags_dedup_per_session,cacheTtlMs:i.feature_flag_cache_ttl_ms,requestTimeoutMs:i.feature_flag_request_timeout_ms,compression:i.disable_compression?"none":"base64",evaluationContexts:(a=(l=i.evaluation_contexts)!==null&&l!==void 0?l:i.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:U(i.flag_keys)?i.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(Uu.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),C(e.flag_keys)||U(e.flag_keys)||Uu.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Hu=ye("[FeatureFlags]"),Fn=ye("[FeatureFlags]",{debugEnabled:!0}),ra=`" failed. Feature flags didn't load in time.`,Wu="connection_error",qu=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},zu=t=>{var e={};for(var n of Zr(t||{})){var i=n[1];i&&(e[n[0]]=i)}return e},Ct=ye("[Error tracking]"),Vu="Refusing to render web experiment since the viewer is a likely bot",Pv={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>As(e,t),not_regex:(t,e)=>!As(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class je{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(i){i===void 0&&(i=!1),n.getWebExperiments((r=>{je.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(je.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);Q(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];je.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),i)},this._instance=e,this._instance.onFeatureFlags((i=>{this.onFeatureFlags(i)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())je.aa(Vu);else if(!this.Ne.disable_web_experiments){if(z(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();je.aa("applying feature flags",e),e.forEach((n=>{var i;if(this.oa&&(i=this.oa)!=null&&i.has(n)){var r,s=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=je.getWindowLocation();if(e!=null&&e.search){var n=gi(e?.search,"__experiment_id"),i=gi(e?.search,"__experiment_variant");n&&i&&(je.aa("previewing web experiments "+n+" && "+i),this.getWebExperiments((r=>{this.ha(parseInt(n),i,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,i){if(this.Ne.disable_web_experiments&&!i)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,i){var r=i.filter((s=>s.id===e));r&&r.length>0&&(je.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!z(e.conditions)&&je.da(e,n)&&je.va(e)}static da(e,n){var i;if(z(e.conditions)||z((i=e.conditions)==null?void 0:i.url))return!0;var r=je.getWindowLocation();if(r){var s,o,a,l=Lf(n,r.href);return(s=e.conditions)==null||!s.url||Pv[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return w?.location}static va(e){var n;if(z(e.conditions)||z((n=e.conditions)==null?void 0:n.utm))return!0;var i=Jf();if(i.utm_source){var r,s,o,a,l,u,c,d,f=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==i.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==i.utm_source,h=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==i.utm_medium,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==i.utm_term;return f&&h&&g&&p}return!1}static aa(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;n>r;r++)i[r-1]=arguments[r];A.info("[WebExperiments] "+e,i)}la(e,n,i){this._is_bot()?je.aa(Vu):n!=="control"?i.forEach((r=>{if(r.selector){var s;je.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(s=document)==null?void 0:s.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):je.aa("Control variants leave the page unmodified.")}_is_bot(){return Ve&&this._instance?gh(Ve,this.Ne.custom_blocked_useragents):void 0}}var ht=ye("[Conversations]"),Rn="Conversations not available yet.",Gu="console",xh="__posthogHandledLogsRequestError",sa=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[xh]=!0,n},Ku=t=>!!t&&typeof t=="object"&&t[xh]===!0,Ys={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Hu,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new Av(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return w&&we(w,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){w?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],w?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[qi,zi,Gr,Pt]){var n=this.Oa(e);C(n)||(t[e]=n)}this.fa=t;var i=k({},t),r=this.Oa(Tn);if(r)for(var s of Object.entries(r))i["$feature/"+s[0]]=s[1];this.pa=i}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Xi);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!C(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,i=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(i).length){var r,s,o=(r=(s=n.bootstrap)==null?void 0:s.featureFlagPayloads)!==null&&r!==void 0?r:{},a=Object.keys(i).filter((u=>!!i[u])).reduce(((u,c)=>(u[c]=i[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,n){var i,r,s=n!=null&&n.merge&&(i=this.Oa(Tn))!==null&&i!==void 0?i:{},o=n!=null&&n.merge&&(r=this.Oa(zi))!==null&&r!==void 0?r:{},a=k({},s,t),l=k({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],f=c[1];u[d]={key:d,enabled:jc(f),variant:Uc(f),reason:void 0,metadata:C(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Ca),e=this.Oa(Pt),n=this.Oa($n);if(!n&&!e)return t||{};var i=me({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of r){var o,a,l=i[s],u=e?.[s],c=C(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=C(u)?l?.variant:typeof u=="string"?u:void 0,f=n?.[s],p=k({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),f&&(p.metadata=k({},l?.metadata,{payload:f,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),i[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:i}),this.ca=!0),i}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var i=t[n];return{key:n,enabled:jc(i),variant:Uc(i),payload:Dc(e[n])}}))}getFlagVariants(){var t=this.Oa(Tn),e=this.Oa(Pt);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(zi),e=this.Oa($n);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Nn)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:k({},e.initialPersonProperties,this.Oa(Gt)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Mn),timezone:nh()};C(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var i=this.Na();i.length&&(n.evaluation_contexts=i);var r=this.qa();C(r)||(n.flag_keys=r);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Jr]:[Wu]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?ze.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,f,p=(d=c.json)!==null&&d!==void 0?d:{},h=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),h||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!h;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Wu:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((f=p.quotaLimited)==null||!f.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Jr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,h,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Kf(this.Sa,3)}Ua(t){this.Sa=Yf(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var i=this.getFeatureFlagResult(t,e);return(n=i?.variant)!==null&&n!==void 0?n:i?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+ra)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,i=this.getFlagVariants(),r=t in i,s=i[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(Gr)||void 0,u=this.Oa(Xi)||void 0,c=this.Oa(Nn)||{};if(this.Ne.deduplicateCallsPerSession){var d,f=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Gi);f&&f!==p&&(c={},n=f)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Nn]:c,[Gi]:n});else{var h,g,m,v,x,E,y,S,I,R;U(c[t])?c[t].push(a):c[t]=[a],this.F(k({[Nn]:c},n?{[Gi]:n}:{}));var b=this.getFeatureFlagDetails(t),P=[...(h=this.Oa(Jr))!==null&&h!==void 0?h:[]];C(s)&&P.push("flag_missing");var T={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};C(b==null||(v=b.metadata)==null?void 0:v.has_experiment)||(T.$feature_flag_has_experiment=b.metadata.has_experiment),C(b==null||(x=b.metadata)==null?void 0:x.version)||(T.$feature_flag_version=b.metadata.version);var M,L=(E=b==null||(y=b.reason)==null?void 0:y.description)!==null&&E!==void 0?E:b==null||(S=b.reason)==null?void 0:S.code;L&&(T.$feature_flag_reason=L),b!=null&&(I=b.metadata)!=null&&I.id&&(T.$feature_flag_id=b.metadata.id),C(b?.original_variant)&&C(b?.original_enabled)||(T.$feature_flag_original_response=C(b.original_variant)?b.original_enabled:b.original_variant),b!=null&&(R=b.metadata)!=null&&R.original_payload&&(T.$feature_flag_original_payload=b==null||(M=b.metadata)==null?void 0:M.original_payload),P.length&&(T.$feature_flag_error=P.join(",")),this.za(T)}else n&&this.F({[Nn]:c,[Gi]:n});if(r)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:Dc(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+ra)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r={distinct_id:i.distinctId,token:i.projectToken,person_properties:{$lib:i.library.name,$lib_version:i.library.version}},s=n.Na();s.length&&(r.evaluation_contexts=s);var o,a=n.qa();C(a)||(r.flag_keys=a);try{var l,u=(l=(yield i.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?ze.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+ra),e.defaultValue;var n=this.getFeatureFlag(t,e);return C(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var i=(function(r,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Hu);var c=((I,R)=>{var b=I.flags;return b?k({},I,{featureFlags:Object.fromEntries(Object.keys(b).map((P=>{var T;return[P,(T=b[P].variant)!==null&&T!==void 0?T:b[P].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(b).filter((P=>b[P].enabled)).filter((P=>{var T;return(T=b[P].metadata)==null?void 0:T.payload})).map((P=>{var T;return[P,(T=b[P].metadata)==null?void 0:T.payload]})))}):(I.featureFlags&&R.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),I)})(r,u),d=c.flags,f=c.featureFlags,p=c.featureFlagPayloads;if(f){var h=r.requestId,g=r.evaluatedAt;if(U(f)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(f)for(var v=0;f.length>v;v++)m[f[v]]=!0;return{[qi]:f,[Tn]:m,[ms]:!1}}var x=f,E=p,y=d;if(l!=null&&l.partialResponse)x=k({},s,x),E=k({},o,E),y=k({},a,y);else if(r.errorsWhileComputingFlags)if(d){var S=new Set(Object.keys(d).filter((I=>{var R;return!((R=d[I])!=null&&R.failed)})));x=k({},s,Object.fromEntries(Object.entries(x).filter((I=>S.has(I[0]))))),E=k({},o,Object.fromEntries(Object.entries(E||{}).filter((I=>S.has(I[0]))))),y=k({},a,Object.fromEntries(Object.entries(y||{}).filter((I=>S.has(I[0])))))}else x=k({},s,x),E=k({},o,E),y=k({},a,y);return k({[qi]:Object.keys(zu(x)),[Tn]:x||{},[zi]:E||{},[Ca]:y||{},[ms]:r.minimalFlagCalledEvents===!0},h?{[Gr]:h}:{},g?{[Xi]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,this.rt);i&&this.F(i),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([Pt,$n]),this.Va(),void Fn.info("All overrides cleared");if(U(t))return this.F({[Pt]:qu(t)}),this.Va(),void Fn.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var i={},r=n.flags,s=n.payloads;return r&&(i[Pt]=U(r)?qu(r):r),s&&(i[$n]=s),Object.keys(i).length&&this.F(i),r===!1&&s===!1?this.q([Pt,$n]):r===!1?this.q(Pt):s===!1&&this.q($n),this.Va(),r===!1?Fn.info("Flag overrides cleared"):r&&Fn.info("Flag overrides set",{flags:r}),void(s===!1?Fn.info("Payload overrides cleared"):s&&Fn.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[Pt]:t}),this.Va(),void Fn.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,i=e.flagVariants;try{t(n,i)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var i=(this.Oa(Vr)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:r};i&&(s.$early_access_feature_name=i.name),n&&(s.$feature_enrollment_stage=n);var o=k({},this.getFlagVariants(),{[t]:e});this.F({[qi]:Object.keys(zu(o)),[Tn]:o,[Gt]:k({},this.Oa(Gt)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var i=this.Oa(Vr);!i||e?this.Qa(t,n):t(i)}Qa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield i.sendRequest("/api/early_access_features/?token="+i.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Vr]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,i)=>(n[i]=e[i],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,i=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,i,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(Gt)||{},i=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,s={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(s[o]=r[o]));this.F({[Gt]:k({},n,s,i)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=k({},this.Oa(Gt)||{});t.forEach((i=>{delete n[i]})),this.F({[Gt]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(Gt),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(Mn)||{},i=k({},n);for(var r of Object.keys(t))i[r]=k({},n[r],t[r]);this.F({[Mn]:i}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Mn)||{};this.F({[Mn]:k({},e,{[t]:{}})})}else this.q(Mn)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},Fv={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Bi||this.Ya===Ur?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=Lu,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(F==null||!F.visibilityState||F.visibilityState==="visible")return!0;var n=w==null||(e=w.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((i=>i.name==="visible"))})(),this.Ie=()=>{var e;F?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw zt.error("started without valid sessionManager"),new Error(za+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===Xt)throw new Error(za+' cannot be used with cookieless_mode="always"');F!=null&&F.addEventListener&&we(F,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,F==null||F.removeEventListener==null||F.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(On))==null||!t.enabled),n=!this.Ne.disable_session_recording,i=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return w&&e&&n&&!i}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!C(Object.assign)&&!C(Array.from);this.ro&&n?(this.no(t),zt.info("starting")):(this.Ya=Lu,this.stopRecording())}}no(t){var e,n,i;this.ro&&(this.Ya!==Bi&&this.Ya!==Ur&&(this.Ya=Nu),O!=null&&(e=O.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=O.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return zt.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(Al),(e=this.Mr)==null||e.unregister(xf)}uo(t,e){if(z(t))return null;var n,i=Pe(t)?t:parseFloat(t);return typeof(n=i)!="number"||!Number.isFinite(n)||0>n||n>1?(zt.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):i}ho(t){if(this.Mr){var e,n,i=this.Mr,r=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;z(u)&&this.lo();var c=o?.minimumDurationMilliseconds;i.register({[On]:k({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:k({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:C(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Bi&&(this.Ya=Ur,zt.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):zt.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(On);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(On);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return zt.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!z(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,i;if(!this.eo){if((e=O.__PosthogExtensions__)==null||!e.initSessionRecording)return zt.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[Tf]:!0});var r;if(this.Ja||(this.Ja=(r=O.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Ur||this.Ya===Bi?void 0:(this.Ya=Bi,zt.info("persisted remote config is stale, requesting fresh config before starting"),void new ih(this._instance).load());this.Ya=Nu,(n=(i=this.Ja).setDocumentWasEverVisible)==null||n.call(i,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[kf]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[If]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?Cf:Af]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},Rv={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Tu(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=ve(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((i=>new RegExp(i))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((i=>new RegExp(i))),n}yo(){if(this.isBrowserSupported()){if(w&&F){var t=n=>{n=n||w?.event;try{this.bo(n)}catch(i){ea.error("Failed to capture event",i)}};if(we(F,"submit",t,{capture:!0}),we(F,"change",t,{capture:!0}),we(F,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||w?.event;try{this.bo(n,Qo)}catch(i){ea.error("Failed to capture copy/cut event",i)}};we(F,"copy",e,{capture:!0}),we(F,"cut",e,{capture:!0})}}}else ea.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;St(n)&&(this.instance.persistence&&this.instance.persistence.register({[wa]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((i=>{var r=F?.querySelectorAll(i);r?.forEach((s=>{t===s&&n.push(i)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[wa],i=this.co,r=this.instance.Qi()&&!this.fo;if(tt(i)&&!St(n)&&!r)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,i=Uo(t);Of(i)&&(i=i.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&lu(i,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===Qo;if(i&&(function(d,f,p,h,g,m){var v;if(!w||$l(d)||p!=null&&p.url_allowlist&&!su(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&su(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var x=p.dom_event_allowlist;if(x&&!x.some((b=>f.type===b)))return!1}var E=Wf(d,h),y=E.parentIsUsefulElement,S=E.targetElementList;if(!(function(b,P){var T=P?.element_allowlist;if(C(T))return!0;var M,L=function(Y){if(T.some((G=>Y.tagName.toLowerCase()===G)))return{v:!0}};for(var B of b)if(M=L(B))return M.v;return!1})(S,p)||!Na(S,p?.css_selector_allowlist)||Na(S,(v=p?.css_selector_ignorelist)!==null&&v!==void 0?v:Am))return!1;try{var I=w.getComputedStyle(d);if(I&&I.getPropertyValue("cursor")==="pointer"&&f.type==="click")return!0}catch{}var R=d.tagName.toLowerCase();switch(R){case"html":return!1;case"form":return(g||["submit"]).indexOf(f.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(f.type)>=0;default:return y?(g||["click"]).indexOf(f.type)>=0:(g||["click"]).indexOf(f.type)>=0&&(Tl.indexOf(R)>-1||d.getAttribute("contenteditable")==="true")}})(i,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var s=wv(i,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(i);if(a&&a.length>0&&(o.$element_selectors=a),e===Qo){var l,u=jf(w==null||(l=w.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return qe(F?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(w==null||(e=w.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(A.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,A.info("History API monitoring stopped")}monitorHistoryChanges(){w&&w.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(w&&((e=w.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(i,r,s){try{if(!(r in i))return $u;var o={next:i[r]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return qe(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),i[r]=a,()=>{if(i[r]!==a)for(var l=i[r];qe(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else i[r]=o.next}}catch{return $u}})(w.history,t,(i=>function(r,s,o){i.call(this,r,s,o),n.So(t)}))}}So(t){try{var e,n=w==null||(e=w.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(ni,{navigation_type:t}),this._o=n}catch(i){A.error("Error capturing "+t+" pageview",i)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};we(w,"popstate",t),this.wo=()=>{w&&w.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[ba]),this.rageclicks=new Tu(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return ve(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return z(this.Ne.capture_heatmaps)?z(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;Ev.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[ba]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){na(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=F?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){w&&F&&(this.Po=this.cr.bind(this),we(w,bs,this.Po),this.Ro=t=>this.ke(t||w?.event),we(F,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||w?.event),we(F,"mousemove",this.Ao,{capture:!0}),this.Lo=new gu(this.instance,Lm,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),we(F,ws,this.Oo),this.vo=!0)}Eo(){var t;w&&F&&(this.Po&&w.removeEventListener(bs,this.Po),this.Ro&&F.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&F.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&F.removeEventListener(ws,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),i=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&bn(u)&&!at(u,"body");){if(u===l)return!1;var c=void 0;try{var d,f,p;c=(d=(f=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&f!==void 0?f:w)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(j(a,c))return!0;u=Uf(u)}return!1})(Uo(t),["fixed","sticky"],r);return{x:t.clientX+(s?0:i),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!ru(t.target)&&na(t)){var i=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&lu(Uo(t),this.instance.config.rageclick)&&this.Vt(k({},i,{type:"rageclick"})),this.Vt(i)}}Fo(t){!ru(t.target)&&na(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(w){var e=this.Ne.disable_capture_url_hashes?wn(w.location.href):w.location.href,n=this.Ne.custom_personal_data_properties,i=this.Ne.mask_personal_data_properties?[...mi,...n||[]]:[],r=cr(e,i,ur);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].push(t)}}cr(){this.R&&!rn(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:gu,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",k({$current_url:this.R.url},this.R.metrics.reduce(((n,i)=>k({},n,{["$web_vitals_"+i.name+"_event"]:k({},i),["$web_vitals_"+i.name+"_value"]:i.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var i;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},z(n?.name)||z(n?.value))Pn.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(r);if(!C(s)){var o=Pe(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),C(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=C(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(i=this._instance.sessionManager)==null?void 0:i.checkAndGetSessionAndWindowId(!0),l=k({},n,r?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});C(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Pn.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,i,r,s,o=O.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&C(a)?o?.postHogWebVitalsCallbacks:void 0);if(C(l)||(n=l.onLCP,i=l.onCLS,r=l.onFCP,s=l.onINP),n&&i&&r&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&s(this.jo.bind(this),u),this.vo=!0}else Pn.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Ia]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=ve(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return z(n)?((e=this._instance.persistence)==null?void 0:e.props[ka])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(ve(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=ve(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=ve(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=ve(this.Wo)&&Pe(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Mu;return t>0&&6e4>=t?Mu:t}get isEnabled(){var t=_e?.protocol;if(t!=="http:"&&t!=="https:")return Pn.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=ve(this.Wo)?this.Wo.web_vitals:St(this.Wo)?this.Wo:void 0;return St(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Pn.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=ve(e.capturePerformance)&&!!e.capturePerformance.web_vitals,i=ve(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Ia]:n}),this._instance.persistence.register({[ka]:i})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=O.__PosthogExtensions__,n=this.zo,i=e?.postHogWebVitalsCallbacksByFlavor;i!=null&&i[n]||n==="web-vitals"&&C(i)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?Pn.error("failed to load script",r):t()}))}Bo(t){var e=t||w?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?wn(e):e,i=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...mi,...i||[]]:[];return cr(n,r,ur)}Pn.error("Could not determine current URL")}}},Tv={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(w&&this.isEnabled&&(n=O.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var i=O.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=O.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=O.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=i(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=s(this.captureException.bind(this)))}catch(o){Oi.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Ea]),this.Jo=new Fg(k({},(function(n){var i,r,s,o;return n===void 0&&(n={}),{refillRate:(i=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Oi})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return ve(t)?e=k({},e,t):(C(t)?this.Ko:t)&&(e=k({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Oi.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(i=>{if(i)return Oi.error("failed to load script",i);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Ea]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,i,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Oi.info("Skipping exception capture because of client rate limiting.",{exception:r}):(i=this._instance.exceptions)==null||i.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Gg([new tm,new um,new im,new nm,new lm,new am,new sm,new cm],(function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;r>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` +`),d=l;c.length>d;d++){var f=c[d];if(1024>=f.length){var p=eu.test(f)?f.replace(eu,"$1"):f;if(!p.match(/\S*Error: /)){for(var h of s){var g=h(p,i);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var v=Array.from(m);return v.reverse(),v.slice(0,50).map((x=>{return k({},x,{filename:x.filename||(E=v,E[E.length-1]||{}).filename,function:x.function||pi});var E}))})(u)}})("web:javascript",Zg,em)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(Sa))!==null&&e!==void 0?e:[],this.el=gs(this.il()),this.rl=new fm(this.el)}onConfigChange(){this.el=gs(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,i;if(t.ok){var r=t.config;if("errorTracking"in r){var s=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(i=r.errorTracking)==null?void 0:i.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[Sa]:this.Xo,[xa]:o})}}}get nl(){var t,e=!!this._instance.get_property(xa),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!Q(t)||t.trim().length===0)return void Ct.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>dm.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),i=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&Ct.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(k({[hs]:t,[ps]:new Date().toISOString()},i))}catch(s){Ct.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Ct.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void Ct.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void Ct.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&z(t.$exception_steps)?this.dl(t):t,i=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;i&&(n.$release_id=i);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}catch(o){return Ct.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Ct.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:k({},t,{$exception_steps:e})}catch(n){return Ct.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[hs]:t,[ps]:new Date().toISOString()})}sl(t){return ve(t)?k({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,i)=>{var r=i.type,s=i.value;return Q(r)&&r.length>0&&n.$exception_types.push(r),Q(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var i=n.values.map((r=>{var s=vh[r.operator],o=e[r.key];if(!s||!o)return!1;var a=U(r.value)?r.value:[r.value];return a.length>0&&s(a,o)}));return n.type==="OR"?i.some(Boolean):i.every(Boolean)}))}catch(n){return Ct.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,i;return(n=(i=e.stacktrace)==null?void 0:i.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,i,r,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.length-1];return(i=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&i!==void 0&&i}return!1}al(t){return!z(t)&&U(t)}}},$v=k({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,i;if(this.Mr&&this.Mr.register({[Cl]:!!e.productTours}),!ia(this._instance))return!this.vl&&z((n=this.Mr)==null?void 0:n.props[Vi])||Hr.info("product tours disabled; stopping and clearing cached tours"),(i=this.vl)==null||i.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&ia(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(i=>{i?Hr.error("Could not load product tours script",i):t()}))}fl(){var t;!this.vl&&(t=O.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=O.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!U(this.cl)||e){var n=this.Mr;if(n){var i=n.props[Vi];if(U(i)&&!e)return this.cl=i,void t(i,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:r=>{if(ia(this._instance)){var s=r.statusCode;if(s!==200||!r.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?r.error||Hr.warn(o):Hr.error(o),void t([],{isLoaded:!1,error:o})}var a=U(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[Vi]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){z(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Vi)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},Ys),Mv={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=O._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,i,r,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var f=d[0];l[f]={id:u[f],type:f,properties:d[1]}}var p=t.$set_once,h=t.$set;return{event:k({},Ud(t,Sv),{properties:k({},t.properties,h?{$set:k({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},h)}:{},p?{$set_once:k({},(i=(r=t.properties)==null?void 0:r.$set_once)!==null&&i!==void 0?i:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(kt.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(kt.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,i,r,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=F?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,f=new WeakSet,p=(m,v,x)=>{if(m!=null&&m[v]){var E=m[v];m[v]=x(E),c.push((()=>{m[v]=E}))}},h=m=>{if(f.has(m))return m;var v=d.bl(m);return v&&f.add(v),v},g=m=>m.map((v=>typeof v=="string"?v:h(v))).filter((v=>!tt(v)));return p(u,"appendChild",(m=>function(v){var x=h(v);return x?m.call(this,x):v})),p(u,"insertBefore",(m=>function(v,x){var E=h(v);return E?m.call(this,E,x):v})),p(u,"replaceChild",(m=>function(v,x){var E=h(v);return E?m.call(this,E,x):x})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(i=l.DocumentFragment)==null?void 0:i.prototype].forEach((m=>{p(m,"append",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"prepend",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))}))})),[(r=l.Element)==null?void 0:r.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"after",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"replaceWith",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];var S=g(E);return E.length&&!S.length?void 0:v.apply(this,S)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(v,x){var E=h(x);return E?m.call(this,v,E):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var i=t(n);return e&&n(),i}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(kt.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},i=!1,r=o=>{e.errored=!o,e.loaded=!0,kt.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),i&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;s&&(e.processEvent=s),i=!0}catch(o){kt.error(Ou+t.id,o),r(!1)}if(i&&e.loaded)try{n()}catch(o){kt.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),i=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){kt.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var r of Object.values(this.apps))i(r)}}onRemoteConfig(t){var e,n,i,r=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void kt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((i=s.siteApps)!=null&&i.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;O["__$$ph_site_app_"+u]=r._instance,(l=O.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return kt.error(Ou+u,d)}))};for(var a of s.siteApps)o()}else kt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Lv={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,i=this.Il();i?(C(this.Ml)&&(this.Ml=(e=O.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),C(this.Tl)&&(this.Tl=(n=O.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(i=>{if(i)return bv.error("failed to load script",i);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return U(t)?(U(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(U(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},Nv=k({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return te.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(z(e))return te.warn("Flags not loaded yet. Not loading surveys.");var n=U(e);this.Rl=n?e.length>0:e,te.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)te.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)te.info(Bu);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())te.info("Not loading surveys in cookieless mode without consent.");else{var t=O?.__PosthogExtensions__;if(t){if(!C(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var i=t.loadExternalDependency;if(!i)return void this.$l(Pl);i(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else te.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new kv(this._instance),te.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){te.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return te.info(Bu),t([]);var n,i=this._instance.get_property(Aa);if(i&&!e)return t(i,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var s;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?te.error(a):r.error||te.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(h){return!(!h.start_date||h.end_date)})(p)&&(_h(p)||(function(h){var g;return!((g=h.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[Aa]:c,[vs]:Date.now()});var f={isLoaded:!0};t(c,f),n?.({surveys:c,context:f})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(vs);return Pe(t)&&Date.now()-t>3e5}Bl(){return Pe(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,i={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};bh(i);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(n){te.error("Error in survey callback",n)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!z(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);te.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((n=>{var i;e=(i=n.find((r=>r.id===t)))!==null&&i!==void 0?i:null})),e}Ul(t){if(z(this._surveyManager))return{eligible:!1,reason:Wr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(z(this._surveyManager))return{eligible:!1,reason:Wr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(z(this._surveyManager))return te.warn("init was not called"),{visible:!1,disabledReason:Wr};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return z(this._surveyManager)?(te.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Wr})):new Promise((n=>{this.getSurveys((i=>{var r,s=(r=i.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var i;if(z(this._surveyManager))te.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(lv.includes(r.type)){var s=F?.querySelector(e);if(s)return(i=r.appearance)!=null&&i.surveyPopupDelaySeconds?(te.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;te.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,s,n),te.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,s,n);te.warn("Survey element not found")}else te.warn("Surveys of type "+r.type+" cannot be rendered in the app");else te.warn("Survey not found")}}displaySurvey(t,e){var n;if(z(this._surveyManager))te.warn("init was not called");else{var i=this.Hl(t);if(i){var r=i;if((n=i.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=k({},i,{appearance:k({},i.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Ba.Popover&&e.initialResponses&&te.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(i);if(!s.eligible)return void te.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==Ba.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,e.selector,e.properties)}else te.warn("Survey not found")}}cancelPendingSurvey(t){z(this._surveyManager)?te.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Ys),Ov={toolbar:class{constructor(t){this.instance=t}Wl(t){O.ph_toolbar_state=t}Vl(){var t;return(t=O.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),La(this.instance.config)||!w||!F)return!1;t=t??w.location,n=n??w.history;try{if(!e){try{w.localStorage.setItem("test","test"),w.localStorage.removeItem("test")}catch{return!1}e=w?.localStorage}var i,r=Cv||Is(t.hash,"__posthog")||Is(t.hash,"state"),s=r?nu((()=>JSON.parse(atob(decodeURIComponent(r)))))||nu((()=>JSON.parse(decodeURIComponent(r)))):null;return s&&s.action==="ph_authorize"?((i=s).source="url",i&&Object.keys(i).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((i=JSON.parse(e.getItem(Du)||"{}")).source="localstorage",delete i.userIntent),!(!i.token||this.instance.config.token!==i.token||(this.loadToolbar(i),0))}catch{return!1}}Zl(t){var e=O.ph_load_toolbar||O.ph_load_editor;!z(e)&&qe(e)?e(t,this.instance):ju.warn("No toolbar load function found")}loadToolbar(t){var e=!(F==null||!F.getElementById(Nf));if(!w||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,i=k({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(w.localStorage.setItem(Du,JSON.stringify(k({},i,{source:void 0}))),this.Vl()===2)this.Zl(i);else if(this.Vl()===0){var r;this.Wl(1),(r=O.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return ju.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(i)})),we(w,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(i)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},Bv=k({experiments:je},Ys),Dv={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;z(e)||(St(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||La(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=O?.__PosthogExtensions__;if(t&&!C(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(Pl);n(this._instance,"conversations",(i=>{i||!t.initConversations?this.eu("Could not load conversations script",i):this.tu(t.initConversations),this.Kl=!1}))}catch(i){this.eu("Error initializing conversations",i),this.Kl=!1}}else ht.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,ht.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else ht.error("Cannot complete initialization: remote config is null")}eu(t,e){ht.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():ht.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!tt(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":La(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":C(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?z(this.Jl)||!this.Jl.token?"missing_token":O!=null&&O.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var i=this;return ce((function*(){return i._conversationsManager?i._conversationsManager.sendMessage(t,e,n):(ht.warn(Rn),null)}))()}getMessages(t,e){var n=this;return ce((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(ht.warn(Rn),null)}))()}markAsRead(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(ht.warn(Rn),null)}))()}getTickets(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(ht.warn(Rn),null)}))()}requestRestoreLink(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(ht.warn(Rn),null)}))()}restoreFromToken(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(ht.warn(Rn),null)}))()}restoreFromUrlToken(){var t=this;return ce((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(ht.warn(Rn),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},jv={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ye("[logs]"),this.nu=k({},this.rt,{error(){for(var i=arguments.length,r=new Array(i),s=0;i>s;s++)r[s]=arguments[s];r.some(Ku)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var i,r;this.Sa=0,(i=this.ou)==null||i.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),w&&we(w,"online",this.au)}uu(t,e,n,i){var r,s=(function(o,a){var l,u,c,d,f,p,h,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,v=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,x=C(v)?Math.max(m,2048):Math.max(m,v),E=o?.resourceAttributes;return{serviceName:(d=(f=E?.["service.name"])!==null&&f!==void 0?f:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=E?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(h=E?.["deployment.environment"])!==null&&h!==void 0?h:o?.environment,resourceAttributes:E,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:x,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:v,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new qg(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,i),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var i=this.uu((()=>this.tr),(r=>{this.tr=r}));this.ou=i[0],this.fu=i[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var n;(n=this.lu)==null||n.reset(),this.gu=e;var i=this.uu((()=>this.su),(r=>{this.su=r}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},Gu);this.lu=i[0],this.mu=i[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!z(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){Ku(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=O?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var i;n||(i=t.logs)==null||!i.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(Pl)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:i=>i===Kt.LogsQueue?t():void 0,setPersistedProperty(i,r){var s;i===Kt.LogsQueue&&e((s=r)!==null&&s!==void 0?s:[])},Ot:i=>this.Ot(i),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Kf(this.Sa,3))e({kind:"fatal",error:sa(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,i=s=>{n||(n=!0,clearTimeout(r),e(s))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),i({kind:"retry-later",error:sa(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)i({kind:"ok"});else if(o===413)i({kind:"too-large"});else if(o!==0&&o!==429&&500>o)i({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),i({kind:"retry-later",error:sa(s.error,"logs request failed before receiving an HTTP response")})):i({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Yf(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,oe.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,Gu,(e=>{this.su=e}))}xu(t,e,n,i,r){if(e.length!==0){var s=e.map((a=>a.record));r([]);var o=_f(s,yf(n,oe.LIB_NAME,oe.LIB_VERSION),i,oe.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.windowId,r=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=i,z(r)||(e.sessionStartTimestamp=r),z(s)||(e.lastActivityTimestamp=s)}if(O!=null&&(t=O.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?wn(O.location.href):O.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Uv={metrics:class{constructor(t){this.rt=ye("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new zg(this.hu(),(function(i){var r,s,o,a,l,u=i?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:i?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:i?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:i?.environment,resourceAttributes:u,beforeSend:i?.beforeSend,flushIntervalMs:(a=i?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=i?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var i=!1,r=o=>{i||(i=!0,clearTimeout(s),n(o))},s=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(k({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Hv=k({},Ys,Fv,Rv,Tv,$v,Mv,Nv,Lv,Ov,Bv,Dv,jv,Uv);rt.__defaultExtensionClasses=k({},Hv);(function(){oe.SDK_DIST_CHANNEL="npm";var t=tr[ii]=new rt;return(function(){function e(){e.done||(e.done=!0,Sh=!1,ae(tr,(function(n){n._dom_loaded()})))}F!=null&&F.addEventListener?F.readyState==="complete"?e():we(F,"DOMContentLoaded",e,{capture:!1}):w&&A.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const Wv=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Qe=null,Fs=null,Ih="";const Va=new Map;function kh(t){return[...t.querySelectorAll(Wv)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function qv(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Va.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function zv(){for(const[t,e]of Va)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Va.clear()}function Ch(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function Ke(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;const i=Qe&&Qe!==n?Qe:null,r=Fs;if(i&&Ye(i,{restoreFocus:!1,force:!0}),Qe!==n){let a=e.trigger||document.activeElement;a&&(i?.contains(a)||n.contains(a))&&(a=r),Fs=a,Ih=document.body.style.overflow,qv(n),document.body.style.overflow="hidden"}Qe=n,n.classList.add("open"),n.setAttribute("aria-hidden","false");const s=n.querySelector(".modal-content");s&&(s.style.transform="scale(1) translateY(0)");const o=()=>{if(Qe!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||kh(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(o),setTimeout(o,260),!0}function Ye(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!Ch(n))return!1;if(n.classList.remove("open"),n.setAttribute("aria-hidden","true"),n!==Qe)return!0;zv(),document.body.style.overflow=Ih,Qe=null;const i=Fs;return Fs=null,e.restoreFocus!==!1&&i?.isConnected&&i.focus({preventScroll:!0}),!0}function Vv(){return!!Qe}function Yu(t,e,n="Operation in progress"){const i=typeof t=="string"?document.getElementById(t):t;i&&(i.dataset.modalDismissible=e?"false":"true",i.setAttribute("aria-busy",String(!!e)),e?i.setAttribute("aria-label",n):i.removeAttribute("aria-label"))}function Gv(t){if(!Ch(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():Ye(t)}document.addEventListener("keydown",t=>{if(!Qe)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),Gv(Qe);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=kh(Qe);if(!e.length){t.preventDefault(),(Qe.querySelector(".modal-content")||Qe).focus();return}const n=e[0],i=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),n.focus())},!0);function Kv(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(i=>{i.getAttribute("aria-label")||i.setAttribute("aria-label","Close dialog")})})}const Ol=Object.freeze({free:"Free",professional:"Pro",power:"Power"}),Yv=Object.freeze({free:2,professional:50,power:2e3}),Jv="(contact us)",Zv=Object.freeze({free:Object.freeze(["2 generations/month","Gemini model only","Code Review"]),professional:Object.freeze(["50 generations/month","All models","Code Regeneration","Code Review"]),power:Object.freeze(["2000 generations/month","All models","Code Regeneration","Bring your own key (BYOK)","Code Review","All models + early access",`API & MCP access ${Jv}`])}),Ah="CodeFile",Ph="GeneratedCode",Xv={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function vn(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Ga(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Qv(t={},e=0){const n=Ga(t.artifactType||t.type||Ah),i=Ga(t.artifactName||t.name||t.fileName||`${Ph}-${e+1}`);return`${n||"artifact"}-${i||e+1}`}function Fh(t={},e=0){const n=vn(t),i=n.artifactType||n.type||Ah,r=n.artifactName||n.name||Ph;let s=n.fileName||r;return s.endsWith(".dart")||(s+=".dart"),{id:Ga(n.id)||Qv({...n,artifactType:i,artifactName:r,fileName:s},e),artifactType:i,artifactName:r,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:Rh(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:Th(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:vn(n.metadata),codeType:n.codeType||Xv[i]||"O"}}function Rh(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=vn(e),i=n.name||n.package;return i?{name:i,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(vn(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function Th(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=vn(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Ka(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function dr(t,e={}){const n=[],i=typeof t=="string"?Ka(t):t,s=vn(i||{});!i&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,f)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${f+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,f)=>Fh(d,f)),l=new Map(o.map((d,f)=>[vn(d).id,a[f]?.id]).filter(([d,f])=>d&&f)),u=d=>l.get(d)||d,c=Th(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:Rh(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:vn(s.metadata)}}function yi(t){return dr(t).artifacts[0]||Fh()}function an(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function _i(t){return JSON.stringify(t,null,2)}function ey(t){return _i({task:"architect",userRequest:String(t??"")})}function ty(t){const e=an(t);return e&&typeof e=="object"&&typeof e.task=="string"?_i(e):_i({task:"generate_bundle",bundleSpec:e})}function ny(t){return _i({task:"review_bundle",generatedBundle:an(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function Bl(t,e=null){const n={stage:t};return e!=null&&(n.bundle=an(e)),n}function iy({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:i,userFeedback:r}){return _i({task:"regenerate_artifact",artifactId:i,bundleSpec:an(t),artifactBundle:an(e),bundleReview:an(n),userFeedback:String(r)})}function $h({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:i}){return _i({task:"regenerate_bundle",bundleSpec:an(t),artifactBundle:an(e),bundleReview:an(n),userFeedback:String(i??"")})}const Ju={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},ry=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function lt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function sy(t){return lt(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||lt(t.filterSummary)||lt(t.filterResults):!1}function Mh(t,e=0){if(!lt(t)||e>3)return null;if(sy(t))return t;for(const n of ry){const i=t[n];if(lt(i)){const r=Mh(i,e+1);if(r)return r}}return null}function Rs(t){return Array.isArray(t)?t.some(Rs):lt(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(Rs):!1}function Ya(t){return Array.isArray(t)?t.some(Ya):lt(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(Ya):!1}function Lh(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function oy(t,e){if(lt(t))for(const[n,i]of Object.entries(t)){if(!lt(i))continue;const r=lt(i.categories)?i.categories:{},s=Object.entries(r).filter(([,o])=>lt(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):i.matched===!0&&e.add(Lh(n))}}function ay(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(i=>lt(i)?Object.entries(i):[]):Object.entries(t);for(const[i,r]of n){if(!Rs(r))continue;const s=Lh(i),o=r?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?r?.raiFilterTypeResults:null),a=lt(o)?Object.entries(o).filter(([,l])=>Rs(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function ly(t){return Ju[t]?Ju[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Zu(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function cy(t){const e=Mh(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);oy(e.filterSummary,n),ay(e.filterResults,n);const i=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,s=Ya(e.filterSummary||e.filterResults);return!i&&!s&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:i?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function uy(t,e){const n=cy(t);if(!n)return null;const i=[...new Set(n.matchedFilters.map(ly))],r=n.kind==="blocked",s=new Error(r?`Safety screening blocked this pipeline step for ${Zu(i)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=r?"Request blocked for safety":"Safety check unavailable",s.userMessage=r?`The safety check detected ${Zu(i)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",s.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function dy(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Xu(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const i of dy(t).split(` +`)){if(!/^[A-Za-z_$]/.test(i)||e.test(i))continue;const r=i.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function Dl(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(i,r,s)=>s.toUpperCase());if(e==="A"){const i=n.replace(/(^|_)(\w)/g,(r,s,o)=>o.toUpperCase());return i.charAt(0).toLowerCase()+i.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Qu(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),i=>i.toString(16).padStart(2,"0")).join("")}async function fy(t,e=new Map){const n={},i=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=Dl(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Qu(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Qu(c)),n[o]=u,a.type==="F"){const d=Xu(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>i.add(p))}}const r=new Set(Xu(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(i).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const hy=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),ed={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},py=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),gy=["Struct","Record"],my=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>oa(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } +class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>oa(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let i;for(;(i=n.exec(e))!==null;){const r=i[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { const W({required this.value}); final double value; }`,neg:`class _P { @@ -14,7 +14,7 @@ class W extends StatefulWidget { final double value; }`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } -var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>Jo(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { +var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>oa(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { const W({this.textStyle}); final TextStyle? textStyle; @override _S createState() => _S(); @@ -24,56 +24,56 @@ class _S extends State { @override Widget build(BuildContext c) => const Size final double? width; @override _S createState() => _S(); } -class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function kt(t,e,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function ar(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,i),end:i+1};return null}function iy(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let i=0;for(let r=n.index+n[0].length-1;rry(t).usable);function oy(t=""){const e=ar(t);return sy.filter(n=>n.detect(e)).map(({id:n,severity:i,message:r})=>({id:n,severity:i,message:r}))}function ay(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const i of n){let r=i.index+6,s=null;const o=r;for(;ro;if(t[r]==="<"){const u=ny(t,r);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rju(o.functionName)===i);if(r)return r;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Hs(t=""){return Array.from(ar(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ly(t="",e=""){return Cl(t,e)?.returnType||null}function Uu(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function cy(t,e){const n=Hs(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>Uu(l)===r)||n.length>1)return null;const[o]=n,a=`${Uu(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function Al(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function uy(t,e,n=""){const i=Cl(e,n)?.functionName;if(!i)return null;const r=String(t||"").split("/").pop(),s=kl(r,"A");if(s===i)return null;const o=`${Al(i)}.dart`;return`File name "${r}" does not match Action "${i}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function dy(t="",e=""){return Cl(t,e)!==null}function fy(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(i=>Qv.has(i)?!1:!ey.some(s=>i.endsWith(s))||e.has(i))}function hy(t,{functionName:e="",declaredTypes:n=new Set}={}){const i=ly(t,e),r=fy(i,n);if(r.length===0)return null;const[s]=r;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:i===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${i}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function py(t,e={}){const n=[],i=t.fileName||"",r=t.code||"";if(Xv.has(t.artifactType)||n.push(kt(t,"error",`Unsupported artifact type "${t.artifactType}".`)),i.endsWith(".dart")||n.push(kt(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(kt(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(kt(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of oy(r))n.push(kt(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!dy(r,t.artifactName)&&n.push(kt(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Hs(r)),o=hy(r,{functionName:t.artifactName,declaredTypes:s});o&&n.push(kt(t,"error",o));const a=uy(i,r,t.artifactName);a&&n.push(kt(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(kt(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=cy(i,r);s&&n.push(kt(t,"info",s))}return n}function gy(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Hs(s.code||""))),i=e.flatMap(s=>py(s,{declaredTypes:n})),r=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:Du[s.artifactType]||Du.CodeFile}));return{valid:i.every(s=>s.severity!=="error"),findings:i,deployHints:r}}const Hu="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function Wu(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function my(t=""){const e=t.indexOf(Hu);return e===-1?t:t.slice(e+Hu.length).replace(/^\s*\n/,"")}const vy=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function yy(t="",e=""){const n=my(t),i=new Set((e.match(/^\s*import .*$/gm)||[]).map(Wu).filter(Boolean)),r=n.split(` -`).filter(s=>{const o=Wu(s);return o===null||!i.has(o)?!0:!vy.test(s)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const _y=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","flutter_web_plugins","integration_test","sky_engine"]);function wy(t){let e="",n=0;for(;n{const i=n.name||n.package;if(!i||i==="flutter")return e;const r=n.versionRequired||n.required;return e[i]=r&&n.version||"",e},{})}function Ay(t){const e=new Map,n=new Map,i=[];for(const r of t)e.has(r.fileName)?i.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?i.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return i}function Py(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(h=>h.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];r.forEach(p=>{const h=Cy(p),g=p.fixedCode||p.code||"",m=p.codeType||Iy[p.artifactType]||it.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:h,content:g,type:m,path:p.deployPath||ky(h,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,h)=>({entry:p,index:h})).filter(({entry:p})=>p.type===it.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],h={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} +class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function At(t,e,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function fr(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,i),end:i+1};return null}function yy(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let i=0;for(let r=n.index+n[0].length-1;r_y(t).usable);function by(t=""){const e=fr(t);return wy.filter(n=>n.detect(e)).map(({id:n,severity:i,message:r})=>({id:n,severity:i,message:r}))}function Ey(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const i of n){let r=i.index+6,s=null;const o=r;for(;ro;if(t[r]==="<"){const u=vy(t,r);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rtd(o.functionName)===i);if(r)return r;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Js(t=""){return Array.from(fr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function Sy(t="",e=""){return jl(t,e)?.returnType||null}function nd(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function xy(t,e){const n=Js(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>nd(l)===r)||n.length>1)return null;const[o]=n,a=`${nd(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function Ul(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function Iy(t,e,n=""){const i=jl(e,n)?.functionName;if(!i)return null;const r=String(t||"").split("/").pop(),s=Dl(r,"A");if(s===i)return null;const o=`${Ul(i)}.dart`;return`File name "${r}" does not match Action "${i}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function ky(t="",e=""){return jl(t,e)!==null}function Cy(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(i=>py.has(i)?!1:!gy.some(s=>i.endsWith(s))||e.has(i))}function Ay(t,{functionName:e="",declaredTypes:n=new Set}={}){const i=Sy(t,e),r=Cy(i,n);if(r.length===0)return null;const[s]=r;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:i===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${i}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function Py(t,e={}){const n=[],i=t.fileName||"",r=t.code||"";if(hy.has(t.artifactType)||n.push(At(t,"error",`Unsupported artifact type "${t.artifactType}".`)),i.endsWith(".dart")||n.push(At(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(At(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(At(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of by(r))n.push(At(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!ky(r,t.artifactName)&&n.push(At(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Js(r)),o=Ay(r,{functionName:t.artifactName,declaredTypes:s});o&&n.push(At(t,"error",o));const a=Iy(i,r,t.artifactName);a&&n.push(At(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(At(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=xy(i,r);s&&n.push(At(t,"info",s))}return n}function Fy(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Js(s.code||""))),i=e.flatMap(s=>Py(s,{declaredTypes:n})),r=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:ed[s.artifactType]||ed.CodeFile}));return{valid:i.every(s=>s.severity!=="error"),findings:i,deployHints:r}}const id="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function rd(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Ry(t=""){const e=t.indexOf(id);return e===-1?t:t.slice(e+id.length).replace(/^\s*\n/,"")}const Ty=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function $y(t="",e=""){const n=Ry(t),i=new Set((e.match(/^\s*import .*$/gm)||[]).map(rd).filter(Boolean)),r=n.split(` +`).filter(s=>{const o=rd(s);return o===null||!i.has(o)?!0:!Ty.test(s)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const My=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","flutter_web_plugins","integration_test","sky_engine"]);function Ly(t){let e="",n=0;for(;n{const i=n.name||n.package;if(!i||i==="flutter")return e;const r=n.versionRequired||n.required;return e[i]=r&&n.version||"",e},{})}function Wy(t){const e=new Map,n=new Map,i=[];for(const r of t)e.has(r.fileName)?i.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?i.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return i}function qy(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(h=>h.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];r.forEach(p=>{const h=Hy(p),g=p.fixedCode||p.code||"",m=p.codeType||jy[p.artifactType]||st.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:h,content:g,type:m,path:p.deployPath||Uy(h,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,h)=>({entry:p,index:h})).filter(({entry:p})=>p.type===st.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],h={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} ${m.content}`).join(` -`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,v)=>!g.has(v)),o[p.index]=h}const u={...qu(t?.dependencies),...r.reduce((p,h)=>({...p,...qu(h.dependencies)}),{})},c={};r.forEach(p=>{Pl(p.fixedCode||p.code||"").forEach(h=>{h in u||(c[h]="")})});const d={...c,...u},f=Ay(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:f}}function Fy(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Ry(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function Ty(t,e){const i=[Ry(t),Fy(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!i)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return i}function $y(t,e=new Map){const n=[];for(const[i,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||i,className:Ty(i,r),content:r.content,fileName:i,path:r.path});return n}function My(t,e){const n=new Set(e.map(i=>i.path));return new Map(Array.from(t.entries()).filter(([,i])=>!n.has(i.path)))}const zu={pass:0,warning:1,fail:2},Ly=["manualActions"];function ut(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Yt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(i=>typeof i=="string").join(` -`);if(n)return n}}return""}function At(t){return t==null?[]:Array.isArray(t)?t:[t]}function Ny(t){const e=ut(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return Vu(n);const i=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return i?Vu(Number(i[1])):null}function Vu(t){return t>=0&&t<=100?t:null}function ht(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Fl(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function ja(...t){return t.filter(Boolean).reduce((e,n)=>zu[n]>zu[e]?n:e,"pass")}function Sh(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const i=ut(t),r=Yt(i.message,i.title,i.issue,i.description,i.summary);return r?{severity:Fl(i.severity||i.status||i.level)||e,message:r,suggestion:Yt(i.suggestion,i.fix,i.recommendation,i.action),source:i.source||n}:null}function Ua(t,e="review"){const n=ut(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,s])=>At(n[r]).map(o=>Sh(o,s,e)).filter(Boolean))}function Oy(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const i=ut(t),r=Yt(i.title,i.action,i.step,i.message,i.name,i.description);return r?{id:i.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:Yt(i.detail,i.instructions,i.description),location:Yt(i.location,i.flutterFlowPath,i.path),timing:Yt(i.timing,i.phase)||"unspecified",artifactId:n,source:Yt(i.source)||"Code Review"}:null}function Ha(t,e=null){const n=ut(t);return Ly.flatMap(i=>At(n[i])).map((i,r)=>Oy(i,r,e)).filter(Boolean)}function By(t){let e=typeof t=="string"?Ba(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=ut(e);typeof n.content=="string"&&(e=Ba(n.content)||e);const i=ut(e),r=ut(i.reviewResult||i.codeReview||i.result);return{rawText:"",root:Object.keys(r).length?r:i}}function Dy(t,e){const n=[e.id,e.fileName,e.artifactName].map(ht);return t.find(i=>{const r=ut(i);return[r.id,r.fileName,r.artifactName,r.name].map(ht).some(s=>s&&n.includes(s))})||null}function jy(t,e){return At(t?.metadata?.compatibility?.deployHints).find(r=>ht(r?.artifactId)===ht(e.id)||ht(r?.fileName)===ht(e.fileName))?.pathHint||""}function Uy(t,e){return At(t?.relationships).filter(n=>ht(n?.from)===ht(e.id)||ht(n?.to)===ht(e.id))}function Hy(t,e){return At(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||ht(n.artifactId)===ht(e.id)).map(n=>Sh(n,"warning","Compatibility check")).filter(Boolean)}function Wy(t,e,n,i){const r=Dy(e,n),s=ut(r?.review||r||n.review),o=Object.keys(s).length>0,a=[...Ua(s),...Hy(t,n)],l=Ha(s,n.id),u=Fl(s.status||s.verdict||s.outcome||s.result),c=a.length?ja(...a.map(f=>f.severity)):null,d=ja(u,c,o?null:"warning");return{...n,index:i,status:d,statusReason:o?Yt(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:jy(t,n),relationships:Uy(t,n)}}function qy({status:t,score:e,artifactPresentations:n,manualSteps:i}){const r=n.length;if(r===0&&i.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),i.length&&o.push(`Do before deploy: ${i.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function zy({bundle:t,reviewResult:e}){const n=ut(t),i=At(n.artifacts),{root:r,rawText:s}=By(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(ut).find(x=>Object.keys(x).length)||{},a=At(r.artifacts||r.files||r.reviews),l=i.map((x,y)=>Wy(n,a,x,y)),u=Ua(r),d=[...Ua(o),...u],f=[...Ha(o),...Ha(r),...l.flatMap(x=>x.manualSteps)].filter((x,y,E)=>E.findIndex(k=>k.title===x.title&&k.artifactId===x.artifactId)===y),p=Fl(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),h=ja(p,...d.map(x=>x.severity),...l.map(x=>x.status)),g=o.score??r.score??r.overallScore??s,m=Ny(g),v=Yt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,s)||qy({status:h,score:m,artifactPresentations:l,manualSteps:f}),b=l.reduce((x,y)=>(x[y.status]+=1,x),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:h,score:m,summary:v,findings:d,manualSteps:f,artifacts:l,counts:b,reviewCoverage:{reviewed:l.filter(x=>x.reviewComplete).length,total:l.length},deployOrder:At(n.deployOrder),relationships:At(n.relationships),warnings:At(n.warnings),compatibility:ut(n.metadata?.compatibility)}}const Vy=/^\uFEFF/;function Mi(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` -`)}function Gy(t){const e=String(t??"").replace(Vy,"");if(!e.trim())return"";const n=e.split(` -`),i=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,s<0&&(s=d),o.push(c+f)),c+=n[d].length+1}}if(r===0)return Mi(n);{const c=Wa(e);if(!c.error&&o.every(f=>Ku(f,c.commentAndStringRanges)))return Mi(n)}if(r===1){const c=Mi(n.slice(0,s)),d=Mi(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cm));o=o.filter((m,v)=>!g.has(v)),o[p.index]=h}const u={...sd(t?.dependencies),...r.reduce((p,h)=>({...p,...sd(h.dependencies)}),{})},c={};r.forEach(p=>{Hl(p.fixedCode||p.code||"").forEach(h=>{h in u||(c[h]="")})});const d={...c,...u},f=Wy(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:f}}function zy(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Vy(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function Gy(t,e){const i=[Vy(t),zy(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!i)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return i}function Ky(t,e=new Map){const n=[];for(const[i,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||i,className:Gy(i,r),content:r.content,fileName:i,path:r.path});return n}function Yy(t,e){const n=new Set(e.map(i=>i.path));return new Map(Array.from(t.entries()).filter(([,i])=>!n.has(i.path)))}const od={pass:0,warning:1,fail:2},Jy=["manualActions"];function ft(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function tn(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(i=>typeof i=="string").join(` +`);if(n)return n}}return""}function Ft(t){return t==null?[]:Array.isArray(t)?t:[t]}function Zy(t){const e=ft(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return ad(n);const i=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return i?ad(Number(i[1])):null}function ad(t){return t>=0&&t<=100?t:null}function gt(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Wl(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function Ja(...t){return t.filter(Boolean).reduce((e,n)=>od[n]>od[e]?n:e,"pass")}function Bh(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const i=ft(t),r=tn(i.message,i.title,i.issue,i.description,i.summary);return r?{severity:Wl(i.severity||i.status||i.level)||e,message:r,suggestion:tn(i.suggestion,i.fix,i.recommendation,i.action),source:i.source||n}:null}function Za(t,e="review"){const n=ft(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,s])=>Ft(n[r]).map(o=>Bh(o,s,e)).filter(Boolean))}function Xy(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const i=ft(t),r=tn(i.title,i.action,i.step,i.message,i.name,i.description);return r?{id:i.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:tn(i.detail,i.instructions,i.description),location:tn(i.location,i.flutterFlowPath,i.path),timing:tn(i.timing,i.phase)||"unspecified",artifactId:n,source:tn(i.source)||"Code Review"}:null}function Xa(t,e=null){const n=ft(t);return Jy.flatMap(i=>Ft(n[i])).map((i,r)=>Xy(i,r,e)).filter(Boolean)}function Qy(t){let e=typeof t=="string"?Ka(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=ft(e);typeof n.content=="string"&&(e=Ka(n.content)||e);const i=ft(e),r=ft(i.reviewResult||i.codeReview||i.result);return{rawText:"",root:Object.keys(r).length?r:i}}function e_(t,e){const n=[e.id,e.fileName,e.artifactName].map(gt);return t.find(i=>{const r=ft(i);return[r.id,r.fileName,r.artifactName,r.name].map(gt).some(s=>s&&n.includes(s))})||null}function t_(t,e){return Ft(t?.metadata?.compatibility?.deployHints).find(r=>gt(r?.artifactId)===gt(e.id)||gt(r?.fileName)===gt(e.fileName))?.pathHint||""}function n_(t,e){return Ft(t?.relationships).filter(n=>gt(n?.from)===gt(e.id)||gt(n?.to)===gt(e.id))}function i_(t,e){return Ft(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||gt(n.artifactId)===gt(e.id)).map(n=>Bh(n,"warning","Compatibility check")).filter(Boolean)}function r_(t,e,n,i){const r=e_(e,n),s=ft(r?.review||r||n.review),o=Object.keys(s).length>0,a=[...Za(s),...i_(t,n)],l=Xa(s,n.id),u=Wl(s.status||s.verdict||s.outcome||s.result),c=a.length?Ja(...a.map(f=>f.severity)):null,d=Ja(u,c,o?null:"warning");return{...n,index:i,status:d,statusReason:o?tn(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:t_(t,n),relationships:n_(t,n)}}function s_({status:t,score:e,artifactPresentations:n,manualSteps:i}){const r=n.length;if(r===0&&i.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),i.length&&o.push(`Do before deploy: ${i.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function o_({bundle:t,reviewResult:e}){const n=ft(t),i=Ft(n.artifacts),{root:r,rawText:s}=Qy(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(ft).find(E=>Object.keys(E).length)||{},a=Ft(r.artifacts||r.files||r.reviews),l=i.map((E,y)=>r_(n,a,E,y)),u=Za(r),d=[...Za(o),...u],f=[...Xa(o),...Xa(r),...l.flatMap(E=>E.manualSteps)].filter((E,y,S)=>S.findIndex(I=>I.title===E.title&&I.artifactId===E.artifactId)===y),p=Wl(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),h=Ja(p,...d.map(E=>E.severity),...l.map(E=>E.status)),g=o.score??r.score??r.overallScore??s,m=Zy(g),v=tn(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,s)||s_({status:h,score:m,artifactPresentations:l,manualSteps:f}),x=l.reduce((E,y)=>(E[y.status]+=1,E),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:h,score:m,summary:v,findings:d,manualSteps:f,artifacts:l,counts:x,reviewCoverage:{reviewed:l.filter(E=>E.reviewComplete).length,total:l.length},deployOrder:Ft(n.deployOrder),relationships:Ft(n.relationships),warnings:Ft(n.warnings),compatibility:ft(n.metadata?.compatibility)}}const a_=/^\uFEFF/;function Di(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` +`)}function l_(t){const e=String(t??"").replace(a_,"");if(!e.trim())return"";const n=e.split(` +`),i=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,s<0&&(s=d),o.push(c+f)),c+=n[d].length+1}}if(r===0)return Di(n);{const c=Qa(e);if(!c.error&&o.every(f=>cd(f,c.commentAndStringRanges)))return Di(n)}if(r===1){const c=Di(n.slice(0,s)),d=Di(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` +${d}`,{commentAndStringRanges:g}=Qa(h),m=p.length+1+f;if(cd(m,g)){l.push(d);continue}a.push(Di(l)),l=null}const u=a.filter(c=>c.length>0);return u.length===0?"":u.join(` -`)}function Ky(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function xh(t){const e=Ky(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function Ih(t){return`${Al(t)}.dart`}function Yy(t){return kl(t,"W")}const Gu={"(":")","[":"]","{":"}"},Jy={")":"(","]":"[","}":"{"},Zy=/[A-Za-z0-9_]/;function Wa(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let i=1,r=0;const s=(c,d)=>{(c===` +`)}function c_(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function Dh(t){const e=c_(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function jh(t){return`${Ul(t)}.dart`}function u_(t){return Dl(t,"W")}const ld={"(":")","[":"]","{":"}"},d_={")":"(","]":"[","}":"{"},f_=/[A-Za-z0-9_]/;function Qa(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let i=1,r=0;const s=(c,d)=>{(c===` `||c==="\r"&&d!==` `)&&i++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&n.push({start:c.startIndex,end:t.length})};for(;r0?t[r-1]:"",h=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!Zy.test(h);e.push({kind:"string",quote:c,triple:f,raw:g,startIndex:r,openedLine:i}),r+=f?3:1;continue}if(Gu[c]){e.push({kind:"code",opener:c,openedLine:i}),r++;continue}if(Jy[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&Gu[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${i}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${i}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function Xy(t){return Wa(String(t??"")).error}function Ku(t,e){return e.some(({start:n,end:i})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const Qy=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],e_="MAGIC_LINK_SENT",t_="PLUS_ALIAS_REJECTED",n_="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Ws={allowlistedDomains:Qy,successCode:e_,validationCode:t_,messageTemplate:n_},i_=new Set(Ws.allowlistedDomains),r_=Ws.successCode,kh=Ws.validationCode;function qs(t){return typeof t=="string"?t.trim():""}function s_(t){const e=qs(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const i=e.slice(0,n),r=e.slice(n+1).toLowerCase();return i_.has(r)?i.includes("+"):!1}function o_(t,e){return Ws.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function Ch(t){if(!s_(t))return null;const e=qs(t),n=e.lastIndexOf("@"),i=e.slice(n+1).toLowerCase();return o_(e,i)}function Ah(t,e){return t?.code===kh?t.message||Ch(e)||"Please enter your primary email address.":t?.code===r_||!t?.code?`Check your email — we sent a link to ${qs(e)}`:t.message||"Something went wrong. Please try again."}const a_="ccc_auth_session",l_="ccc_subscription",c_=Object.freeze(["hasSeenWalkthrough"]);function u_(t){const e=[];for(const n of c_)t.getItem(n)!==null&&(t.removeItem(n),e.push(n));return e}function d_(){return[a_,l_]}function f_({storage:t,onIdentityChanged:e,onPlanChanged:n}){for(const i of d_())t.removeItem(i);typeof e=="function"&&e(),typeof n=="function"&&n()}function h_({sendLink:t,getEmail:e,onState:n}){let i=!1;return async function(){if(i)return{status:"busy"};i=!0;let s;try{n({status:"pending",error:null});const o=await t(e());return s={status:"sent",data:o},n({status:"sent",data:o}),s}catch(o){return s={status:"error",error:o},n({status:"error",error:o}),s}finally{i=!1}}}const p_=/^dependencies\s*:\s*(?:#.*)?$/,g_=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function pr(t){const e=t.match(g_);return e?e[1]??e[2]??e[3]:null}function gr(t){const e=t.trim();return e===""||e.startsWith("#")}function gn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function Tl(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let i=n,r=null;for(let s=n+1;su&&/\s/.test(s[c-1]);)c-=1}return t[r]=s.slice(0,u)+Ml(n)+s.slice(c),!0}return!1}function Yu(t,e,n){if(n&&typeof n=="object"&&n.sdk)return[`${t}${e}:`,`${t} sdk: ${n.sdk}`];const i=String(n||"").trim();return[`${t}${e}: ${i?Ml(i):">=0.0.0"}`]}function __(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(i.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(` -`),s=new Set(Mh(n)),o=[],a=[];for(const[u,c]of i)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=$l(r);if(l){const u=o.flatMap(([c,d])=>Yu(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(...Yu(" ",u,c))});return{yaml:r.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function w_(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(i.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(` -`),s=zs(n),o=[],a=[];for(const[l,u]of i){const c=s.get(l),d=c&&!c.isScalar&&c.sourceKey===null&&c.version!==null;if(!c||!c.isScalar&&!d||!String(u||"").trim()){a.push(l);continue}if(d){y_(r,c,String(u).trim())?o.push({name:l,from:c.version,to:u}):a.push(l);continue}const f=" ".repeat(gn(r[c.lineIndex]));r[c.lineIndex]=`${f}${l}: ${Ml(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(` -`),overridden:o,skipped:a}}function Nh(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),$l(e.split(` -`))||n.push("pubspec.yaml missing dependencies section"),Mh(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const b_=">=3.0.0 <4.0.0";function qa(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function E_(t=""){const e=xy(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function Ju(t,e,n){const i=[];for(const[r,s]of t){if(s.isScalar){e[r]=qa(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(r);continue}if(s.sourceKey===null&&s.version){e[r]=qa(s.version);continue}i.push(r)}return i}function S_(t){const e=new Set,n=new Set,i={},r={},s=Ju(zs(t),i,e),o=Ju(m_(t,"dependency_overrides"),r,n),a=[...s,...o],l=new Set([...Object.keys(i),...e]),{sdk:u}=Lh(t);return{sdkConstraint:qa(u)||b_,dependencies:i,dependencyOverrides:r,sdkPackages:[...e].sort(),sdkOverrides:[...n].sort(),availablePackages:l,unrepresentable:a,unrepresentableOverrides:o}}function x_(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function I_(t,e){const{sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o,availablePackages:a,unrepresentable:l}=S_(e),u={sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o},c=[],d=[],f=l.map(p=>`Your project declares ${p} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${p}. Classes that do not import ${p} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const p of t){const{className:h,content:g}=p,m=Pl(g),v=m.filter(y=>l.includes(y));if(v.length>0){d.push({className:h,reason:`${h} was not compiled before deploying: it imports ${v.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:b}=E_(g),x=m.filter(y=>!a.has(y));if(b.length>0||x.length>0){d.push({className:h,reason:x_(h,b,x)});continue}c.push({fileName:`${Al(h)}.dart`,content:g})}return{manifest:u,sources:c,skipped:d,approximate:f}}function Zu(t,e){const n=`${t}${e}`.split(` -`),i=n.pop()??"",r=[];for(const s of n){const o=Oh(s);o&&r.push(o)}return{events:r,buffer:i}}function k_(t){const e=Oh(t);return e?[e]:[]}function Oh(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}const Be=Object.freeze({COMMITTED:"committed",PARTIAL:"partial",FAILED:"failed",UNCONFIRMED:"unconfirmed"}),Bh=12e4,Dh=1e4;function jh(t){return t?.unconfirmed===!0||t?.outcome===Be.UNCONFIRMED?Be.UNCONFIRMED:t?.partial===!0||t?.outcome===Be.PARTIAL?Be.PARTIAL:t?.success===!0?Be.COMMITTED:Be.FAILED}class rt extends Error{constructor(e){super(e),this.name="UnconfirmedDeployError",this.outcome=Be.UNCONFIRMED}}function Xu({httpStatus:t}={}){return new rt(`Every FlutterFlow sync endpoint lost its response or ended in a server error${t?` (last: HTTP ${t})`:""} — neither can prove the push was refused, so it may already have been applied. Open the FlutterFlow project to reconcile before retrying.`)}async function C_(t,e={}){const{onPhase:n,onLog:i}=e;let r=null,s=null,o="";const a=u=>{if(u.event==="phase"){u.phase&&(s=u.phase),u.message&&n&&n(u.message);return}if(u.event==="log"){u.message&&i&&i(u.message);return}r=u};let l=null;try{if(t.body?.getReader){const u=t.body.getReader(),c=new TextDecoder;for(;;){const{done:d,value:f}=await u.read();if(d)break;const p=Zu(o,c.decode(f,{stream:!0}));o=p.buffer,p.events.forEach(a)}}else{const u=Zu("",await t.text());o=u.buffer,u.events.forEach(a)}}catch(u){l=u}return k_(o).forEach(a),r?{...r,success:r.success===!0||r.success===void 0&&t.ok,finalResultReceived:!0,runnerPhase:s,httpStatus:t.status}:{success:!1,finalResultReceived:!1,httpRejected:!t.ok,httpStatus:t.status,runnerPhase:s,error:t.ok?l?"The connection to the FlutterFlow deploy runner dropped before it reported a result.":"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const A_=new Set(["connected","workspace_init","workspace_ready","verifying"]);function Uh(t){return t?.preWrite===!0||Array.isArray(t?.analyzerErrors)&&t.analyzerErrors.length>0?!0:typeof t?.runnerPhase=="string"?A_.has(t.runnerPhase):typeof t?.httpStatus=="number"?t.httpStatus>=400&&t.httpStatus<500:!1}function Qu(t){if(t?.finalResultReceived){const e=jh(t);return e===Be.FAILED&&!Uh(t)?Be.UNCONFIRMED:e}return t?.httpRejected&&typeof t.httpStatus=="number"&&t.httpStatus>=400&&t.httpStatus<500?Be.FAILED:Be.UNCONFIRMED}function P_(){let t=document.getElementById("fx-grid");if(!t)return null;const e=window.matchMedia("(prefers-reduced-motion: reduce)"),n=window.matchMedia("(pointer: none)");let i=t.getContext("webgl2",{alpha:!0,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"low-power"}),r=i?null:t.getContext("2d");if(!i&&!r)return null;const s='',o=`#version 300 es +`){n.push({start:d.startIndex,end:r}),o??=`line ${i}: string starting on line ${d.openedLine} is never closed`,e.pop();continue}if(!d.raw&&c==="\\"){s(t[r+1]??"",t[r+2]??""),r+=2;continue}if(!d.raw&&c==="$"&&t[r+1]==="{"){e.push({kind:"code",opener:null,interpolation:!0}),r+=2;continue}const f=d.triple?3:1;if(c===d.quote&&t.slice(r,r+f)===d.quote.repeat(f)){n.push({start:d.startIndex,end:r+f}),e.pop(),r+=f;continue}s(c,t[r+1]),r++;continue}if(c==="/"&&t[r+1]==="/"){e.push({kind:"line-comment",startIndex:r}),r+=2;continue}if(c==="/"&&t[r+1]==="*"){e.push({kind:"block-comment",startIndex:r,openedLine:i,depth:1}),r+=2;continue}if(c==="'"||c==='"'){const f=t.slice(r,r+3)===c.repeat(3),p=r>0?t[r-1]:"",h=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!f_.test(h);e.push({kind:"string",quote:c,triple:f,raw:g,startIndex:r,openedLine:i}),r+=f?3:1;continue}if(ld[c]){e.push({kind:"code",opener:c,openedLine:i}),r++;continue}if(d_[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&ld[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${i}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${i}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function h_(t){return Qa(String(t??"")).error}function cd(t,e){return e.some(({start:n,end:i})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const p_=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],g_="MAGIC_LINK_SENT",m_="PLUS_ALIAS_REJECTED",v_="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Zs={allowlistedDomains:p_,successCode:g_,validationCode:m_,messageTemplate:v_},y_=new Set(Zs.allowlistedDomains),__=Zs.successCode,w_=Zs.validationCode;function Xs(t){return typeof t=="string"?t.trim():""}function b_(t){const e=Xs(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const i=e.slice(0,n),r=e.slice(n+1).toLowerCase();return y_.has(r)?i.includes("+"):!1}function E_(t,e){return Zs.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function Uh(t){if(!b_(t))return null;const e=Xs(t),n=e.lastIndexOf("@"),i=e.slice(n+1).toLowerCase();return E_(e,i)}function zl(t){return!t||typeof t!="object"||Array.isArray(t)||t.success===!1||t.error?!1:t.code?t.code===__:t.success===!0||typeof t.message=="string"}function Hh(t,e){return t?.code===w_?t.message||Uh(e)||"Please enter your primary email address.":zl(t)?`Check your email — we sent a link to ${Xs(e)}`:t?.message||"Something went wrong. Please try again."}const S_="ccc_auth_session",x_="ccc_subscription",I_=Object.freeze(["hasSeenWalkthrough"]);function k_(t){const e=[];for(const n of I_)t.getItem(n)!==null&&(t.removeItem(n),e.push(n));return e}function C_(){return[S_,x_]}function A_({storage:t,onIdentityChanged:e,onPlanChanged:n}){for(const i of C_())t.removeItem(i);typeof e=="function"&&e(),typeof n=="function"&&n()}function P_(t){const e=t?.message||t?.error;return typeof e=="string"&&e.trim()?e.trim():"The server could not send the link."}function F_({sendLink:t,getEmail:e,onState:n}){let i=!1;return async function(){if(i)return{status:"busy"};i=!0;let s;try{n({status:"pending",error:null});const o=await t(e());if(!zl(o))throw new Error(P_(o));return s={status:"sent",data:o},n({status:"sent",data:o}),s}catch(o){return s={status:"error",error:o},n({status:"error",error:o}),s}finally{i=!1}}}const R_=/^dependencies\s*:\s*(?:#.*)?$/,T_=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function br(t){const e=t.match(T_);return e?e[1]??e[2]??e[3]:null}function Er(t){const e=t.trim();return e===""||e.startsWith("#")}function En(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function Vl(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let i=n,r=null;for(let s=n+1;su&&/\s/.test(s[c-1]);)c-=1}return t[r]=s.slice(0,u)+Kl(n)+s.slice(c),!0}return!1}function ud(t,e,n){if(n&&typeof n=="object"&&n.sdk)return[`${t}${e}:`,`${t} sdk: ${n.sdk}`];const i=String(n||"").trim();return[`${t}${e}: ${i?Kl(i):">=0.0.0"}`]}function N_(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(i.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(` +`),s=new Set(Kh(n)),o=[],a=[];for(const[u,c]of i)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=Gl(r);if(l){const u=o.flatMap(([c,d])=>ud(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(...ud(" ",u,c))});return{yaml:r.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function O_(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(i.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(` +`),s=Qs(n),o=[],a=[];for(const[l,u]of i){const c=s.get(l),d=c&&!c.isScalar&&c.sourceKey===null&&c.version!==null;if(!c||!c.isScalar&&!d||!String(u||"").trim()){a.push(l);continue}if(d){L_(r,c,String(u).trim())?o.push({name:l,from:c.version,to:u}):a.push(l);continue}const f=" ".repeat(En(r[c.lineIndex]));r[c.lineIndex]=`${f}${l}: ${Kl(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(` +`),overridden:o,skipped:a}}function Jh(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),Gl(e.split(` +`))||n.push("pubspec.yaml missing dependencies section"),Kh(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const B_=">=3.0.0 <4.0.0";function el(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function D_(t=""){const e=Dy(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function dd(t,e,n){const i=[];for(const[r,s]of t){if(s.isScalar){e[r]=el(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(r);continue}if(s.sourceKey===null&&s.version){e[r]=el(s.version);continue}i.push(r)}return i}function j_(t){const e=new Set,n=new Set,i={},r={},s=dd(Qs(t),i,e),o=dd($_(t,"dependency_overrides"),r,n),a=[...s,...o],l=new Set([...Object.keys(i),...e]),{sdk:u}=Yh(t);return{sdkConstraint:el(u)||B_,dependencies:i,dependencyOverrides:r,sdkPackages:[...e].sort(),sdkOverrides:[...n].sort(),availablePackages:l,unrepresentable:a,unrepresentableOverrides:o}}function U_(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function H_(t,e){const{sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o,availablePackages:a,unrepresentable:l}=j_(e),u={sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o},c=[],d=[],f=l.map(p=>`Your project declares ${p} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${p}. Classes that do not import ${p} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const p of t){const{className:h,content:g}=p,m=Hl(g),v=m.filter(y=>l.includes(y));if(v.length>0){d.push({className:h,reason:`${h} was not compiled before deploying: it imports ${v.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:x}=D_(g),E=m.filter(y=>!a.has(y));if(x.length>0||E.length>0){d.push({className:h,reason:U_(h,x,E)});continue}c.push({fileName:`${Ul(h)}.dart`,content:g})}return{manifest:u,sources:c,skipped:d,approximate:f}}function fd(t,e){const n=`${t}${e}`.split(` +`),i=n.pop()??"",r=[];for(const s of n){const o=Zh(s);o&&r.push(o)}return{events:r,buffer:i}}function W_(t){const e=Zh(t);return e?[e]:[]}function Zh(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}const De=Object.freeze({COMMITTED:"committed",PARTIAL:"partial",FAILED:"failed",UNCONFIRMED:"unconfirmed"}),Xh=12e4,Qh=1e4;function ep(t){return t?.unconfirmed===!0||t?.outcome===De.UNCONFIRMED?De.UNCONFIRMED:t?.partial===!0||t?.outcome===De.PARTIAL?De.PARTIAL:t?.success===!0?De.COMMITTED:De.FAILED}class ot extends Error{constructor(e){super(e),this.name="UnconfirmedDeployError",this.outcome=De.UNCONFIRMED}}function hd({httpStatus:t}={}){return new ot(`Every FlutterFlow sync endpoint lost its response or ended in a server error${t?` (last: HTTP ${t})`:""} — neither can prove the push was refused, so it may already have been applied. Open the FlutterFlow project to reconcile before retrying.`)}async function q_(t,e={}){const{onPhase:n,onLog:i}=e;let r=null,s=null,o="";const a=u=>{if(u.event==="phase"){u.phase&&(s=u.phase),u.message&&n&&n(u.message);return}if(u.event==="log"){u.message&&i&&i(u.message);return}r=u};let l=null;try{if(t.body?.getReader){const u=t.body.getReader(),c=new TextDecoder;for(;;){const{done:d,value:f}=await u.read();if(d)break;const p=fd(o,c.decode(f,{stream:!0}));o=p.buffer,p.events.forEach(a)}}else{const u=fd("",await t.text());o=u.buffer,u.events.forEach(a)}}catch(u){l=u}return W_(o).forEach(a),r?{...r,success:r.success===!0||r.success===void 0&&t.ok,finalResultReceived:!0,runnerPhase:s,httpStatus:t.status}:{success:!1,finalResultReceived:!1,httpRejected:!t.ok,httpStatus:t.status,runnerPhase:s,error:t.ok?l?"The connection to the FlutterFlow deploy runner dropped before it reported a result.":"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const z_=new Set(["connected","workspace_init","workspace_ready","verifying"]);function tp(t){return t?.preWrite===!0||Array.isArray(t?.analyzerErrors)&&t.analyzerErrors.length>0?!0:typeof t?.runnerPhase=="string"?z_.has(t.runnerPhase):typeof t?.httpStatus=="number"?t.httpStatus>=400&&t.httpStatus<500:!1}function pd(t){if(t?.finalResultReceived){const e=ep(t);return e===De.FAILED&&!tp(t)?De.UNCONFIRMED:e}return t?.httpRejected&&typeof t.httpStatus=="number"&&t.httpStatus>=400&&t.httpStatus<500?De.FAILED:De.UNCONFIRMED}function V_(){let t=document.getElementById("fx-grid");if(!t)return null;const e=window.matchMedia("(prefers-reduced-motion: reduce)"),n=window.matchMedia("(pointer: none)");let i=t.getContext("webgl2",{alpha:!0,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"low-power"}),r=i?null:t.getContext("2d");if(!i&&!r)return null;const s='',o=`#version 300 es in vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }`;function a(){return["#version 300 es","precision highp float;","out vec4 o;","uniform vec2 res;","uniform vec2 design;","uniform vec2 mouse;","uniform float energy;","uniform float parallax;","uniform float t;","uniform vec3 ink;","uniform sampler2D mark;","uniform vec2 rot;","const float WARP_A = 0.0032;","void main(){"," vec2 px = gl_FragCoord.xy * (design / res);"," vec2 p = vec2(px.x, design.y - px.y);"," vec2 off = vec2(0.0, -parallax) + vec2(sin(t * 0.11), cos(t * 0.09)) * 7.0;"," vec2 g = p + off;"," vec2 gm = mouse + off;"," float base = min(design.x, design.y);"," float spacing = clamp(base / 10.0, 64.0, 118.0);"," vec2 rel = g - gm;"," float rho = length(rel) + 1e-5;"," vec2 dir = rel / rho;"," vec2 pw = gm + dir * (rho + WARP_A * rho * rho);"," vec2 cell = floor(pw / spacing);"," vec2 cw = (cell + 0.5) * spacing - gm;"," float Rc = length(cw) + 1e-5;"," float rhoC = (-1.0 + sqrt(1.0 + 4.0 * WARP_A * Rc)) / (2.0 * WARP_A);"," vec2 c = gm + (cw / Rc) * rhoC;"," float cellSize = spacing / (1.0 + 2.0 * WARP_A * rhoC);"," float sigma = spacing * 2.9;"," float f = exp(-(rhoC * rhoC) / (2.0 * sigma * sigma));"," float scale = mix(0.32, 1.42, f);"," float weight = smoothstep(0.06, 0.80, f);"," float hs = cellSize * 0.26 * scale;"," vec2 uv = (g - c) / hs;"," vec2 ruv = mat2(rot.x, rot.y, -rot.y, rot.x) * uv;"," float cov = 0.0;"," if (abs(ruv.x) <= 1.0 && abs(ruv.y) <= 1.0) cov = texture(mark, ruv * 0.5 + 0.5).a;"," float s = cov * weight * energy * 0.26;"," o = vec4(ink * s, s);","}"].join(` -`)}let l=null,u,c,d,f,p,h,g,m,v;function b(J,V){if(!i)return null;const D=i.createShader(J);return i.shaderSource(D,V),i.compileShader(D),i.getShaderParameter(D,i.COMPILE_STATUS)?D:(window.console&&console.warn("fx-grid shader: "+i.getShaderInfoLog(D)),null)}if(i){const J=b(i.VERTEX_SHADER,o),V=b(i.FRAGMENT_SHADER,a());if(J&&V&&(l=i.createProgram(),i.attachShader(l,J),i.attachShader(l,V),i.linkProgram(l),i.getProgramParameter(l,i.LINK_STATUS)||(window.console&&console.warn("fx-grid link: "+i.getProgramInfoLog(l)),l=null)),l){i.useProgram(l),i.bindBuffer(i.ARRAY_BUFFER,i.createBuffer()),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),i.STATIC_DRAW);const D=i.getAttribLocation(l,"p");i.enableVertexAttribArray(D),i.vertexAttribPointer(D,2,i.FLOAT,!1,0,0),u=i.getUniformLocation(l,"res"),c=i.getUniformLocation(l,"design"),d=i.getUniformLocation(l,"mouse"),f=i.getUniformLocation(l,"energy"),p=i.getUniformLocation(l,"parallax"),h=i.getUniformLocation(l,"t"),g=i.getUniformLocation(l,"ink"),m=i.getUniformLocation(l,"mark"),v=i.getUniformLocation(l,"rot"),i.enable(i.BLEND),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.clearColor(0,0,0,0)}else{i=null;const D=t.cloneNode(!1);if(t.parentNode.replaceChild(D,t),t=D,r=t.getContext("2d"),!r)return null}}function x(J){if(!J)return null;const V=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(J);if(V){let D=V[1];return D.length===3&&(D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]),[parseInt(D.slice(0,2),16)/255,parseInt(D.slice(2,4),16)/255,parseInt(D.slice(4,6),16)/255]}try{const D=document.createElement("canvas");D.width=1,D.height=1;const pe=D.getContext("2d");pe.fillStyle="rgb(9, 8, 7)";const ke=String(pe.fillStyle);pe.fillStyle=J;const Me=String(pe.fillStyle);if(Me===ke)return null;const mt=/^#([0-9a-f]{6})$/i.exec(Me);if(mt){const vt=mt[1];return[parseInt(vt.slice(0,2),16)/255,parseInt(vt.slice(2,4),16)/255,parseInt(vt.slice(4,6),16)/255]}const Bt=/rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/i.exec(Me);if(Bt)return[Number(Bt[1])/255,Number(Bt[2])/255,Number(Bt[3])/255]}catch{}return null}function y(){let J="";try{const V=getComputedStyle(document.documentElement);J=(V.getPropertyValue("--fx-ink")||"").trim()||(V.getPropertyValue("--fg")||"").trim()}catch{}return x(J)||[.56,.68,.88]}const E=y();let k=1920,R=1080,S=960,F=540,$=960,M=540,L=.66,B=0,Y=-1e9,G=!1,T=0,q=0,se=null,Pe=!1,ee=!1,Ee=!1;const $e=64,ie=15.2;let he=0,ue=0;const Le=.0032,N=0,Z=.56,Fe=.26,Ne=.32,et=.16,Re=.349;let Ce=N;function tt(){const J=t.getBoundingClientRect(),V=t.clientWidth,D=t.clientHeight;if(!J.width||!V||!D)return;const pe=Math.min(window.devicePixelRatio||1,2),ke=Math.max(.2,Math.min(2,J.width/V*pe)),Me=Math.max(2,Math.round(V*ke)),mt=Math.max(2,Math.round(D*ke));(Me!==t.width||mt!==t.height)&&(t.width=Me,t.height=mt,i&&i.viewport(0,0,Me,mt)),k=V,R=D,G||(S=$=k/2,F=M=R/2,G=!0)}function Un(J){!l||!Pe||!i||(i.uniform2f(u,t.width,t.height),i.uniform2f(c,k,R),i.uniform2f(d,S,F),i.uniform1f(f,L),i.uniform1f(p,B),i.uniform2f(v,Math.cos(Ce),Math.sin(Ce)),i.uniform1f(h,J),i.uniform3f(g,E[0],E[1],E[2]),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLES,0,3))}function Ke(J,V,D){const pe=Math.max(0,Math.min(1,(D-J)/(V-J)));return pe*pe*(3-2*pe)}function Hn(J){if(!se||!r)return;const V=r;V.setTransform(1,0,0,1,0,0),V.clearRect(0,0,t.width,t.height);const D=t.width/k;V.setTransform(D,0,0,D,0,0),V.globalAlpha=1;const pe=Math.min(k,R),ke=Math.max(64,Math.min(118,pe/10)),Me=ke*2.9,mt=2*Me*Me,Bt=Math.sin(J*.11)*7,vt=Math.cos(J*.09)*7-B,Er=S+Bt,Sr=F+vt,ho=Me*Math.sqrt(2*Math.log(1/.06)),Si=ho+Le*ho*ho+ke,Qp=Math.floor((Er-Si)/ke)-1,eg=Math.ceil((Er+Si)/ke)+1,tg=Math.floor((Sr-Si)/ke)-1,ng=Math.ceil((Sr+Si)/ke)+1;for(let po=tg;po<=ng;po++){const ig=(po+.5)*ke;for(let go=Qp;go<=eg;go++){const mo=(go+.5)*ke-Er,vo=ig-Sr,yo=Math.sqrt(mo*mo+vo*vo)+1e-5;if(yo>Si)continue;const xr=(-1+Math.sqrt(1+4*Le*yo))/(2*Le),_c=Math.exp(-(xr*xr)/mt),wc=Ke(.06,.8,_c)*L*.26;if(wc<.004)continue;const ln=ke/(1+2*Le*xr)*.26*(.32+1.1*_c),bc=xr/yo,_o=Er+mo*bc,wo=Sr+vo*bc;_o<-ln*1.6||_o>k+ln*1.6||wo<-ln*1.6||wo>R+ln*1.6||(V.globalAlpha=wc,V.save(),V.translate(_o,wo),V.rotate(Ce),V.drawImage(se,-ln,-ln,ln*2,ln*2),V.restore())}}V.globalAlpha=1}function Nt(J){if(!ee)return;const V=q?Math.min(.05,(J-q)/1e3):.016;q=J;const pe=J-Y>2400?.6:1;L+=(pe-L)*Math.min(1,V*3.2);const ke=Math.min(.05,V);he+=(($-S)*$e-he*ie)*ke,ue+=((M-F)*$e-ue*ie)*ke,S+=he*ke,F+=ue*ke,B=(window.scrollY||window.pageYOffset||0)*.55;const Me=J/1e3,mt=S/(k||1)-.5,Bt=F/(R||1)-.5;let vt=mt*(mt>=0?Z:Fe)+Bt*(Bt>=0?Ne:et);vt>Re?vt=Re:vt<-Re&&(vt=-Re),Ce=N+vt-B*6e-4,tt(),i?Un(Me):Hn(Me),T=requestAnimationFrame(Nt)}function Ot(J){if(!ee)return;const V=t.getBoundingClientRect();!V.width||!k||!R||($=(J.clientX-V.left)/V.width*k,M=(J.clientY-V.top)/V.height*R,Y=performance.now())}function gt(){ee||fo||e.matches||n.matches||!Ee||document.hidden||(ee=!0,q=0,T=requestAnimationFrame(Nt))}function an(){ee=!1,T&&(cancelAnimationFrame(T),T=0),q=0}function Ei(){e.matches?(an(),t.classList.remove("is-ready")):Ee&>()}function Wn(){n.matches?an():Ee&>()}function mc(){document.hidden?an():Ee&>()}const vc=new IntersectionObserver(J=>{Ee=J[0]?.isIntersecting||!1,Ee?gt():an()},{threshold:0});vc.observe(t),window.addEventListener("pointermove",Ot,{passive:!0,capture:!0}),window.addEventListener("resize",tt),e.addEventListener("change",Ei),n.addEventListener("change",Wn),document.addEventListener("visibilitychange",mc);function Xp(){const J=(s.match(/\sd="([^"]+)"/)||[])[1],V=document.createElement("canvas");V.width=256,V.height=256;const D=V.getContext("2d");if(J&&window.Path2D){const pe=Math.min(8.533333333333333,8.421052631578947);D.setTransform(pe,0,0,pe,pe+(256-30*pe)/2,-6.4*pe),D.fillStyle="rgb(255,255,255)",D.fill(new Path2D(J),"evenodd"),D.setTransform(1,0,0,1,0,0)}try{const pe=D.getImageData(0,0,256,256),ke=pe.data;for(let Me=3;Meee}}const F_=120;function R_(t,e,n){return tn?n:t}function ge(t,e,n){return R_((t-e)/(n-e),0,1)}function T_(t){return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function Zo(t){return 1-Math.pow(1-t,3)}function Ye(t,e){return e=e===void 0?1.7:e,1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}function ed(t){return 1-Math.pow(2,-9*t)*Math.cos(t*15)}function re(t,e){if(t<=e[0].t)return e[0].v;for(let n=1;n8.2&&y<9.4&&(s*=1-.07*Math.sin(ge(y,8.2,9.4)*Math.PI))}else if(t<53){const y=t-42;g=re(y,[{t:0,v:1},{t:2,v:0},{t:4.2,v:0},{t:4.6,v:1},{t:6.8,v:1},{t:7.4,v:0},{t:9.4,v:0},{t:10.6,v:1}]),h=re(y,[{t:0,v:1},{t:2,v:.3},{t:4.6,v:1,e:Ye}]),d=re(y,[{t:0,v:0},{t:2,v:.3},{t:4.6,v:.16,e:Ye},{t:10.6,v:0}]),p=re(y,[{t:0,v:0},{t:2,v:-40},{t:4.6,v:0,e:Ye}]),o=re(y,[{t:0,v:0},{t:4.6,v:-.12},{t:10.6,v:0}])}else if(t<60){const y=t-53;c=re(y,[{t:0,v:1},{t:.35,v:0},{t:.45,v:0},{t:.7,v:1}]);const E=ge(y,.45,2.2);a=E>0?-2.6*(1-ed(E)):0,g=re(y,[{t:0,v:1},{t:.57,v:0},{t:.67,v:0},{t:.92,v:1}]);const k=ge(y,.67,2.42);f=k>0?-2.6*(1-ed(k)):0,s=1-.05*(Math.sin(ge(y,1.9,2.5)*Math.PI)+Math.sin(ge(y,2.5,3.1)*Math.PI))}else if(t<74){let E=function(F){return[re(F,[{t:0,v:0},{t:.25,v:1},{t:.5,v:1},{t:.72,v:.14},{t:.82,v:.14},{t:1,v:0}]),re(F,[{t:0,v:0},{t:.08,v:-.62},{t:.25,v:-.62},{t:.33,v:.62},{t:.7,v:.62},{t:.82,v:-.62},{t:1,v:-.62}])]};var x=E;const y=t-60,k=1-ge(y,12,14),R=E(ge(y,0,12)),S=E(ge(y-.5,0,12));n=R[0]*k,i=(R[1]+.05*Math.sin(y*7))*k,o=(S[0]-R[0])*.6*k,a=(S[1]-R[1])*.6*k,p=(S[0]-R[0])*30*k,b=ge(y,0,.4)*k}else if(t<85.4){const y=t-74,E=re(y,[{t:0,v:0},{t:4,v:1},{t:8,v:.24},{t:9.6,v:1,e:Ye},{t:11.4,v:0}]);o=E*.5,d=-E*.5,l=re(y,[{t:0,v:0},{t:4,v:6},{t:8,v:20},{t:9.6,v:38,e:Ye},{t:11.4,v:0}]),p=-l*.7,a=re(y,[{t:0,v:0},{t:8,v:0},{t:9.6,v:.4},{t:11.4,v:0}])}else if(t<96.4){const y=t-85.4,E=ge(y,0,5.6),k=ge(y,5.6,7.6),R=.72*Math.min(1,y/.6)*(1-k);d=Math.cos(E*Math.PI*2)*R,f=Math.sin(E*Math.PI*2)*R*.55,p=E*360*(1-k);const S=re(y,[{t:0,v:0},{t:7.6,v:0},{t:8.2,v:1,e:Zo},{t:8.6,v:.55},{t:9.4,v:0}]);o=-.16*S,d+=.16*S,l=-6*S,p+=6*S,s=1+.05*S,m=1+.9*S}else if(t<108.6){const y=t-96.4,E=ge(y,9.6,12.2);n=re(y,[{t:0,v:0},{t:2.1,v:1},{t:4.8,v:.08},{t:7.5,v:1},{t:9.6,v:0}])*(1-E),i=-.35*Math.abs(Math.sin(ge(y,0,9.6)*Math.PI*3))*(1-E);const k=Math.sin(y*6.2)*(1-E);u=1+.12*k,h=1-.12*k,l=k*8,p=-k*8,o=.06*k,d=-.06*k,b=ge(y,0,.4)*(1-E)}else{const y=t-108.6,E=Math.sin(ge(y,0,8)*Math.PI),k=1-ge(y,8,11.4);s=1+.04*E*k,i=-.1*E*k,r=2*E*k,m=1+.5*Math.sin(ge(y,0,6)*Math.PI),v=1+.1*Math.sin(ge(y,0,6)*Math.PI)}return e.x=n,e.y=i,e.rot=r,e.scale=s,e.ax=o,e.ay=a,e.ar=l,e.asc=u,e.afade=c,e.bx=d,e.by=f,e.br=p,e.bsc=h,e.bfade=g,e.hfade=m,e.hsc=v,e.shd=b,e}function $_(t={}){const e=t.arena||document.querySelector(".pipeline-glyph.logo-loop");if(!e)return null;const n=e.querySelector(".loop-mark"),i=e.querySelector(".loop-piece-a"),r=e.querySelector(".loop-piece-b"),s=e.querySelector(".loop-halo"),o=e.querySelector(".loop-shadow");if(!n||!i||!r||!s||!o)return null;const a=t.reducedMotion||window.matchMedia("(prefers-reduced-motion: reduce)"),l=F_;let u=34,c=0,d=0;function f(){u=n.offsetWidth||34,c=Math.max(0,e.offsetWidth-u-4),d=Math.max(0,(e.offsetHeight-u)/2-2),e.style.setProperty("--mark-c",u/2+"px")}function p(T){const q=Math.min(1,Math.max(0,T.x))*c,se=T.y*d;n.style.transform="translate3d("+q.toFixed(2)+"px,"+se.toFixed(2)+"px,0) rotate("+T.rot.toFixed(2)+"deg) scale("+T.scale.toFixed(3)+")",i.style.transform="translate3d("+(T.ax*u).toFixed(2)+"px,"+(T.ay*u).toFixed(2)+"px,0) rotate("+T.ar.toFixed(2)+"deg) scale("+T.asc.toFixed(3)+")",i.style.opacity=T.afade.toFixed(3),r.style.transform="translate3d("+(T.bx*u).toFixed(2)+"px,"+(T.by*u).toFixed(2)+"px,0) rotate("+T.br.toFixed(2)+"deg) scale("+T.bsc.toFixed(3)+")",r.style.opacity=T.bfade.toFixed(3),s.style.transform="scale("+T.hsc.toFixed(3)+")",s.style.opacity=(.09*T.hfade).toFixed(3),o.style.transform="translateX("+q.toFixed(2)+"px) scaleX("+(.75+.4*Math.abs(T.x)).toFixed(3)+")",o.style.opacity=(T.shd*.5).toFixed(3)}let h=0,g=0,m=0,v=!1,b=!1,x=!1,y=0;function E(){return x||a.matches||document.hidden||!e.offsetParent?!1:b}function k(T){if(!v)return;if(m=requestAnimationFrame(k),!E()){S();return}const q=g?(T-g)/1e3:0;g=T,h=(h+Math.min(q,.1))%l,y+=1,p(Li(h))}function R(){v||x||E()&&(v=!0,g=0,m=requestAnimationFrame(k))}function S(){v=!1,m&&(cancelAnimationFrame(m),m=0),g=0}function F(){E()?R():S()}function $(){a.matches?(S(),p(Li(0))):F()}function M(){f(),v&&p(Li(h))}function L(){g=0,F()}const B=new IntersectionObserver(T=>{b=T[0]?T[0].isIntersecting:!1,F()},{threshold:0});B.observe(e),window.addEventListener("resize",M),a.addEventListener("change",$),document.addEventListener("visibilitychange",L);function Y(){x||(x=!0,S(),B.disconnect(),window.removeEventListener("resize",M),a.removeEventListener("change",$),document.removeEventListener("visibilitychange",L))}window.addEventListener("pagehide",Y);function G(T){h=(T%l+l)%l,p(Li(h))}return f(),p(Li(0)),F(),{isRunning:()=>v,currentTime:()=>h,frameCount:()=>y,seek:G,dispose:Y}}const M_=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function tn(t){const e=String(t||"").trim().match(M_);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function L_(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function O_(t){const e=tn(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Ll(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return tn(o)?{min:o,minInclusive:!0,max:O_(o),maxInclusive:!1}:null}if(tn(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},i=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,s;for(;(s=i.exec(e))!==null;){const[,o,a]=s;if(!tn(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function td(t,e){const n=Ll(t);if(!n||!tn(e))return!1;if(n.min!==null){const i=xs(e,n.min);if(i<0||i===0&&!n.minInclusive)return!1}if(n.max!==null){const i=xs(e,n.max);if(i>0||i===0&&!n.maxInclusive)return!1}return!0}function B_(t,e){const n=Ll(t);if(!n||!tn(e))return!1;if(n.max===null)return!0;const i=xs(n.max,e);return i>0?!0:i===0&&n.maxInclusive}function Kn(t){const e=Ll(t);return e?e.min:null}const D_="https://pub.dev/api/packages/",j_=8e3;function U_(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of r){const a=o?.version;if(!a||o.retracted||N_(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!td(l.sdk,n)||i&&l.flutter&&!td(l.flutter,i)||(!s||xs(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function H_(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null,fetchImpl:r=fetch}=e;let s;try{const a=await r(`${D_}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(j_)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=U_(s,{dartSdkFloor:n,flutterSdkFloor:i});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function W_(t,e={}){const n=await Promise.all(t.map(i=>H_(i,e)));return new Map(n.map(({name:i,...r})=>[i,r]))}async function q_(t,e={},n={}){const{resolveVersions:i=W_}=n,r=Object.entries(e).filter(([d])=>d&&d!=="flutter"),s=Lh(t),o={dartSdkFloor:Kn(s.sdk),flutterSdkFloor:Kn(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=zs(t),u=[],c=[];for(const[d,f]of r){const p=l.get(d);if(!p){(_y.has(d)?c:u).push(d);continue}const h=Kn(f);if(!h){a.kept.push({name:d,constraint:p.constraint});continue}const g=p.isScalar?p.constraint:p.sourceKey===null?p.version:null;if(g===null){a.warnings.push(`"${d}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${h}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:d,constraint:p.constraint});continue}if(B_(g,h)){a.kept.push({name:d,constraint:g});continue}a.overrides[d]=`^${h}`,a.warnings.push(`"${d}" was pinned to ${g} in your project, which cannot resolve the ${h} the generated code needs. Raising it to ^${h} — this changes a dependency the rest of your app also uses.`)}for(const d of c)a.additions[d]={sdk:"flutter"};if(u.length>0){const d=await i(u,o);for(const f of u){const p=d.get(f);if(p?.constraint){a.additions[f]=p.constraint;continue}const h=e[f]||"";if(Kn(h)){a.additions[f]=`^${Kn(h)}`,a.warnings.push(`Could not confirm "${f}" version on pub.dev (${p?.error||"lookup failed"}). Using ^${Kn(h)} from the AI's recommendation — verify this is current.`);continue}a.additions[f]=">=0.0.0",a.warnings.push(`Could not determine a version for "${f}" (${p?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const z_={"&":"&","<":"<",">":">",'"':""","'":"'"};function nn(t){return String(t??"").replace(/[&<>"']/g,e=>z_[e])}function W(t){return t?nn(t).replace(/\n/g,"
"):""}function Qt(t){return nn(t).replace(/\r?\n/g," ")}function Vs(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const i=t?.message||"";return i.includes("Code Generator")?2:i.includes("Code Review")?3:1}function Wh(t){if(!t)return{kind:"generic",title:"Generation failed",message:"An unknown error occurred. Please try again.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1};if(t.isModelArmor){const n=t.code==="MODEL_ARMOR_BLOCKED";return{kind:"safety",title:t.userTitle||"Request blocked for safety",message:t.userMessage||t.message,detail:t.retryExplanation||"",canRetry:!n,canEdit:!0,canUpgrade:!1}}if(t.isUsageLimit)return{kind:"quota",title:"Monthly limit reached",message:t.message||"You've used all your generations for this period.",detail:"",canRetry:!1,canEdit:!1,canUpgrade:!0};const e=t.message||"";return/timed out after/i.test(e)?{kind:"timeout",title:"Request timed out",message:"The generation service took too long to respond.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:/unreachable|failed to fetch|load failed|cors/i.test(e)?{kind:"network",title:"Connection problem",message:"We couldn't reach the generation service. Check your connection and try again.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:{kind:"generic",title:"Generation failed",message:e||"An unexpected error occurred.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1}}function V_(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📄"}function G_(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📝"}function K_(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function hi(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function nd(t){return t=nn(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function qh(t,e="dart",n=globalThis.hljs){if(!t)return"";const i=hi(t);try{return n.highlight(i,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(i,{language:"json"}).value}catch{return nn(i)}}}function Gs(t,e={}){const{highlighter:n=globalThis.hljs}=e;let i='
';const r=String(t??"").split(` -`);let s=!1,o="";for(const a of r){if(a.startsWith("```")){if(s){const l=K_(o),u=qh(o.trim(),l,n);i+=`
+`)}let l=null,u,c,d,f,p,h,g,m,v;function x(J,V){if(!i)return null;const D=i.createShader(J);return i.shaderSource(D,V),i.compileShader(D),i.getShaderParameter(D,i.COMPILE_STATUS)?D:(window.console&&console.warn("fx-grid shader: "+i.getShaderInfoLog(D)),null)}if(i){const J=x(i.VERTEX_SHADER,o),V=x(i.FRAGMENT_SHADER,a());if(J&&V&&(l=i.createProgram(),i.attachShader(l,J),i.attachShader(l,V),i.linkProgram(l),i.getProgramParameter(l,i.LINK_STATUS)||(window.console&&console.warn("fx-grid link: "+i.getProgramInfoLog(l)),l=null)),l){i.useProgram(l),i.bindBuffer(i.ARRAY_BUFFER,i.createBuffer()),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),i.STATIC_DRAW);const D=i.getAttribLocation(l,"p");i.enableVertexAttribArray(D),i.vertexAttribPointer(D,2,i.FLOAT,!1,0,0),u=i.getUniformLocation(l,"res"),c=i.getUniformLocation(l,"design"),d=i.getUniformLocation(l,"mouse"),f=i.getUniformLocation(l,"energy"),p=i.getUniformLocation(l,"parallax"),h=i.getUniformLocation(l,"t"),g=i.getUniformLocation(l,"ink"),m=i.getUniformLocation(l,"mark"),v=i.getUniformLocation(l,"rot"),i.enable(i.BLEND),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.clearColor(0,0,0,0)}else{i=null;const D=t.cloneNode(!1);if(t.parentNode.replaceChild(D,t),t=D,r=t.getContext("2d"),!r)return null}}function E(J){if(!J)return null;const V=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(J);if(V){let D=V[1];return D.length===3&&(D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]),[parseInt(D.slice(0,2),16)/255,parseInt(D.slice(2,4),16)/255,parseInt(D.slice(4,6),16)/255]}try{const D=document.createElement("canvas");D.width=1,D.height=1;const pe=D.getContext("2d");pe.fillStyle="rgb(9, 8, 7)";const Ce=String(pe.fillStyle);pe.fillStyle=J;const Le=String(pe.fillStyle);if(Le===Ce)return null;const _t=/^#([0-9a-f]{6})$/i.exec(Le);if(_t){const wt=_t[1];return[parseInt(wt.slice(0,2),16)/255,parseInt(wt.slice(2,4),16)/255,parseInt(wt.slice(4,6),16)/255]}const Wt=/rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/i.exec(Le);if(Wt)return[Number(Wt[1])/255,Number(Wt[2])/255,Number(Wt[3])/255]}catch{}return null}function y(){let J="";try{const V=getComputedStyle(document.documentElement);J=(V.getPropertyValue("--fx-ink")||"").trim()||(V.getPropertyValue("--fg")||"").trim()}catch{}return E(J)||[.56,.68,.88]}const S=y();let I=1920,R=1080,b=960,P=540,T=960,M=540,L=.66,B=0,Y=-1e9,G=!1,$=0,q=0,se=null,Fe=!1,ee=!1,Ee=!1;const Me=64,ie=15.2;let he=0,ue=0;const Oe=.0032,N=0,Z=.56,Re=.26,Be=.32,nt=.16,Te=.349;let Ae=N;function it(){const J=t.getBoundingClientRect(),V=t.clientWidth,D=t.clientHeight;if(!J.width||!V||!D)return;const pe=Math.min(window.devicePixelRatio||1,2),Ce=Math.max(.2,Math.min(2,J.width/V*pe)),Le=Math.max(2,Math.round(V*Ce)),_t=Math.max(2,Math.round(D*Ce));(Le!==t.width||_t!==t.height)&&(t.width=Le,t.height=_t,i&&i.viewport(0,0,Le,_t)),I=V,R=D,G||(b=T=I/2,P=M=R/2,G=!0)}function Kn(J){!l||!Fe||!i||(i.uniform2f(u,t.width,t.height),i.uniform2f(c,I,R),i.uniform2f(d,b,P),i.uniform1f(f,L),i.uniform1f(p,B),i.uniform2f(v,Math.cos(Ae),Math.sin(Ae)),i.uniform1f(h,J),i.uniform3f(g,S[0],S[1],S[2]),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLES,0,3))}function Je(J,V,D){const pe=Math.max(0,Math.min(1,(D-J)/(V-J)));return pe*pe*(3-2*pe)}function Yn(J){if(!se||!r)return;const V=r;V.setTransform(1,0,0,1,0,0),V.clearRect(0,0,t.width,t.height);const D=t.width/I;V.setTransform(D,0,0,D,0,0),V.globalAlpha=1;const pe=Math.min(I,R),Ce=Math.max(64,Math.min(118,pe/10)),Le=Ce*2.9,_t=2*Le*Le,Wt=Math.sin(J*.11)*7,wt=Math.cos(J*.09)*7-B,Pr=b+Wt,Fr=P+wt,So=Le*Math.sqrt(2*Math.log(1/.06)),Ai=So+Oe*So*So+Ce,pg=Math.floor((Pr-Ai)/Ce)-1,gg=Math.ceil((Pr+Ai)/Ce)+1,mg=Math.floor((Fr-Ai)/Ce)-1,vg=Math.ceil((Fr+Ai)/Ce)+1;for(let xo=mg;xo<=vg;xo++){const yg=(xo+.5)*Ce;for(let Io=pg;Io<=gg;Io++){const ko=(Io+.5)*Ce-Pr,Co=yg-Fr,Ao=Math.sqrt(ko*ko+Co*Co)+1e-5;if(Ao>Ai)continue;const Rr=(-1+Math.sqrt(1+4*Oe*Ao))/(2*Oe),Mc=Math.exp(-(Rr*Rr)/_t),Lc=Je(.06,.8,Mc)*L*.26;if(Lc<.004)continue;const gn=Ce/(1+2*Oe*Rr)*.26*(.32+1.1*Mc),Nc=Rr/Ao,Po=Pr+ko*Nc,Fo=Fr+Co*Nc;Po<-gn*1.6||Po>I+gn*1.6||Fo<-gn*1.6||Fo>R+gn*1.6||(V.globalAlpha=Lc,V.save(),V.translate(Po,Fo),V.rotate(Ae),V.drawImage(se,-gn,-gn,gn*2,gn*2),V.restore())}}V.globalAlpha=1}function Ut(J){if(!ee)return;const V=q?Math.min(.05,(J-q)/1e3):.016;q=J;const pe=J-Y>2400?.6:1;L+=(pe-L)*Math.min(1,V*3.2);const Ce=Math.min(.05,V);he+=((T-b)*Me-he*ie)*Ce,ue+=((M-P)*Me-ue*ie)*Ce,b+=he*Ce,P+=ue*Ce,B=(window.scrollY||window.pageYOffset||0)*.55;const Le=J/1e3,_t=b/(I||1)-.5,Wt=P/(R||1)-.5;let wt=_t*(_t>=0?Z:Re)+Wt*(Wt>=0?Be:nt);wt>Te?wt=Te:wt<-Te&&(wt=-Te),Ae=N+wt-B*6e-4,it(),i?Kn(Le):Yn(Le),$=requestAnimationFrame(Ut)}function Ht(J){if(!ee)return;const V=t.getBoundingClientRect();!V.width||!I||!R||(T=(J.clientX-V.left)/V.width*I,M=(J.clientY-V.top)/V.height*R,Y=performance.now())}function yt(){ee||Eo||e.matches||n.matches||!Ee||document.hidden||(ee=!0,q=0,$=requestAnimationFrame(Ut))}function pn(){ee=!1,$&&(cancelAnimationFrame($),$=0),q=0}function Ci(){e.matches?(pn(),t.classList.remove("is-ready")):Ee&&yt()}function Jn(){n.matches?pn():Ee&&yt()}function Rc(){document.hidden?pn():Ee&&yt()}const Tc=new IntersectionObserver(J=>{Ee=J[0]?.isIntersecting||!1,Ee?yt():pn()},{threshold:0});Tc.observe(t),window.addEventListener("pointermove",Ht,{passive:!0,capture:!0}),window.addEventListener("resize",it),e.addEventListener("change",Ci),n.addEventListener("change",Jn),document.addEventListener("visibilitychange",Rc);function hg(){const J=(s.match(/\sd="([^"]+)"/)||[])[1],V=document.createElement("canvas");V.width=256,V.height=256;const D=V.getContext("2d");if(J&&window.Path2D){const pe=Math.min(8.533333333333333,8.421052631578947);D.setTransform(pe,0,0,pe,pe+(256-30*pe)/2,-6.4*pe),D.fillStyle="rgb(255,255,255)",D.fill(new Path2D(J),"evenodd"),D.setTransform(1,0,0,1,0,0)}try{const pe=D.getImageData(0,0,256,256),Ce=pe.data;for(let Le=3;Leee}}const G_=120;function K_(t,e,n){return tn?n:t}function ge(t,e,n){return K_((t-e)/(n-e),0,1)}function Y_(t){return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function aa(t){return 1-Math.pow(1-t,3)}function Ze(t,e){return e=e===void 0?1.7:e,1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}function gd(t){return 1-Math.pow(2,-9*t)*Math.cos(t*15)}function re(t,e){if(t<=e[0].t)return e[0].v;for(let n=1;n8.2&&y<9.4&&(s*=1-.07*Math.sin(ge(y,8.2,9.4)*Math.PI))}else if(t<53){const y=t-42;g=re(y,[{t:0,v:1},{t:2,v:0},{t:4.2,v:0},{t:4.6,v:1},{t:6.8,v:1},{t:7.4,v:0},{t:9.4,v:0},{t:10.6,v:1}]),h=re(y,[{t:0,v:1},{t:2,v:.3},{t:4.6,v:1,e:Ze}]),d=re(y,[{t:0,v:0},{t:2,v:.3},{t:4.6,v:.16,e:Ze},{t:10.6,v:0}]),p=re(y,[{t:0,v:0},{t:2,v:-40},{t:4.6,v:0,e:Ze}]),o=re(y,[{t:0,v:0},{t:4.6,v:-.12},{t:10.6,v:0}])}else if(t<60){const y=t-53;c=re(y,[{t:0,v:1},{t:.35,v:0},{t:.45,v:0},{t:.7,v:1}]);const S=ge(y,.45,2.2);a=S>0?-2.6*(1-gd(S)):0,g=re(y,[{t:0,v:1},{t:.57,v:0},{t:.67,v:0},{t:.92,v:1}]);const I=ge(y,.67,2.42);f=I>0?-2.6*(1-gd(I)):0,s=1-.05*(Math.sin(ge(y,1.9,2.5)*Math.PI)+Math.sin(ge(y,2.5,3.1)*Math.PI))}else if(t<74){let S=function(P){return[re(P,[{t:0,v:0},{t:.25,v:1},{t:.5,v:1},{t:.72,v:.14},{t:.82,v:.14},{t:1,v:0}]),re(P,[{t:0,v:0},{t:.08,v:-.62},{t:.25,v:-.62},{t:.33,v:.62},{t:.7,v:.62},{t:.82,v:-.62},{t:1,v:-.62}])]};var E=S;const y=t-60,I=1-ge(y,12,14),R=S(ge(y,0,12)),b=S(ge(y-.5,0,12));n=R[0]*I,i=(R[1]+.05*Math.sin(y*7))*I,o=(b[0]-R[0])*.6*I,a=(b[1]-R[1])*.6*I,p=(b[0]-R[0])*30*I,x=ge(y,0,.4)*I}else if(t<85.4){const y=t-74,S=re(y,[{t:0,v:0},{t:4,v:1},{t:8,v:.24},{t:9.6,v:1,e:Ze},{t:11.4,v:0}]);o=S*.5,d=-S*.5,l=re(y,[{t:0,v:0},{t:4,v:6},{t:8,v:20},{t:9.6,v:38,e:Ze},{t:11.4,v:0}]),p=-l*.7,a=re(y,[{t:0,v:0},{t:8,v:0},{t:9.6,v:.4},{t:11.4,v:0}])}else if(t<96.4){const y=t-85.4,S=ge(y,0,5.6),I=ge(y,5.6,7.6),R=.72*Math.min(1,y/.6)*(1-I);d=Math.cos(S*Math.PI*2)*R,f=Math.sin(S*Math.PI*2)*R*.55,p=S*360*(1-I);const b=re(y,[{t:0,v:0},{t:7.6,v:0},{t:8.2,v:1,e:aa},{t:8.6,v:.55},{t:9.4,v:0}]);o=-.16*b,d+=.16*b,l=-6*b,p+=6*b,s=1+.05*b,m=1+.9*b}else if(t<108.6){const y=t-96.4,S=ge(y,9.6,12.2);n=re(y,[{t:0,v:0},{t:2.1,v:1},{t:4.8,v:.08},{t:7.5,v:1},{t:9.6,v:0}])*(1-S),i=-.35*Math.abs(Math.sin(ge(y,0,9.6)*Math.PI*3))*(1-S);const I=Math.sin(y*6.2)*(1-S);u=1+.12*I,h=1-.12*I,l=I*8,p=-I*8,o=.06*I,d=-.06*I,x=ge(y,0,.4)*(1-S)}else{const y=t-108.6,S=Math.sin(ge(y,0,8)*Math.PI),I=1-ge(y,8,11.4);s=1+.04*S*I,i=-.1*S*I,r=2*S*I,m=1+.5*Math.sin(ge(y,0,6)*Math.PI),v=1+.1*Math.sin(ge(y,0,6)*Math.PI)}return e.x=n,e.y=i,e.rot=r,e.scale=s,e.ax=o,e.ay=a,e.ar=l,e.asc=u,e.afade=c,e.bx=d,e.by=f,e.br=p,e.bsc=h,e.bfade=g,e.hfade=m,e.hsc=v,e.shd=x,e}function J_(t={}){const e=t.arena||document.querySelector(".pipeline-glyph.logo-loop");if(!e)return null;const n=e.querySelector(".loop-mark"),i=e.querySelector(".loop-piece-a"),r=e.querySelector(".loop-piece-b"),s=e.querySelector(".loop-halo"),o=e.querySelector(".loop-shadow");if(!n||!i||!r||!s||!o)return null;const a=t.reducedMotion||window.matchMedia("(prefers-reduced-motion: reduce)"),l=G_;let u=34,c=0,d=0;function f(){u=n.offsetWidth||34,c=Math.max(0,e.offsetWidth-u-4),d=Math.max(0,(e.offsetHeight-u)/2-2),e.style.setProperty("--mark-c",u/2+"px")}function p($){const q=Math.min(1,Math.max(0,$.x))*c,se=$.y*d;n.style.transform="translate3d("+q.toFixed(2)+"px,"+se.toFixed(2)+"px,0) rotate("+$.rot.toFixed(2)+"deg) scale("+$.scale.toFixed(3)+")",i.style.transform="translate3d("+($.ax*u).toFixed(2)+"px,"+($.ay*u).toFixed(2)+"px,0) rotate("+$.ar.toFixed(2)+"deg) scale("+$.asc.toFixed(3)+")",i.style.opacity=$.afade.toFixed(3),r.style.transform="translate3d("+($.bx*u).toFixed(2)+"px,"+($.by*u).toFixed(2)+"px,0) rotate("+$.br.toFixed(2)+"deg) scale("+$.bsc.toFixed(3)+")",r.style.opacity=$.bfade.toFixed(3),s.style.transform="scale("+$.hsc.toFixed(3)+")",s.style.opacity=(.09*$.hfade).toFixed(3),o.style.transform="translateX("+q.toFixed(2)+"px) scaleX("+(.75+.4*Math.abs($.x)).toFixed(3)+")",o.style.opacity=($.shd*.5).toFixed(3)}let h=0,g=0,m=0,v=!1,x=!1,E=!1,y=0;function S(){return E||a.matches||document.hidden||!e.offsetParent?!1:x}function I($){if(!v)return;if(m=requestAnimationFrame(I),!S()){b();return}const q=g?($-g)/1e3:0;g=$,h=(h+Math.min(q,.1))%l,y+=1,p(ji(h))}function R(){v||E||S()&&(v=!0,g=0,m=requestAnimationFrame(I))}function b(){v=!1,m&&(cancelAnimationFrame(m),m=0),g=0}function P(){S()?R():b()}function T(){a.matches?(b(),p(ji(0))):P()}function M(){f(),v&&p(ji(h))}function L(){g=0,P()}const B=new IntersectionObserver($=>{x=$[0]?$[0].isIntersecting:!1,P()},{threshold:0});B.observe(e),window.addEventListener("resize",M),a.addEventListener("change",T),document.addEventListener("visibilitychange",L);function Y(){E||(E=!0,b(),B.disconnect(),window.removeEventListener("resize",M),a.removeEventListener("change",T),document.removeEventListener("visibilitychange",L))}window.addEventListener("pagehide",Y);function G($){h=($%l+l)%l,p(ji(h))}return f(),p(ji(0)),P(),{isRunning:()=>v,currentTime:()=>h,frameCount:()=>y,seek:G,dispose:Y}}const Z_=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function ln(t){const e=String(t||"").trim().match(Z_);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function X_(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function e0(t){const e=ln(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Yl(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return ln(o)?{min:o,minInclusive:!0,max:e0(o),maxInclusive:!1}:null}if(ln(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},i=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,s;for(;(s=i.exec(e))!==null;){const[,o,a]=s;if(!ln(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function md(t,e){const n=Yl(t);if(!n||!ln(e))return!1;if(n.min!==null){const i=Ts(e,n.min);if(i<0||i===0&&!n.minInclusive)return!1}if(n.max!==null){const i=Ts(e,n.max);if(i>0||i===0&&!n.maxInclusive)return!1}return!0}function t0(t,e){const n=Yl(t);if(!n||!ln(e))return!1;if(n.max===null)return!0;const i=Ts(n.max,e);return i>0?!0:i===0&&n.maxInclusive}function ti(t){const e=Yl(t);return e?e.min:null}const n0="https://pub.dev/api/packages/",i0=8e3;function r0(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of r){const a=o?.version;if(!a||o.retracted||Q_(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!md(l.sdk,n)||i&&l.flutter&&!md(l.flutter,i)||(!s||Ts(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function s0(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null,fetchImpl:r=fetch}=e;let s;try{const a=await r(`${n0}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(i0)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=r0(s,{dartSdkFloor:n,flutterSdkFloor:i});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function o0(t,e={}){const n=await Promise.all(t.map(i=>s0(i,e)));return new Map(n.map(({name:i,...r})=>[i,r]))}async function a0(t,e={},n={}){const{resolveVersions:i=o0}=n,r=Object.entries(e).filter(([d])=>d&&d!=="flutter"),s=Yh(t),o={dartSdkFloor:ti(s.sdk),flutterSdkFloor:ti(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Qs(t),u=[],c=[];for(const[d,f]of r){const p=l.get(d);if(!p){(My.has(d)?c:u).push(d);continue}const h=ti(f);if(!h){a.kept.push({name:d,constraint:p.constraint});continue}const g=p.isScalar?p.constraint:p.sourceKey===null?p.version:null;if(g===null){a.warnings.push(`"${d}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${h}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:d,constraint:p.constraint});continue}if(t0(g,h)){a.kept.push({name:d,constraint:g});continue}a.overrides[d]=`^${h}`,a.warnings.push(`"${d}" was pinned to ${g} in your project, which cannot resolve the ${h} the generated code needs. Raising it to ^${h} — this changes a dependency the rest of your app also uses.`)}for(const d of c)a.additions[d]={sdk:"flutter"};if(u.length>0){const d=await i(u,o);for(const f of u){const p=d.get(f);if(p?.constraint){a.additions[f]=p.constraint;continue}const h=e[f]||"";if(ti(h)){a.additions[f]=`^${ti(h)}`,a.warnings.push(`Could not confirm "${f}" version on pub.dev (${p?.error||"lookup failed"}). Using ^${ti(h)} from the AI's recommendation — verify this is current.`);continue}a.additions[f]=">=0.0.0",a.warnings.push(`Could not determine a version for "${f}" (${p?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const l0={"&":"&","<":"<",">":">",'"':""","'":"'"};function cn(t){return String(t??"").replace(/[&<>"']/g,e=>l0[e])}function W(t){return t?cn(t).replace(/\n/g,"
"):""}function on(t){return cn(t).replace(/\r?\n/g," ")}function eo(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const i=t?.message||"";return i.includes("Code Generator")?2:i.includes("Code Review")?3:1}function ip(t){if(!t)return{kind:"generic",title:"Generation failed",message:"An unknown error occurred. Please try again.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1};if(t.isModelArmor){const n=t.code==="MODEL_ARMOR_BLOCKED";return{kind:"safety",title:t.userTitle||"Request blocked for safety",message:t.userMessage||t.message,detail:t.retryExplanation||"",canRetry:!n,canEdit:!0,canUpgrade:!1}}if(t.isUsageLimit)return{kind:"quota",title:"Monthly limit reached",message:t.message||"You've used all your generations for this period.",detail:"",canRetry:!1,canEdit:!1,canUpgrade:!0};const e=t.message||"";return/timed out after/i.test(e)?{kind:"timeout",title:"Request timed out",message:"The generation service took too long to respond.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:/unreachable|failed to fetch|load failed|cors/i.test(e)?{kind:"network",title:"Connection problem",message:"We couldn't reach the generation service. Check your connection and try again.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:{kind:"generic",title:"Generation failed",message:e||"An unexpected error occurred.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1}}function c0(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📄"}function u0(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📝"}function d0(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function wi(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function vd(t){return t=cn(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function rp(t,e="dart",n=globalThis.hljs){if(!t)return"";const i=wi(t);try{return n.highlight(i,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(i,{language:"json"}).value}catch{return cn(i)}}}function to(t,e={}){const{highlighter:n=globalThis.hljs}=e;let i='
';const r=String(t??"").split(` +`);let s=!1,o="";for(const a of r){if(a.startsWith("```")){if(s){const l=d0(o),u=rp(o.trim(),l,n);i+=`
${u}
`,o="",s=!1}else s=!0;continue}if(s){o+=a+` `;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();i+=`

- ${V_(l)} - ${nn(l)} + ${c0(l)} + ${cn(l)}

`;continue}if(a.startsWith("## ")){const l=a.substring(3).trim();i+=`

- ${G_(l)} - ${nn(l)} + ${u0(l)} + ${cn(l)}

`;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();i+=`
• - ${nd(l)} -
`;continue}a.trim()!==""&&(i+=`

${nd(a)}

`)}return i+="
",` + ${vd(l)} +
`;continue}a.trim()!==""&&(i+=`

${vd(a)}

`)}return i+="
",`
@@ -81,14 +81,14 @@ in vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }`;function a(){return[
${i}
- `}const Y_=[[/gradient stroke\s*$/i," and an animated percentage label"],[/gauge\s*$/i," with a gradient stroke and animated fill"],[/rating\s*(bar|widget)?\s*$/i," with half-star support and haptic feedback"],[/list\s*$/i," with swipe-to-delete and an undo snackbar"],[/pad\s*$/i," that exports a transparent PNG"],[/carousel\s*$/i," with parallax cards and page indicators"],[/(button|cta)\s*$/i," with a loading spinner and success state"],[/(chart|graph)\s*$/i," that animates from a Firestore stream"],[/action\s*(that|to)?\s*$/i," uploads an image to Firebase Storage and returns the URL"],[/timer\s*$/i," with pause, resume and a completion callback"],[/map\s*$/i," with clustered markers and a custom info window"],[/^a\s+\w*$/i," widget that"],[/(picker|selector)\s*$/i," with search and multi-select"]],J_=220,Z_=6,X_=5200,Q_=73;function id(t,e){return!!(t&&t.trim())&&!e}function e0(t,e=""){if(typeof t!="string"||!t||t===e||t.trim().lengthi.test(t));return n?n[1]:null}function t0(){let t="",e="";return{get active(){return t},resolve(n){return t=e0(n,e)??"",t},dismiss(){t=""},accept(n){if(!t)return null;const i=n+t;return e=i,t="",i}}}function n0({onSubmit:t}){const e=document.getElementById("composer"),n=document.getElementById("pipeline-input"),i=document.getElementById("hero-send");if(!e||!n||!i||typeof t!="function")return;const r=e.querySelector(".ghost .typed"),s=e.querySelector(".ghost .suggest"),o=document.getElementById("tab-hint"),a=document.getElementById("suggest-status"),l=Array.from(document.querySelectorAll("#example-chips .chip")),u=document.getElementById("btn-add-images"),c=document.getElementById("prompt-image-input"),d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=t0();let p=!1,h=!1,g=!1,m=!1,v=!1,b=null,x=null,y=null;const E=n.value;function k(){return h||g||m||v}function R(){i.disabled=!id(n.value,k())}function S(){r&&(r.textContent=n.value)}function F(){s&&(s.textContent=""),S(),e.classList.remove("has-suggest"),o&&(o.hidden=!0,o.tabIndex=-1),a&&(a.textContent="")}function $(N){s&&(s.textContent=N),S(),e.classList.add("has-suggest"),o&&(o.hidden=!1,o.tabIndex=0,o.setAttribute("aria-label","Accept suggestion: "+N.trim())),a&&(a.textContent="Suggestion: "+N+". Press Tab to accept.")}function M(){f.dismiss(),F()}function L(){if(p||h)return;const N=f.resolve(n.value);N&&$(N)}function B(){clearTimeout(b),!p&&(b=setTimeout(L,J_))}function Y(){const N=f.accept(n.value);return N===null?!1:(n.value=N,F(),R(),!0)}function G(N){h=N,e.classList.toggle("is-busy",N),i.classList.toggle("is-busy",N),i.setAttribute("aria-label",N?"Generating":"Generate"),n.readOnly=N,l.forEach(Z=>{Z.disabled=N}),u&&(u.disabled=N),c&&(c.disabled=N),R()}async function T(){if(id(n.value,k())){M(),G(!0);try{await t()}finally{G(!1)}}}function q(){m&&(m=!1,y&&(clearTimeout(y),y=null),e.classList.remove("is-demo-typing"),e.classList.remove("is-demo-streaming"),n.placeholder="Describe the widget or action you need",R())}function se(){if(d.matches||!E.trim())return;const N=window.location.hash.replace(/^#/,"");if(N&&N!=="home")return;m=!0,n.placeholder="",n.value="",S(),R(),e.classList.add("is-demo-typing");let Z=0;const Fe=()=>{m&&(Z+=1,n.value=E.slice(0,Z),S(),Z>=E.length?(e.classList.remove("is-demo-typing"),y=setTimeout(()=>{const Ne=f.resolve(n.value);if(!Ne){q();return}$(Ne),e.classList.add("is-demo-streaming"),s.textContent="";const et=Ne.split(/(?=\s)/).filter(Boolean);let Re=0;const Ce=()=>{if(!m)return;const tt=document.createElement("span");tt.textContent=et[Re++],s.appendChild(tt),tt.animate?.([{opacity:0},{opacity:1}],{duration:240,easing:"cubic-bezier(0.4,0,0.2,1)"}),ReN.classList.contains("is-active"))?.dataset.prompt||n.value,S(),ee()))}function ee(){g=!1,x&&(clearInterval(x),x=null),e.classList.remove("is-demo-typing"),R()}function Ee(){l.forEach(N=>{N.classList.remove("is-active"),N.setAttribute("aria-pressed","false")})}function $e(){try{n.focus({preventScroll:!0}),n.setSelectionRange(n.value.length,n.value.length)}catch{}}function ie(N){const Z=N.dataset.prompt||"";if(q(),ee(),clearTimeout(b),b=null,M(),l.forEach(Ne=>{const et=Ne===N;Ne.classList.toggle("is-active",et),Ne.setAttribute("aria-pressed",String(et))}),d.matches||!Z){n.value=Z,S(),R(),$e();return}n.value="",S(),g=!0,R(),e.classList.add("is-demo-typing");let Fe=0;x=setInterval(()=>{Fe+=1,n.value=Z.slice(0,Fe),S(),Fe>=Z.length?(ee(),$e()):R()},22)}l.forEach(N=>{N.setAttribute("aria-pressed","false"),N.addEventListener("click",()=>ie(N))}),n.addEventListener("keydown",N=>{if((m||g)&&N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p){N.preventDefault();return}q(),ee(),N.key==="Tab"&&!N.shiftKey&&f.active?(N.preventDefault(),Y()):N.key==="Escape"?(clearTimeout(b),b=null,M()):N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p&&(N.preventDefault(),T())}),n.addEventListener("input",()=>{q(),ee(),Ee(),M(),R(),B()}),n.addEventListener("compositionstart",()=>{p=!0}),n.addEventListener("compositionend",()=>{p=!1,M(),R(),B()}),n.addEventListener("scroll",()=>{r&&r.parentNode&&(r.parentNode.scrollTop=n.scrollTop)}),o&&o.addEventListener("click",()=>{Y(),n.focus({preventScroll:!0})}),i.addEventListener("click",T),n.addEventListener("pointerdown",()=>{q(),ee(),Ee()}),n.addEventListener("focus",()=>{q()}),d.addEventListener("change",Pe);function he(){ue(),d.removeEventListener("change",Pe),document.removeEventListener("visibilitychange",Le),window.removeEventListener("pagehide",he)}function ue(){q(),ee(),clearTimeout(b)}function Le(){document.hidden&&ue()}return document.addEventListener("visibilitychange",Le),window.addEventListener("pagehide",he),S(),R(),se(),{setAttachmentsPending(N){v=!!N,R()},dispose:he,cancelTyping:ue}}const lr=window.matchMedia("(prefers-reduced-motion: reduce)");let ni=null,zt=null;const Is=new Map;function zh(){for(const[t,e]of Is)t.removeEventListener("animationend",e),t.classList.remove("panel-in"),t.style.animationDelay="";Is.clear(),document.querySelectorAll(".code-line.is-in").forEach(t=>t.classList.remove("is-in"))}function Nn(){if(zh(),ni){const t=ni;ni=null,t.animation?.cancel(),t.ghost.remove(),t.panel.style.visibility="",delete t.panel.dataset.morphing,t.panel.inert=!1}zt&&(zt.animation.cancel(),zt.hero.classList.remove("is-exiting"),zt.hero.style.cssText=zt.style,zt=null)}function i0(t){return(ni?.ghost||t)?.getBoundingClientRect()}function r0(t){zh(),t.filter(Boolean).forEach((e,n)=>{if(e.classList.remove("panel-in"),e.style.animationDelay="",lr.matches||document.hidden)return;e.offsetWidth,e.style.animationDelay=`${n*80}ms`,e.classList.add("panel-in");function i(r){r.target===e&&(e.classList.remove("panel-in"),e.style.animationDelay="",e.removeEventListener("animationend",i),Is.delete(e))}Is.set(e,i),e.addEventListener("animationend",i)})}function s0(t,e){if(!t||!e||lr.matches||document.hidden||!t.animate)return;const n=t.style.cssText;t.classList.add("is-exiting"),innerWidth<=920&&(t.style.cssText=`position:absolute;left:0;top:64px;width:${e.width}px;height:${e.height}px;transform:none;`);const i=t.animate([{opacity:1},{opacity:0}],{duration:460,easing:"cubic-bezier(0.4,0,0.2,1)",fill:"both"});zt={hero:t,animation:i,style:n},i.onfinish=()=>{zt?.animation===i&&(t.classList.remove("is-exiting"),t.style.cssText=n,i.cancel(),zt=null)}}function Vh(t,e,n,{results:i=!1}={}){if(Nn(),!e)return;const r=e.getBoundingClientRect(),s=()=>{e.style.visibility="",delete e.dataset.morphing,e.inert=!1,r0(n),(document.activeElement===document.body||document.getElementById("hero")?.contains(document.activeElement))&&e.querySelector(i?"#results-summary-tab":"#pipeline-edit-prompt")?.focus({preventScroll:!0})};if(lr.matches||document.hidden||!e.animate||!t?.width||!r.width||i&&innerWidth<=920){s();return}e.style.visibility="hidden",e.dataset.morphing="true",e.inert=!0;const o=document.createElement("div");o.className="composer-morph",o.setAttribute("aria-hidden","true");const a=innerWidth>920?Math.min(1,innerWidth/1920):1;o.style.cssText=`left:${r.left}px;top:${r.top}px;width:${r.width}px;height:${r.height}px;border-width:${2*a}px;border-radius:${20*a}px;`,document.body.appendChild(o);const l=t.left+t.width/2-r.left-r.width/2,u=t.top+t.height/2-r.top-r.height/2,c=t.width/r.width,d=t.height/r.height,f=`translate(${l}px,${u}px) scale(${c},${d})`,p=o.animate([{transform:f,opacity:0,offset:0,easing:"cubic-bezier(.2,0,0,1)"},{transform:f,opacity:1,offset:.14,easing:"cubic-bezier(.4,0,.2,1)"},{transform:`translate(${l}px,${u}px) scale(${c*.93},${d*.93})`,opacity:1,offset:.28,easing:"cubic-bezier(.32,1.38,.5,1)"},{transform:"translate(0px,0px) scale(1,1)",opacity:1,offset:1}],{duration:1120,fill:"both"}),h={panel:e,ghost:o,animation:p};ni=h,p.onfinish=()=>{ni===h&&(Nn(),s())}}window.addEventListener("resize",Nn);window.addEventListener("pagehide",Nn);document.addEventListener("visibilitychange",()=>{document.hidden&&Nn()});lr.addEventListener("change",()=>{lr.matches&&Nn()});const o0="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Et="https://4tgke4.buildship.run",Gh={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},ks="ccc_auth_session",za="ccc_signin_return",a0=1800*1e3,rd=new WeakSet;let H={email:null,sessionToken:null,isVerified:!1};function On(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=On({isResolved:!0}),Va=Promise.resolve();const l0=`${Et}/service/runpipeline`,c0="bs_user_id",u0="bs_identity_token",d0=`${Et}/authUserCheck`;let yt={userId:null,token:null,status:null,resolved:!1};const Cs=Mv,As="ccc_subscription",sd=3,f0=new Set(["active","trialing","paid"]),Ps="google/gemini-3.7-flash",Gr=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],h0={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function Jt(t){return h0[t]||t}const p0=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Kh(t){return p0.has(t)}const Ga=4,Xo=8*1024*1024,g0="https://4tgke4.buildship.run/service/runpipeline-image";let Ue=[];const mn=[],m0=3e4;let Nl=null;function v0(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function y0(t,e){const n=new FormData;return n.append("file",t),(await fetch(g0,{method:"POST",body:n,signal:e})).json()}function _0(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const i=e[n];if(i&&typeof i=="object"){if(typeof i.file=="string")return i.file;if(typeof i.url=="string")return i.url}if(typeof i=="string")return i}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function w0(t,e,n){const i=await v0(t);i&&Ue.includes(e)&&(e.dataUrl=i,dn());let r="";if(i)try{r=_0(await y0(t,n))}catch{r=""}return Ue.includes(e)?!i||!r?(Ue.splice(Ue.indexOf(e),1),dn(),"failed"):(e.url=r,dn(),"added"):"dropped"}function Yh(t){const e=mn.indexOf(t);e>=0&&mn.splice(e,1),Zh()}function Jh(t){t.controller.abort(),Yh(t);const e=Ue.indexOf(t.slot);e>=0&&(Ue.splice(e,1),dn())}function Zh(){Nl?.setAttachmentsPending(mn.length>0)}async function b0(t){const e=Array.from(t.target.files||[]);if(!e.length)return;if(t.target.value="",_.isRunning){Ie("Wait for the current generation to finish before attaching images.","info");return}const n=e.filter(u=>u.size>Xo);n.length&&Ie(`Skipped ${n.length} image(s) over the ${(Xo/1024/1024).toFixed(0)} MB limit.`,"warning");const i=e.filter(u=>u.size<=Xo);if(!i.length)return;const r=Ga-Ue.length,s=i.slice(0,r);if(i.length>r&&Ie(`You can attach up to ${Ga} images.`,"info"),!s.length)return;const o=s.map(u=>{const c={dataUrl:null,name:u.name,url:null};Ue.push(c);const d={slot:c,controller:new AbortController},f=setTimeout(()=>d.controller.abort(),m0);return d.job=w0(u,c,d.controller.signal),mn.push(d),d.job.finally(()=>{clearTimeout(f),Yh(d)}),d.job});dn(),Zh();const l=(await Promise.all(o)).filter(u=>u==="failed").length;l&&Ie(`${l} image(s) could not be uploaded and were not attached.`,"error")}function E0(t){const e=Ue[t],n=mn.find(i=>i.slot===e);if(n){Jh(n);return}Ue.splice(t,1),dn()}function dn(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Ue.forEach((n,i)=>{const r=document.createElement("div");r.className="prompt-img-thumb"+(n.url?"":" is-pending"),r.innerHTML=(n.dataUrl?`Prompt image`:"")+``,t.appendChild(r)}),e&&(e.textContent=Ue.length>=Ga?"Image limit reached":"Add images"))}function Ol(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Kh(e?.value);t.classList.toggle("hidden",!n),!n&&Ue.length&&(mn.slice().forEach(Jh),Ue=[],dn())}const $n="ccc_usage",Xh="google/gemini-3.7-flash",Qh="google/gemini-3.7-flash",Or="google/gemini-3.7-flash",Wi={professional:11,power:49},Ka={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},Kr={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let Yr={...Kr};async function S0(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const i=await n.json();if(i.result!=="success"||!i.rates)return;const r=i.rates,s={AUD:1},o=new Set([...Object.keys(Kr),...Object.values(Ya),...Object.values(Ka)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?s[a]=r[a]:Kr[a]&&(s[a]=Kr[a]));Yr=s}catch{}finally{clearTimeout(e)}}const Ya={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Bl(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&Ya[s])return Ya[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=Ka[e];if(n)return n;const i=e.split("_")[0],r=Ka[i];return r||"USD"}function qi(t,e){const n=Yr[e]??Yr.USD,i=t*n,r=Math.round(i*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Yr.USD)}}const _t="ccc_api_key_",Rt="ccc_session_api_key_",$t="ccc_encryption_key",cr="ccc_encryption_key_scope",x0="ccc_keystore",Fs="keys",ur="ccc_encryption_key_version";let Ja=null,Rs=null,dr=!1,Ts=!1,od=!1;class $s extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function ad(){if(od)return;od=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&Ie(t,"warning")}function ep(){return localStorage.getItem(ur)||""}function Za(){return crypto.randomUUID?.()||np(crypto.getRandomValues(new Uint8Array(16)))}function I0(){const t=ep();if(t)return t;const e=Za();return localStorage.setItem(ur,e),e}function pi(){Ja=null,Rs=null,dr=!1,Ts=!1}window.addEventListener("storage",t=>{t.key===ur&&pi()});function k0(){return new Promise((t,e)=>{const n=indexedDB.open(x0,1);n.onupgradeneeded=()=>{const i=n.result;i.objectStoreNames.contains(Fs)||i.createObjectStore(Fs)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function Dl(t,e){const n=await k0();return new Promise((i,r)=>{const s=n.transaction(Fs,t);let o;try{o=e(s.objectStore(Fs))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),s.oncomplete=()=>{n.close(),i(a)},s.onerror=()=>{n.close(),r(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),r(s.error||new Error("Encryption key transaction aborted."))}})}function C0(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function A0(){const t=await Dl("readonly",e=>e.get($t));return C0(t)?t:null}async function tp(t){await Dl("readwrite",e=>e.put(t,$t))}async function P0(){pi();try{await Dl("readwrite",t=>t.delete($t))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function F0(){const t=sessionStorage.getItem($t);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await tp(e),sessionStorage.removeItem($t),sessionStorage.removeItem(cr),localStorage.removeItem(_t+"salt"),e}async function ld(t){const e=sessionStorage.getItem($t);if(e)return Ts=sessionStorage.getItem(cr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new $s;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),i=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem($t,JSON.stringify(i)),sessionStorage.setItem(cr,"session"),Ts=!1,crypto.subtle.importKey("jwk",i,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function R0(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem($t))return ad(),dr=!0,ld(t);try{const e=await A0();if(e)return e;const n=await F0();if(n)return n;const i=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await tp(i),i}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),ad(),dr=!0,ld(t)}}async function jl(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=I0();Rs!==n&&pi();const i=Ja||R0(e);Ja=i,Rs=n;try{return await i}catch(r){throw pi(),r}}async function T0(t){const e=await jl(),n=Rs,i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,i.encode(t)),o=new Uint8Array(r.length+s.byteLength);return o.set(r),o.set(new Uint8Array(s),r.length),{ciphertext:np(o),keyVersion:n,sessionFallback:dr}}async function $0(t,e={}){const{isSessionCredential:n=!1}=e;try{const i=await jl({allowSessionFallbackCreation:!1});if(dr&&!n&&!Ts)throw new $s;const r=M0(t),s=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,o);return new TextDecoder().decode(a)}catch(i){if(i instanceof $s)throw i;return console.error("Decryption failed:",i),null}}function np(t){const e=new Uint8Array(t);let n="";for(let i=0;i0}let Bn="",gi="",Zi=null,ud=0,at="not-configured";async function Ul(){sessionStorage.getItem($t)&&await jl(),Bn=await Oe("flutterflow"),gi=await Oe("flutterflow_project_id"),U0(),on(),Bn?zl():(at="not-configured",bt())}let fr=!1;function ip(){const t=document.getElementById("api-keys-modal");Ve(t),ql(),Bn&&Vl(Bn)}function Hl(){fr=!1,ip()}function N0(){fr=!0;const t=document.getElementById("walkthrough-modal");t&&Ge(t),ip()}let dd=!1;function fd(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-settings-model");if(!t||!e)return;e.value=t.value;const n=Array.from(t.options);Array.from(e.options).forEach((r,s)=>{const o=n[s];o&&(r.textContent=o.textContent)});const i=document.getElementById("composer-settings-free-notice");i&&(document.getElementById("model-selector-free-notice")?(i.hidden=!1,i.innerHTML='Free plan — Gemini only. '):i.hidden=!0)}function hd(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-image-capability"),n=document.getElementById("composer-image-capability-note");if(!t)return;const i=Jt(t.value),r=Kh(t.value);e&&(e.textContent=r?"Supported":"Not supported"),n&&(n.textContent=r?`${i} accepts reference images you attach to the prompt.`:`Images can't be attached with ${i}. Attached images are removed when you switch to it.`),Ol()}function rp(){if(fr=!1,fd(),hd(),!dd){const e=document.getElementById("composer-settings-model");e&&e.addEventListener("change",()=>{const n=document.getElementById("code-generator-model");n.value=e.value,n.dispatchEvent(new Event("change")),fd(),hd()}),dd=!0}const t=document.querySelector('.composer [aria-label="Generation settings"]');Ve("composer-settings-modal",{trigger:t})}function O0(t){t&&t.target!==t.currentTarget||Ge("composer-settings-modal")}function sp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&Ge(e);const n=fr;if(fr=!1,n){const i=document.getElementById("walkthrough-modal");i&&(at==="connected"&&Wl(),Ve(i))}}let rn=1;function op(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ks(){const t=op();t.length&&t.forEach((e,n)=>{const i=n+1;e.classList.remove("wt-current","wt-done","wt-pending");const r=e.querySelector(".wt-step-num");i===rn?(e.classList.add("wt-current"),r&&(r.textContent=i)):i0&&rn<=t&&(rn++,Ks())}function B0(){const t=document.getElementById("walkthrough-modal");t&&(rn=1,Ks(),Ve(t))}function D0(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&Ge(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function ap(){if(H.isVerified&&Mt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(rn=1,Ks(),Ve(e))}}async function ql(){const t=document.getElementById("flutterflow-api-key-input");Bn?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",j0()}function j0(){pd("flutterflow","flutterflow-key-status"),pd("flutterflow_project_id","flutterflow-project-status")}function pd(t,e){const n=document.getElementById(e);if(!n)return;const i=n.querySelector(".key-status-dot"),r=n.querySelector("span");Pt(t)?(i.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(i.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function on(){const t=_.step2Result&&_.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff");e&&e.classList.toggle("hidden",!t)}function U0(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((i,r)=>{const s=n[r];s==="flutterflow"?Pt("flutterflow")&&Pt("flutterflow_project_id")?(i.className="key-status-dot configured",i.title="FlutterFlow (Fully configured)"):Pt("flutterflow")||Pt("flutterflow_project_id")?(i.className="key-status-dot env",i.title="FlutterFlow (Partially configured)"):(i.className="key-status-dot missing",i.title="FlutterFlow (Not configured)"):Pt(s)?(i.className="key-status-dot configured",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(i.className="key-status-dot missing",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),on()}async function H0(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select"),n=t.value.trim(),i=e?.value.trim()||"";if(n){const o=await Oe("flutterflow").catch(()=>"");await cd("flutterflow",n),n!==o&&!i&&lp()}if(i){if(!Ys(i)){Ie("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await cd("flutterflow_project_id",i)}await Ul(),n&&await zl(),ql();const r=document.querySelector("#api-keys-modal .bg-blue-500"),s=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=s,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),sp()},1e3)}async function W0(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ur,Za()),pi(),localStorage.removeItem(_t+"flutterflow"),localStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(Rt+"flutterflow"),sessionStorage.removeItem(Rt+"flutterflow_project_id"),sessionStorage.removeItem($t),sessionStorage.removeItem(cr),localStorage.removeItem(_t+"salt"),await P0(),localStorage.setItem(ur,Za()),localStorage.removeItem(_t+"flutterflow"),localStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(Rt+"flutterflow"),sessionStorage.removeItem(Rt+"flutterflow_project_id"),await Ul();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),ql()}function Ys(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function bt(){const t=document.getElementById("acct-ff-dot"),e=document.getElementById("acct-ff-status"),n=document.getElementById("acct-ff-endpoint"),i=document.getElementById("acct-ff-project");if(n){const o=St();n.textContent=o.includes("staging")?"Staging":"Production"}if(i&&(i.textContent=gi||"—"),!e)return;let r,s;if(!Pt("flutterflow"))r="Not connected — add your FlutterFlow API key",s="";else switch(at){case"connected":r="Connected to FlutterFlow",s="ok";break;case"no-projects":r="Key accepted — no projects found",s="warn";break;case"unauthorized":r="API key rejected (401/403) — re-enter your key",s="bad";break;case"network-error":r="Could not reach FlutterFlow — check your network",s="bad";break;default:r="Checking connection…",s="warn";break}e.textContent=r,t&&(t.className=`acct-dot${s?" "+s:""}`)}async function zl(){const t=await Oe("flutterflow");if(!t||!Pt("flutterflow"))return at="not-configured",bt(),null;at="validating",bt();try{const n=await new _i(t,"","main",St()).listProjects();return at=n&&n.length>0?"connected":"no-projects",bt(),n}catch(e){const n=String(e&&e.message||"");return at=/(401|403)|denied|unauthorized|scoped|list permission/i.test(n)?"unauthorized":"network-error",bt(),null}}function lp(){gi="",localStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(Rt+"flutterflow_project_id")}function q0(){lp();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML='',t.value=""),Pt("flutterflow")?(at="validating",Vl(Bn)):at="not-configured",bt()}function z0(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function V0(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;z0("flutterflow-api-key-input",n)}),t.addEventListener("blur",G0(async e=>{const n=e.target.value.trim();n&&await Vl(n)},500)))}function G0(t,e){let n;return function(...r){const s=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(s,e)}}async function Vl(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden"),(Pt("flutterflow")||t)&&(at="validating"),bt();try{const r=await new _i(t,"","main",St()).listProjects();if(!r||r.length===0){at="no-projects",bt(),e.innerHTML='';return}at="connected",bt(),e.innerHTML='',r.forEach(s=>{const o=document.createElement("option");o.value=s.id||s.projectId||"",o.textContent=s.name||s.projectName||`Project ${s.id}`,e.appendChild(o)}),gi&&(e.value=gi)}catch(i){console.error("Failed to fetch projects:",i);const r=String(i&&i.message||"");at=/(401|403)|denied|unauthorized|scoped|list permission/i.test(r)?"unauthorized":"network-error",bt(),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${i.message}`,n.classList.remove("hidden"))}}function K0(t){const e=document.getElementById(t),i=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",i.innerHTML=` + `}const f0=[[/gradient stroke\s*$/i," and an animated percentage label"],[/gauge\s*$/i," with a gradient stroke and animated fill"],[/rating\s*(bar|widget)?\s*$/i," with half-star support and haptic feedback"],[/list\s*$/i," with swipe-to-delete and an undo snackbar"],[/pad\s*$/i," that exports a transparent PNG"],[/carousel\s*$/i," with parallax cards and page indicators"],[/(button|cta)\s*$/i," with a loading spinner and success state"],[/(chart|graph)\s*$/i," that animates from a Firestore stream"],[/action\s*(that|to)?\s*$/i," uploads an image to Firebase Storage and returns the URL"],[/timer\s*$/i," with pause, resume and a completion callback"],[/map\s*$/i," with clustered markers and a custom info window"],[/^a\s+\w*$/i," widget that"],[/(picker|selector)\s*$/i," with search and multi-select"]],h0=220,p0=6,g0=5200,m0=73;function yd(t,e){return!!(t&&t.trim())&&!e}function v0(t,e=""){if(typeof t!="string"||!t||t===e||t.trim().lengthi.test(t));return n?n[1]:null}function y0(){let t="",e="";return{get active(){return t},resolve(n){return t=v0(n,e)??"",t},dismiss(){t=""},accept(n){if(!t)return null;const i=n+t;return e=i,t="",i}}}function _0({onSubmit:t}){const e=document.getElementById("composer"),n=document.getElementById("pipeline-input"),i=document.getElementById("hero-send");if(!e||!n||!i||typeof t!="function")return;const r=e.querySelector(".ghost .typed"),s=e.querySelector(".ghost .suggest"),o=document.getElementById("tab-hint"),a=document.getElementById("suggest-status"),l=Array.from(document.querySelectorAll("#example-chips .chip")),u=document.getElementById("btn-add-images"),c=document.getElementById("prompt-image-input"),d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=y0();let p=!1,h=!1,g=!1,m=!1,v=!1,x=null,E=null,y=null;const S=n.value;function I(){return h||g||m||v}function R(){i.disabled=!yd(n.value,I())}function b(){r&&(r.textContent=n.value)}function P(){s&&(s.textContent=""),b(),e.classList.remove("has-suggest"),o&&(o.hidden=!0,o.tabIndex=-1),a&&(a.textContent="")}function T(N){s&&(s.textContent=N),b(),e.classList.add("has-suggest"),o&&(o.hidden=!1,o.tabIndex=0,o.setAttribute("aria-label","Accept suggestion: "+N.trim())),a&&(a.textContent="Suggestion: "+N+". Press Tab to accept.")}function M(){f.dismiss(),P()}function L(){if(p||h)return;const N=f.resolve(n.value);N&&T(N)}function B(){clearTimeout(x),!p&&(x=setTimeout(L,h0))}function Y(){const N=f.accept(n.value);return N===null?!1:(n.value=N,P(),R(),!0)}function G(N){h=N,e.classList.toggle("is-busy",N),i.classList.toggle("is-busy",N),i.setAttribute("aria-label",N?"Generating":"Generate"),n.readOnly=N,l.forEach(Z=>{Z.disabled=N}),u&&(u.disabled=N),c&&(c.disabled=N),R()}async function $(){if(yd(n.value,I())){M(),G(!0);try{await t()}finally{G(!1)}}}function q(){m&&(m=!1,y&&(clearTimeout(y),y=null),e.classList.remove("is-demo-typing"),e.classList.remove("is-demo-streaming"),n.placeholder="Describe the widget or action you need",R())}function se(){if(d.matches||!S.trim())return;const N=window.location.hash.replace(/^#/,"");if(N&&N!=="home")return;m=!0,n.placeholder="",n.value="",b(),R(),e.classList.add("is-demo-typing");let Z=0;const Re=()=>{m&&(Z+=1,n.value=S.slice(0,Z),b(),Z>=S.length?(e.classList.remove("is-demo-typing"),y=setTimeout(()=>{const Be=f.resolve(n.value);if(!Be){q();return}T(Be),e.classList.add("is-demo-streaming"),s.textContent="";const nt=Be.split(/(?=\s)/).filter(Boolean);let Te=0;const Ae=()=>{if(!m)return;const it=document.createElement("span");it.textContent=nt[Te++],s.appendChild(it),it.animate?.([{opacity:0},{opacity:1}],{duration:240,easing:"cubic-bezier(0.4,0,0.2,1)"}),TeN.classList.contains("is-active"))?.dataset.prompt||n.value,b(),ee()))}function ee(){g=!1,E&&(clearInterval(E),E=null),e.classList.remove("is-demo-typing"),R()}function Ee(){l.forEach(N=>{N.classList.remove("is-active"),N.setAttribute("aria-pressed","false")})}function Me(){try{n.focus({preventScroll:!0}),n.setSelectionRange(n.value.length,n.value.length)}catch{}}function ie(N){const Z=N.dataset.prompt||"";if(q(),ee(),clearTimeout(x),x=null,M(),l.forEach(Be=>{const nt=Be===N;Be.classList.toggle("is-active",nt),Be.setAttribute("aria-pressed",String(nt))}),d.matches||!Z){n.value=Z,b(),R(),Me();return}n.value="",b(),g=!0,R(),e.classList.add("is-demo-typing");let Re=0;E=setInterval(()=>{Re+=1,n.value=Z.slice(0,Re),b(),Re>=Z.length?(ee(),Me()):R()},22)}l.forEach(N=>{N.setAttribute("aria-pressed","false"),N.addEventListener("click",()=>ie(N))}),n.addEventListener("keydown",N=>{if((m||g)&&N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p){N.preventDefault();return}q(),ee(),N.key==="Tab"&&!N.shiftKey&&f.active?(N.preventDefault(),Y()):N.key==="Escape"?(clearTimeout(x),x=null,M()):N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p&&(N.preventDefault(),$())}),n.addEventListener("input",()=>{q(),ee(),Ee(),M(),R(),B()}),n.addEventListener("compositionstart",()=>{p=!0}),n.addEventListener("compositionend",()=>{p=!1,M(),R(),B()}),n.addEventListener("scroll",()=>{r&&r.parentNode&&(r.parentNode.scrollTop=n.scrollTop)}),o&&o.addEventListener("click",()=>{Y(),n.focus({preventScroll:!0})}),i.addEventListener("click",$),n.addEventListener("pointerdown",()=>{q(),ee(),Ee()}),n.addEventListener("focus",()=>{q()}),d.addEventListener("change",Fe);function he(){ue(),d.removeEventListener("change",Fe),document.removeEventListener("visibilitychange",Oe),window.removeEventListener("pagehide",he)}function ue(){q(),ee(),clearTimeout(x)}function Oe(){document.hidden&&ue()}return document.addEventListener("visibilitychange",Oe),window.addEventListener("pagehide",he),b(),R(),se(),{setAttachmentsPending(N){v=!!N,R()},dispose:he,cancelTyping:ue}}const hr=window.matchMedia("(prefers-reduced-motion: reduce)");let ci=null,Jt=null;const $s=new Map;function sp(){for(const[t,e]of $s)t.removeEventListener("animationend",e),t.classList.remove("panel-in"),t.style.animationDelay="";$s.clear(),document.querySelectorAll(".code-line.is-in").forEach(t=>t.classList.remove("is-in"))}function Wn(){if(sp(),ci){const t=ci;ci=null,t.animation?.cancel(),t.ghost.remove(),t.panel.style.visibility="",delete t.panel.dataset.morphing,t.panel.inert=!1}Jt&&(Jt.animation.cancel(),Jt.hero.classList.remove("is-exiting"),Jt.hero.style.cssText=Jt.style,Jt=null)}function w0(t){return(ci?.ghost||t)?.getBoundingClientRect()}function b0(t){sp(),t.filter(Boolean).forEach((e,n)=>{if(e.classList.remove("panel-in"),e.style.animationDelay="",hr.matches||document.hidden)return;e.offsetWidth,e.style.animationDelay=`${n*80}ms`,e.classList.add("panel-in");function i(r){r.target===e&&(e.classList.remove("panel-in"),e.style.animationDelay="",e.removeEventListener("animationend",i),$s.delete(e))}$s.set(e,i),e.addEventListener("animationend",i)})}function E0(t,e){if(!t||!e||hr.matches||document.hidden||!t.animate)return;const n=t.style.cssText;t.classList.add("is-exiting"),innerWidth<=920&&(t.style.cssText=`position:absolute;left:0;top:64px;width:${e.width}px;height:${e.height}px;transform:none;`);const i=t.animate([{opacity:1},{opacity:0}],{duration:460,easing:"cubic-bezier(0.4,0,0.2,1)",fill:"both"});Jt={hero:t,animation:i,style:n},i.onfinish=()=>{Jt?.animation===i&&(t.classList.remove("is-exiting"),t.style.cssText=n,i.cancel(),Jt=null)}}function op(t,e,n,{results:i=!1}={}){if(Wn(),!e)return;const r=e.getBoundingClientRect(),s=()=>{e.style.visibility="",delete e.dataset.morphing,e.inert=!1,b0(n),(document.activeElement===document.body||document.getElementById("hero")?.contains(document.activeElement))&&e.querySelector(i?"#results-summary-tab":"#pipeline-edit-prompt")?.focus({preventScroll:!0})};if(hr.matches||document.hidden||!e.animate||!t?.width||!r.width||i&&innerWidth<=920){s();return}e.style.visibility="hidden",e.dataset.morphing="true",e.inert=!0;const o=document.createElement("div");o.className="composer-morph",o.setAttribute("aria-hidden","true");const a=innerWidth>920?Math.min(1,innerWidth/1920):1;o.style.cssText=`left:${r.left}px;top:${r.top}px;width:${r.width}px;height:${r.height}px;border-width:${2*a}px;border-radius:${20*a}px;`,document.body.appendChild(o);const l=t.left+t.width/2-r.left-r.width/2,u=t.top+t.height/2-r.top-r.height/2,c=t.width/r.width,d=t.height/r.height,f=`translate(${l}px,${u}px) scale(${c},${d})`,p=o.animate([{transform:f,opacity:0,offset:0,easing:"cubic-bezier(.2,0,0,1)"},{transform:f,opacity:1,offset:.14,easing:"cubic-bezier(.4,0,.2,1)"},{transform:`translate(${l}px,${u}px) scale(${c*.93},${d*.93})`,opacity:1,offset:.28,easing:"cubic-bezier(.32,1.38,.5,1)"},{transform:"translate(0px,0px) scale(1,1)",opacity:1,offset:1}],{duration:1120,fill:"both"}),h={panel:e,ghost:o,animation:p};ci=h,p.onfinish=()=>{ci===h&&(Wn(),s())}}window.addEventListener("resize",Wn);window.addEventListener("pagehide",Wn);document.addEventListener("visibilitychange",()=>{document.hidden&&Wn()});hr.addEventListener("change",()=>{hr.matches&&Wn()});const S0="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const It="https://4tgke4.buildship.run",ap={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},Ms="ccc_auth_session",tl="ccc_signin_return",x0=1800*1e3,_d=new WeakSet;let H={email:null,sessionToken:null,isVerified:!1};function qn(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=qn({isResolved:!0}),nl=Promise.resolve();const I0=`${It}/service/runpipeline`,k0="bs_user_id",C0="bs_identity_token",A0=`${It}/authUserCheck`;let bt={userId:null,token:null,status:null,resolved:!1};const Ls=Yv,Ns="ccc_subscription",wd=3,P0=new Set(["active","trialing","paid"]),Os="google/gemini-3.7-flash",es=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],F0={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function nn(t){return F0[t]||t}const R0=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function lp(t){return R0.has(t)}const il=4,la=8*1024*1024,T0="https://4tgke4.buildship.run/service/runpipeline-image";let He=[];const Sn=[],$0=3e4;let Jl=null;function M0(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function L0(t,e){const n=new FormData;return n.append("file",t),(await fetch(T0,{method:"POST",body:n,signal:e})).json()}function N0(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const i=e[n];if(i&&typeof i=="object"){if(typeof i.file=="string")return i.file;if(typeof i.url=="string")return i.url}if(typeof i=="string")return i}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function O0(t,e,n){const i=await M0(t);i&&He.includes(e)&&(e.dataUrl=i,yn());let r="";if(i)try{r=N0(await L0(t,n))}catch{r=""}return He.includes(e)?!i||!r?(He.splice(He.indexOf(e),1),yn(),"failed"):(e.url=r,yn(),"added"):"dropped"}function cp(t){const e=Sn.indexOf(t);e>=0&&Sn.splice(e,1),dp()}function up(t){t.controller.abort(),cp(t);const e=He.indexOf(t.slot);e>=0&&(He.splice(e,1),yn())}function dp(){Jl?.setAttachmentsPending(Sn.length>0)}async function B0(t){const e=Array.from(t.target.files||[]);if(!e.length)return;if(t.target.value="",_.isRunning){ke("Wait for the current generation to finish before attaching images.","info");return}const n=e.filter(u=>u.size>la);n.length&&ke(`Skipped ${n.length} image(s) over the ${(la/1024/1024).toFixed(0)} MB limit.`,"warning");const i=e.filter(u=>u.size<=la);if(!i.length)return;const r=il-He.length,s=i.slice(0,r);if(i.length>r&&ke(`You can attach up to ${il} images.`,"info"),!s.length)return;const o=s.map(u=>{const c={dataUrl:null,name:u.name,url:null};He.push(c);const d={slot:c,controller:new AbortController},f=setTimeout(()=>d.controller.abort(),$0);return d.job=O0(u,c,d.controller.signal),Sn.push(d),d.job.finally(()=>{clearTimeout(f),cp(d)}),d.job});yn(),dp();const l=(await Promise.all(o)).filter(u=>u==="failed").length;l&&ke(`${l} image(s) could not be uploaded and were not attached.`,"error")}function D0(t){const e=He[t],n=Sn.find(i=>i.slot===e);if(n){up(n);return}He.splice(t,1),yn()}function yn(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",He.forEach((n,i)=>{const r=document.createElement("div");r.className="prompt-img-thumb"+(n.url?"":" is-pending"),r.innerHTML=(n.dataUrl?`Prompt image`:"")+``,t.appendChild(r)}),e&&(e.textContent=He.length>=il?"Image limit reached":"Add images"))}function Zl(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=lp(e?.value);t.classList.toggle("hidden",!n),!n&&He.length&&(Sn.slice().forEach(up),He=[],yn())}const jn="ccc_usage",fp="google/gemini-3.7-flash",hp="google/gemini-3.7-flash",qr="google/gemini-3.7-flash",Ki={professional:11,power:49},rl={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},ts={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let ns={...ts};async function j0(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const i=await n.json();if(i.result!=="success"||!i.rates)return;const r=i.rates,s={AUD:1},o=new Set([...Object.keys(ts),...Object.values(sl),...Object.values(rl)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?s[a]=r[a]:ts[a]&&(s[a]=ts[a]));ns=s}catch{}finally{clearTimeout(e)}}const sl={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Xl(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&sl[s])return sl[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=rl[e];if(n)return n;const i=e.split("_")[0],r=rl[i];return r||"USD"}function Yi(t,e){const n=ns[e]??ns.USD,i=t*n,r=Math.round(i*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*ns.USD)}}const Et="ccc_api_key_",$t="ccc_session_api_key_",Bt="ccc_encryption_key",pr="ccc_encryption_key_scope",U0="ccc_keystore",Bs="keys",gr="ccc_encryption_key_version";let ol=null,Ds=null,mr=!1,js=!1,bd=!1;class Us extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Ed(){if(bd)return;bd=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&ke(t,"warning")}function pp(){return localStorage.getItem(gr)||""}function al(){return crypto.randomUUID?.()||mp(crypto.getRandomValues(new Uint8Array(16)))}function H0(){const t=pp();if(t)return t;const e=al();return localStorage.setItem(gr,e),e}function bi(){ol=null,Ds=null,mr=!1,js=!1}window.addEventListener("storage",t=>{t.key===gr&&bi()});function W0(){return new Promise((t,e)=>{const n=indexedDB.open(U0,1);n.onupgradeneeded=()=>{const i=n.result;i.objectStoreNames.contains(Bs)||i.createObjectStore(Bs)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function Ql(t,e){const n=await W0();return new Promise((i,r)=>{const s=n.transaction(Bs,t);let o;try{o=e(s.objectStore(Bs))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),s.oncomplete=()=>{n.close(),i(a)},s.onerror=()=>{n.close(),r(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),r(s.error||new Error("Encryption key transaction aborted."))}})}function q0(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function z0(){const t=await Ql("readonly",e=>e.get(Bt));return q0(t)?t:null}async function gp(t){await Ql("readwrite",e=>e.put(t,Bt))}async function V0(){bi();try{await Ql("readwrite",t=>t.delete(Bt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function G0(){const t=sessionStorage.getItem(Bt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await gp(e),sessionStorage.removeItem(Bt),sessionStorage.removeItem(pr),localStorage.removeItem(Et+"salt"),e}async function Sd(t){const e=sessionStorage.getItem(Bt);if(e)return js=sessionStorage.getItem(pr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Us;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),i=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(Bt,JSON.stringify(i)),sessionStorage.setItem(pr,"session"),js=!1,crypto.subtle.importKey("jwk",i,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function K0(t){if(sessionStorage.getItem(pr)==="session"&&sessionStorage.getItem(Bt))return Ed(),mr=!0,Sd(t);try{const e=await z0();if(e)return e;const n=await G0();if(n)return n;const i=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await gp(i),i}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Ed(),mr=!0,Sd(t)}}async function ec(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=H0();Ds!==n&&bi();const i=ol||K0(e);ol=i,Ds=n;try{return await i}catch(r){throw bi(),r}}async function Y0(t){const e=await ec(),n=Ds,i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,i.encode(t)),o=new Uint8Array(r.length+s.byteLength);return o.set(r),o.set(new Uint8Array(s),r.length),{ciphertext:mp(o),keyVersion:n,sessionFallback:mr}}async function J0(t,e={}){const{isSessionCredential:n=!1}=e;try{const i=await ec({allowSessionFallbackCreation:!1});if(mr&&!n&&!js)throw new Us;const r=Z0(t),s=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,o);return new TextDecoder().decode(a)}catch(i){if(i instanceof Us)throw i;return console.error("Decryption failed:",i),null}}function mp(t){const e=new Uint8Array(t);let n="";for(let i=0;i0}let Ie="",Mt="",nr=null,Id=0,ct="not-configured",vt=0,ll=0,cl=0,no=0,Zt=0,un=0,Lt=null,Nt=null,vr=null;function Q0(){return ll+=1,ll}function ew(){return cl+=1,cl}function yr(t,e,n){Lt=t?{projectId:t,key:e,generation:n}:null}function vp(t,e=Ie){if(!t)return!1;const n=Lt;return n?n.projectId===t&&n.key===e&&n.generation===vt:!1}function tc(t,e,n){if(!Mt||Lt&&Lt.projectId!==Mt)return;(t||[]).some(r=>(r.id||r.projectId)===Mt)?yr(Mt,e,n):Lt&&yr("",null,null)}function yp({seq:t,currentSeq:e,generation:n,storedKeyAtStart:i,requestKey:r}){return t!==e||n!==vt?!1:i===Ie||r===Ie}async function nc(){sessionStorage.getItem(Bt)&&await ec(),Ie=await Ne("flutterflow"),Mt=await Ne("flutterflow_project_id"),ow(),hn(),Ie?oc():(ct="not-configured",xt())}let _r=!1;function _p(){const t=document.getElementById("api-keys-modal");Ke(t),sc(),Ie&&so(Ie)}function ic(){_r=!1,_p()}function tw(){_r=!0;const t=document.getElementById("walkthrough-modal");t&&Ye(t),_p()}let kd=!1;function Cd(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-settings-model");if(!t||!e)return;e.value=t.value;const n=Array.from(t.options);Array.from(e.options).forEach((r,s)=>{const o=n[s];o&&(r.textContent=o.textContent)});const i=document.getElementById("composer-settings-free-notice");i&&(document.getElementById("model-selector-free-notice")?(i.hidden=!1,i.innerHTML='Free plan — Gemini only. '):i.hidden=!0)}function Ad(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-image-capability"),n=document.getElementById("composer-image-capability-note");if(!t)return;const i=nn(t.value),r=lp(t.value);e&&(e.textContent=r?"Supported":"Not supported"),n&&(n.textContent=r?`${i} accepts reference images you attach to the prompt.`:`Images can't be attached with ${i}. Attached images are removed when you switch to it.`),Zl()}function wp(){if(_r=!1,Cd(),Ad(),!kd){const e=document.getElementById("composer-settings-model");e&&e.addEventListener("change",()=>{const n=document.getElementById("code-generator-model");n.value=e.value,n.dispatchEvent(new Event("change")),Cd(),Ad()}),kd=!0}const t=document.querySelector('.composer [aria-label="Generation settings"]');Ke("composer-settings-modal",{trigger:t})}function nw(t){t&&t.target!==t.currentTarget||Ye("composer-settings-modal")}function bp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&Ye(e);const n=_r;if(_r=!1,n){const i=document.getElementById("walkthrough-modal");i&&(ct==="connected"&&rc(),Ke(i))}}let dn=1;function Ep(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function io(){const t=Ep();t.length&&t.forEach((e,n)=>{const i=n+1;e.classList.remove("wt-current","wt-done","wt-pending");const r=e.querySelector(".wt-step-num");i===dn?(e.classList.add("wt-current"),r&&(r.textContent=i)):i0&&dn<=t&&(dn++,io())}function iw(){const t=document.getElementById("walkthrough-modal");t&&(dn=1,io(),Ke(t))}function rw(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&Ye(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function Sp(){if(H.isVerified&&Dt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(dn=1,io(),Ke(e))}}async function sc(){const t=document.getElementById("flutterflow-api-key-input");Ie?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",sw()}function sw(){Pd("flutterflow","flutterflow-key-status"),Pd("flutterflow_project_id","flutterflow-project-status")}function Pd(t,e){const n=document.getElementById(e);if(!n)return;const i=n.querySelector(".key-status-dot"),r=n.querySelector("span");Rt(t)?(i.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(i.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function hn(){const t=_.step2Result&&_.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff");e&&e.classList.toggle("hidden",!t)}function ow(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((i,r)=>{const s=n[r];s==="flutterflow"?Rt("flutterflow")&&Rt("flutterflow_project_id")?(i.className="key-status-dot configured",i.title="FlutterFlow (Fully configured)"):Rt("flutterflow")||Rt("flutterflow_project_id")?(i.className="key-status-dot env",i.title="FlutterFlow (Partially configured)"):(i.className="key-status-dot missing",i.title="FlutterFlow (Not configured)"):Rt(s)?(i.className="key-status-dot configured",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(i.className="key-status-dot missing",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),hn()}async function aw(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select"),n=t.value.trim(),i=!!n&&n!==Ie,r=e?.value.trim()||"";if(n){const l=await Ne("flutterflow").catch(()=>"");await xd("flutterflow",n),n!==l&&!r&&is()}const s=n||Ie;if(r){if(!ro(r)){ke("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}vp(r,s)?await xd("flutterflow_project_id",r):(i?is():Lt=null,e.value="",s&&!(Nt&&Nt.key===s&&Nt.generation===vt)&&so(s))}else i&&is();await nc(),n&&await oc(),sc();const o=document.querySelector("#api-keys-modal .bg-blue-500"),a=o.textContent;o.textContent="Saved!",o.classList.remove("bg-blue-500","hover:bg-blue-600"),o.classList.add("bg-green-500"),setTimeout(()=>{o.textContent=a,o.classList.remove("bg-green-500"),o.classList.add("bg-blue-500","hover:bg-blue-600"),bp()},1e3)}async function lw(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(gr,al()),bi(),localStorage.removeItem(Et+"flutterflow"),localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow"),sessionStorage.removeItem($t+"flutterflow_project_id"),sessionStorage.removeItem(Bt),sessionStorage.removeItem(pr),localStorage.removeItem(Et+"salt"),await V0(),localStorage.setItem(gr,al()),localStorage.removeItem(Et+"flutterflow"),localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow"),sessionStorage.removeItem($t+"flutterflow_project_id"),Lt=null,Nt=null,vr=null,await nc();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),sc()}function ro(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function xt(){const t=document.getElementById("acct-ff-dot"),e=document.getElementById("acct-ff-status"),n=document.getElementById("acct-ff-endpoint"),i=document.getElementById("acct-ff-project");if(n){const o=Ge();n.textContent=o.includes("staging")?"Staging":"Production"}if(i&&(i.textContent=Mt||"—"),!e)return;let r,s;if(!Rt("flutterflow"))r="Not connected — add your FlutterFlow API key",s="";else switch(ct){case"connected":r="Connected to FlutterFlow",s="ok";break;case"no-projects":r="Key accepted — no projects found",s="warn";break;case"unauthorized":r="API key rejected (401/403) — re-enter your key",s="bad";break;case"network-error":r="Could not reach FlutterFlow — check your network",s="bad";break;default:r="Checking connection…",s="warn";break}e.textContent=r,t&&(t.className=`acct-dot${s?" "+s:""}`)}async function oc(){const t=ew(),e=++no,n=vt,i=Ie,r=await Ne("flutterflow"),s=()=>yp({seq:t,currentSeq:cl,generation:n,storedKeyAtStart:i,requestKey:r});if(!s()||e<=Zt)return null;const o=()=>{un=Math.max(un,e)};if(!r||!Rt("flutterflow"))return Zt=e,o(),ct="not-configured",xt(),null;ct="validating",xt();try{const l=await new Gn(r,"","main",Ge()).listProjects();return!s()||e<=Zt?null:(Zt=e,o(),ct=l&&l.length>0?"connected":"no-projects",e>=un&&tc(l,r,n),xt(),l)}catch(a){if(!s()||e<=Zt)return null;Zt=e,o();const l=String(a&&a.message||"");return ct=/(401|403)|denied|unauthorized|scoped|list permission/i.test(l)?"unauthorized":"network-error",xt(),null}}function is(){Mt="",Lt=null,localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow_project_id")}function cw(){vt+=1,Nt=null,vr=null,is();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML='',t.value=""),Rt("flutterflow")?(ct="validating",so(Ie)):ct="not-configured",xt()}function uw(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function dw(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",n=>{const i=n.target.value.trim().length>0;uw("flutterflow-api-key-input",i)}),t.addEventListener("blur",fw(async n=>{const i=n.target.value.trim();i&&await so(i)},500)));const e=document.getElementById("flutterflow-projects-select");e&&e.addEventListener("change",()=>{const n=e.value.trim();n&&Nt?yr(n,Nt.key,Nt.generation):yr("",null,null)})}function fw(t,e){let n;return function(...r){const s=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(s,e)}}async function so(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}const i=Q0(),r=++no,s=vt,o=Ie,a=()=>yp({seq:i,currentSeq:ll,generation:s,storedKeyAtStart:o,requestKey:t}),l=()=>r>Zt,u=()=>{Zt=Math.max(Zt,r)};Nt=null,e.innerHTML='',n&&n.classList.add("hidden"),l()&&t===Ie&&(Rt("flutterflow")||t)&&(ct="validating"),xt();try{const d=await new Gn(t,"","main",Ge()).listProjects();if(!a())return;Nt={key:t,generation:s};const f=t===Ie,p=l()&&f;if(p&&u(),r>un&&f&&(un=r,tc(d,t,s)),!d||d.length===0){p&&(ct="no-projects",xt()),e.innerHTML='';return}p&&(ct="connected",xt()),e.innerHTML='',d.forEach(h=>{const g=document.createElement("option");g.value=h.id||h.projectId||"",g.textContent=h.name||h.projectName||`Project ${h.id}`,e.appendChild(g)}),Mt&&(e.value=Mt)}catch(c){if(!a())return;console.error("Failed to fetch projects:",c);const d=String(c&&c.message||"");l()&&t===Ie&&(u(),ct=/(401|403)|denied|unauthorized|scoped|list permission/i.test(d)?"unauthorized":"network-error",xt()),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${c.message}`,n.classList.remove("hidden"))}}function hw(t){const e=document.getElementById(t),i=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",i.innerHTML=` `):(e.type="password",i.innerHTML=` - `)}let _={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1,runId:0,submittedPrompt:"",submittedImages:[]};function Y0(){_.step1Result=null,_.step2Result=null,_.step3Result=null,_.bundleSpec=null,_.artifactBundle=null,_.bundleReview=null,_.selectedArtifactId=null,_.resultsViewMode="summary"}function J0(){_.bundleSpec=or(_.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Js(){const t=di(_.bundleSpec);_.artifactBundle=or(_.step2Result,{id:_.bundleSpec?.id,title:_.bundleSpec?.title,description:_.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:_.bundleSpec?.relationships,code:_.step2Result||""});const e=gy(_.artifactBundle);_.artifactBundle={..._.artifactBundle,warnings:[..._.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{..._.artifactBundle.metadata,compatibility:e}},_.selectedArtifactId=di(_.artifactBundle).id}function Zs(){const t=or(_.step3Result,{id:_.artifactBundle?.id,title:_.artifactBundle?.title}),e=new Map(t.artifacts.map(i=>[i.id,i.review])),n=new Map(t.artifacts.filter(i=>{const r=i.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(i=>[i.id,i.review.fixedSource.trim()]));_.bundleReview=or({id:_.artifactBundle?.id,title:_.artifactBundle?.title,artifacts:_.artifactBundle?.artifacts?.map(i=>{const r=n.get(i.id)||null;return{...i,review:e.get(i.id)||i.review||_.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:_.artifactBundle?.relationships,warnings:_.artifactBundle?.warnings})}function cp(){const t=Gl();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function Gl(){const t=_.artifactBundle||_.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===_.selectedArtifactId)||di(t)}function Kl(){return Gl().code||_.step2Result||""}async function Z0(){try{await Ul()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Jr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function X0(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class _i{constructor(e,n,i="main",r=Jr.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=i,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const i of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const s=await r.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),i=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!i)throw new Error("Export did not contain a pubspec.yaml.");const r=i.slice(0,i.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{s.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[i].async("string"),files:s}}async pushCodeWithRetry(e,n=3,i=null){const r=[Jr.production,Jr.staging],s=Math.max(0,r.indexOf(this._endpoint));let o=!1,a=null;for(let l=0;lsetTimeout(h,1e3*(l+1)));continue}if(d.ok)return console.log(`Push to ${c} succeeded!`),d;a=d.status;const f=d.status<500&&!o;if(Xa(f?d.clone():d,Dh).then(p=>console.log(`Push to ${c} returned ${d.status}: ${p}`),()=>console.log(`Push to ${c} returned ${d.status} (unreadable response body)`)),d.status>=500&&(o=!0),d.status===500){console.warn(`Endpoint ${c} returned 500, trying next...`),await new Promise(p=>setTimeout(p,1e3*(l+1)));continue}if(d.status>=500)throw new rt(`FlutterFlow reported a server error (HTTP ${d.status}), which cannot prove the push was refused — the write may have been applied before the failure. Open your FlutterFlow project to reconcile before retrying.`);if(o)throw new rt(`The push was refused (HTTP ${d.status}), but an earlier sync attempt may already have applied it — server errors and dropped responses cannot prove a refusal. Open your FlutterFlow project to reconcile before retrying.`);return d}throw Xu({httpStatus:a})}async pushCode(e,n=null){return this.pushCodeWithRetry(e,3,n)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const i=JSON.parse(e.value);if(i&&Array.isArray(i.entries))return i.entries.map(r=>({id:r.id,name:r.project?.name||r.id}))}catch(i){console.error("Failed to parse stringified project value:",i)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,i="";for(const r of e){const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await s.json());if(n=s.status,i=await s.text(),console.warn(`listProjects via ${r} returned ${n}: ${i}`),s.status===401||s.status===403)throw new Error(X0(s.status,i));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${i}`)}throw new Error(`List projects failed: ${n} - ${i}`)}}function Xa(t,e){const n=t.body?.getReader?.(),i=n?(async()=>{const r=new TextDecoder;let s="";for(;;){const{done:o,value:a}=await n.read();if(o)break;s+=r.decode(a,{stream:!0})}return s+r.decode()})():Promise.resolve("");return Zl(i,e,(r,s)=>{try{n?.cancel()?.catch?.(()=>{})}catch{}s(new Error("The response body stalled before it finished."))})}async function Q0(t,e=Dh){const n=t.clone();let i;try{i=JSON.parse(await Xa(t,e))}catch{let o="";try{o=await Xa(n,e)}catch{}if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:o||`HTTP ${t.status}`,errorMap:new Map};throw new rt(`FlutterFlow accepted the sync but returned an unreadable response${o?`: ${o.slice(0,200)}`:"."}`)}if(!t.ok){let s=i.message||`HTTP ${t.status}`,o=new Map;if(i.errors)o=new Map(Object.entries(i.errors));else if(!i.message&&typeof i=="object"){const a=Object.keys(i).filter(l=>l.endsWith(".dart")&&Array.isArray(i[l]));a.length>0&&(o=new Map(Object.entries(i)),s=a.flatMap(u=>i[u].map(c=>`${u}: ${c.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:s,errorMap:o}}let r={};if(i.value)try{r=typeof i.value=="string"?JSON.parse(i.value):i.value}catch(s){console.warn("Ignoring malformed push response value:",s)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function Yl(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const X={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},up=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,dp=/extends\s+State<\w+>/;function ew(t,e=""){if(t==="pubspec.yaml")return X.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return X.OTHER;if(t==="custom_functions.dart")return X.FUNCTION;if(e){const n=up.test(e),i=dp.test(e);if(n||i)return X.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return X.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return X.FUNCTION}return X.CODE_FILE}function fp(t,e){switch(e){case X.ACTION:return`lib/custom_code/actions/${t}`;case X.WIDGET:return`lib/custom_code/widgets/${t}`;case X.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case X.CODE_FILE:return`lib/custom_code/${t}`;case X.DEPENDENCIES:return"pubspec.yaml";case X.OTHER:return`lib/custom_code/${t}`;default:return t}}async function Jl(t,e=new Map){return Zv(t,e)}const Qa=new Map,ii=new Map,ri=new Map;function vr(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function mi(t){Qa.delete(vr(t))}function Zr(t,e,n){const i=vr(t),r=ii.get(i)??new Map;for(const{path:s,content:o}of e){const a=r.get(s)??new Map,l=a.get(o)??{uncertain:0,verified:0};n.uncertain&&(l.uncertain+=n.uncertain),n.verified&&(l.verified+=n.verified),l.uncertain<=0&&l.verified<=0?a.delete(o):a.set(o,l),a.size===0?r.delete(s):r.set(s,a)}r.size===0?ii.delete(i):ii.set(i,r)}function tw(t,e){Zr(t,e,{uncertain:1})}function nw(t){const e=vr(t);ri.set(e,(ri.get(e)??0)+1)}function gd(t){const e=vr(t),n=(ri.get(e)??0)-1;n<=0?ri.delete(e):ri.set(e,n)}function Zl(t,e,n){return new Promise((i,r)=>{let s=!1;const o=(l,u,c)=>{s||(s=!0,c==="resolve"?i(u):r(u))},a=setTimeout(()=>{s||(s=!0,n(i,r))},e);t.then(l=>{clearTimeout(a),o(i,l,"resolve")},l=>{clearTimeout(a),o(r,l,"reject")})})}async function Xl(t,e,n=Bh){const i={stop:!1},r=(async()=>{const s=await t.pushCode(e,i);return Q0(s)})();return Zl(r,n,(s,o)=>{i.stop=!0,mi(t),nw(t),r.then(()=>gd(t),()=>gd(t)),o(new rt("FlutterFlow did not answer the sync in time — the push may still have been applied. The outcome is not yet known: open your FlutterFlow project to reconcile before retrying the deploy."))})}async function Ql(t,e,n,i,r="",s=Bh){const o=$y(e,n);if(o.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const a=I_(o,r),l={...a.manifest,sources:a.sources},u=a.skipped.map(h=>h.reason);u.forEach(h=>console.warn(`[custom class deploy] ${h}`));const c=a.approximate;c.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${o.length} new FlutterFlow custom code file(s) before sync.`),He.set("provision");let d=!0,f,p;try{if(p=(async()=>{let h;try{h=await fetch(o0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:i,customClasses:o,verification:l,stream:!0})})}catch{throw new rt("The provisioning request did not return a response. The deploy may have reached the FlutterFlow server — open your FlutterFlow project to reconcile before retrying.")}return C_(h,{onPhase:g=>{d&&He.setSubstatus(g)},onLog:g=>{d&&console.log(`[custom class deploy] ${g}`)}})})(),f=await Zl(p,s,(h,g)=>{d=!1,g(new rt("The deploy is still working on the FlutterFlow server, but this browser tab has stopped waiting. Your custom classes may or may not have been written — the outcome is not yet known. Open your FlutterFlow project to reconcile before retrying the deploy."))}),!f.finalResultReceived){if(Qu(f)===Be.FAILED)throw new Error(f.error||`FlutterFlow custom class provisioning failed (HTTP ${f.httpStatus}).`);const h=f.httpRejected&&typeof f.httpStatus=="number"?`The FlutterFlow deploy runner returned HTTP ${f.httpStatus} without reporting a result.`:"The connection to the FlutterFlow deploy runner dropped before it reported a result.";throw new rt(`${h} The deploy may still be finishing on the server; open your FlutterFlow project to reconcile before retrying.`)}if(!f.success){const h=f.details?` ${f.details}`:"",g=`${f.error||"FlutterFlow custom class provisioning failed."}${h}`;throw Qu(f)===Be.UNCONFIRMED?new rt(`${g} The failure arrived after the deploy began — custom classes may already be written. Open your FlutterFlow project to reconcile before retrying.`):new Error(g)}}catch(h){throw h instanceof rt&&(mi(t),tw(t,o),p?.then(g=>{g?.finalResultReceived&&g.success?Zr(t,o,{uncertain:-1,verified:1}):g?.finalResultReceived&&Uh(g)&&Zr(t,o,{uncertain:-1})},()=>{})),h}return mi(t),Zr(t,o,{verified:1}),f.verificationSkipped&&(console.warn(`[custom class deploy] ${f.verificationSkipped}`),u.push(f.verificationSkipped)),{remoteFiles:n,syncFileMap:My(e,o),unverified:u,approximate:c,provisionSucceeded:!0}}async function ec(t,e={}){const n=vr(t);let i=Qa.get(n);if(i===void 0){try{i=await t.fetchProjectSource()}catch(u){throw new Error(`Could not read your project's pubspec.yaml (${u.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Nh(i.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);const l=ii.get(n);if(l){for(const[u,c]of[...l]){const d=i.files.get(u);if(d!==void 0){const f=c.get(d);f&&(f.verified>0?(f.verified-=1,f.explainedByVerified=!0):f.explainedByVerified||(f.uncertain-=1),f.uncertain<=0&&f.verified<=0&&c.delete(d))}c.size===0&&l.delete(u)}l.size===0&&ii.delete(n)}!ii.has(n)&&!ri.has(n)&&Qa.set(n,i)}const r=await q_(i.pubspecYaml,e),s=w_(i.pubspecYaml,r.overrides),o=__(s.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>{const l=r.additions[a],u=l?.sdk?`sdk: ${l.sdk}`:l||"any";return`${a}: ${u}`}).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:r.warnings,remoteFiles:i.files}}function iw(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const i=t.content.split(` -`).length;i>500&&n.push(`Code has ${i} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===X.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const s=Xy(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===X.WIDGET){const o=xh(t.content),a=Yy(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${Ih(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function hp(t,e={}){const{artifactType:n="CustomWidget",artifactName:i="GeneratedCode",fileName:r}=e,s=Gy(t);let o=r||i;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=xh(s)[0],c=u?Ih(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=X.CODE_FILE;switch(n){case"CustomAction":a=X.ACTION;break;case"CustomWidget":a=X.WIDGET;break;case"CustomFunction":a=X.FUNCTION;break;case"CustomClass":case"CodeFile":a=X.CODE_FILE;break}let l="";return a===X.WIDGET?l=`// Automatic FlutterFlow imports + `)}let _={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1,runId:0,submittedPrompt:"",submittedImages:[]};function pw(){_.step1Result=null,_.step2Result=null,_.step3Result=null,_.bundleSpec=null,_.artifactBundle=null,_.bundleReview=null,_.selectedArtifactId=null,_.resultsViewMode="summary"}function gw(){_.bundleSpec=dr(_.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function oo(){const t=yi(_.bundleSpec);_.artifactBundle=dr(_.step2Result,{id:_.bundleSpec?.id,title:_.bundleSpec?.title,description:_.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:_.bundleSpec?.relationships,code:_.step2Result||""});const e=Fy(_.artifactBundle);_.artifactBundle={..._.artifactBundle,warnings:[..._.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{..._.artifactBundle.metadata,compatibility:e}},_.selectedArtifactId=yi(_.artifactBundle).id}function ao(){const t=dr(_.step3Result,{id:_.artifactBundle?.id,title:_.artifactBundle?.title}),e=new Map(t.artifacts.map(i=>[i.id,i.review])),n=new Map(t.artifacts.filter(i=>{const r=i.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(i=>[i.id,i.review.fixedSource.trim()]));_.bundleReview=dr({id:_.artifactBundle?.id,title:_.artifactBundle?.title,artifacts:_.artifactBundle?.artifacts?.map(i=>{const r=n.get(i.id)||null;return{...i,review:e.get(i.id)||i.review||_.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:_.artifactBundle?.relationships,warnings:_.artifactBundle?.warnings})}function xp(){const t=ac();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ac(){const t=_.artifactBundle||_.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===_.selectedArtifactId)||yi(t)}function lc(){return ac().code||_.step2Result||""}async function mw(){try{await nc()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const rs={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function vw(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class Gn{constructor(e,n,i="main",r=rs.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=i,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const i of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const s=await r.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),i=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!i)throw new Error("Export did not contain a pubspec.yaml.");const r=i.slice(0,i.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{s.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[i].async("string"),files:s}}async pushCodeWithRetry(e,n=3,i=null){const r=[rs.production,rs.staging],s=Math.max(0,r.indexOf(this._endpoint));let o=!1,a=null;for(let l=0;lsetTimeout(h,1e3*(l+1)));continue}if(d.ok)return console.log(`Push to ${c} succeeded!`),d;a=d.status;const f=d.status<500&&!o;if(ul(f?d.clone():d,Qh).then(p=>console.log(`Push to ${c} returned ${d.status}: ${p}`),()=>console.log(`Push to ${c} returned ${d.status} (unreadable response body)`)),d.status>=500&&(o=!0),d.status===500){console.warn(`Endpoint ${c} returned 500, trying next...`),await new Promise(p=>setTimeout(p,1e3*(l+1)));continue}if(d.status>=500)throw new ot(`FlutterFlow reported a server error (HTTP ${d.status}), which cannot prove the push was refused — the write may have been applied before the failure. Open your FlutterFlow project to reconcile before retrying.`);if(o)throw new ot(`The push was refused (HTTP ${d.status}), but an earlier sync attempt may already have applied it — server errors and dropped responses cannot prove a refusal. Open your FlutterFlow project to reconcile before retrying.`);return d}throw hd({httpStatus:a})}async pushCode(e,n=null){return this.pushCodeWithRetry(e,3,n)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const i=JSON.parse(e.value);if(i&&Array.isArray(i.entries))return i.entries.map(r=>({id:r.id,name:r.project?.name||r.id}))}catch(i){console.error("Failed to parse stringified project value:",i)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,i="";for(const r of e){const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await s.json());if(n=s.status,i=await s.text(),console.warn(`listProjects via ${r} returned ${n}: ${i}`),s.status===401||s.status===403)throw new Error(vw(s.status,i));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${i}`)}throw new Error(`List projects failed: ${n} - ${i}`)}}function ul(t,e){const n=t.body?.getReader?.(),i=n?(async()=>{const r=new TextDecoder;let s="";for(;;){const{done:o,value:a}=await n.read();if(o)break;s+=r.decode(a,{stream:!0})}return s+r.decode()})():Promise.resolve("");return dc(i,e,(r,s)=>{try{n?.cancel()?.catch?.(()=>{})}catch{}s(new Error("The response body stalled before it finished."))})}async function yw(t,e=Qh){const n=t.clone();let i;try{i=JSON.parse(await ul(t,e))}catch{let o="";try{o=await ul(n,e)}catch{}if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:o||`HTTP ${t.status}`,errorMap:new Map};throw new ot(`FlutterFlow accepted the sync but returned an unreadable response${o?`: ${o.slice(0,200)}`:"."}`)}if(!t.ok){let s=i.message||`HTTP ${t.status}`,o=new Map;if(i.errors)o=new Map(Object.entries(i.errors));else if(!i.message&&typeof i=="object"){const a=Object.keys(i).filter(l=>l.endsWith(".dart")&&Array.isArray(i[l]));a.length>0&&(o=new Map(Object.entries(i)),s=a.flatMap(u=>i[u].map(c=>`${u}: ${c.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:s,errorMap:o}}let r={};if(i.value)try{r=typeof i.value=="string"?JSON.parse(i.value):i.value}catch(s){console.warn("Ignoring malformed push response value:",s)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function cc(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const X={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},Ip=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,kp=/extends\s+State<\w+>/;function _w(t,e=""){if(t==="pubspec.yaml")return X.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return X.OTHER;if(t==="custom_functions.dart")return X.FUNCTION;if(e){const n=Ip.test(e),i=kp.test(e);if(n||i)return X.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return X.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return X.FUNCTION}return X.CODE_FILE}function Cp(t,e){switch(e){case X.ACTION:return`lib/custom_code/actions/${t}`;case X.WIDGET:return`lib/custom_code/widgets/${t}`;case X.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case X.CODE_FILE:return`lib/custom_code/${t}`;case X.DEPENDENCIES:return"pubspec.yaml";case X.OTHER:return`lib/custom_code/${t}`;default:return t}}async function uc(t,e=new Map){return fy(t,e)}const dl=new Map,ui=new Map,di=new Map;function xr(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ei(t){dl.delete(xr(t))}function ss(t,e,n){const i=xr(t),r=ui.get(i)??new Map;for(const{path:s,content:o}of e){const a=r.get(s)??new Map,l=a.get(o)??{uncertain:0,verified:0};n.uncertain&&(l.uncertain+=n.uncertain),n.verified&&(l.verified+=n.verified),l.uncertain<=0&&l.verified<=0?a.delete(o):a.set(o,l),a.size===0?r.delete(s):r.set(s,a)}r.size===0?ui.delete(i):ui.set(i,r)}function ww(t,e){ss(t,e,{uncertain:1})}function bw(t){const e=xr(t);di.set(e,(di.get(e)??0)+1)}function Fd(t){const e=xr(t),n=(di.get(e)??0)-1;n<=0?di.delete(e):di.set(e,n)}function dc(t,e,n){return new Promise((i,r)=>{let s=!1;const o=(l,u,c)=>{s||(s=!0,c==="resolve"?i(u):r(u))},a=setTimeout(()=>{s||(s=!0,n(i,r))},e);t.then(l=>{clearTimeout(a),o(i,l,"resolve")},l=>{clearTimeout(a),o(r,l,"reject")})})}async function fc(t,e,n=Xh){const i={stop:!1},r=(async()=>{const s=await t.pushCode(e,i);return yw(s)})();return dc(r,n,(s,o)=>{i.stop=!0,Ei(t),bw(t),r.then(()=>Fd(t),()=>Fd(t)),o(new ot("FlutterFlow did not answer the sync in time — the push may still have been applied. The outcome is not yet known: open your FlutterFlow project to reconcile before retrying the deploy."))})}async function hc(t,e,n,i,r="",s=Xh){const o=Ky(e,n);if(o.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const a=H_(o,r),l={...a.manifest,sources:a.sources},u=a.skipped.map(h=>h.reason);u.forEach(h=>console.warn(`[custom class deploy] ${h}`));const c=a.approximate;c.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${o.length} new FlutterFlow custom code file(s) before sync.`),We.set("provision");let d=!0,f,p;try{if(p=(async()=>{let h;try{h=await fetch(S0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:i,customClasses:o,verification:l,stream:!0})})}catch{throw new ot("The provisioning request did not return a response. The deploy may have reached the FlutterFlow server — open your FlutterFlow project to reconcile before retrying.")}return q_(h,{onPhase:g=>{d&&We.setSubstatus(g)},onLog:g=>{d&&console.log(`[custom class deploy] ${g}`)}})})(),f=await dc(p,s,(h,g)=>{d=!1,g(new ot("The deploy is still working on the FlutterFlow server, but this browser tab has stopped waiting. Your custom classes may or may not have been written — the outcome is not yet known. Open your FlutterFlow project to reconcile before retrying the deploy."))}),!f.finalResultReceived){if(pd(f)===De.FAILED)throw new Error(f.error||`FlutterFlow custom class provisioning failed (HTTP ${f.httpStatus}).`);const h=f.httpRejected&&typeof f.httpStatus=="number"?`The FlutterFlow deploy runner returned HTTP ${f.httpStatus} without reporting a result.`:"The connection to the FlutterFlow deploy runner dropped before it reported a result.";throw new ot(`${h} The deploy may still be finishing on the server; open your FlutterFlow project to reconcile before retrying.`)}if(!f.success){const h=f.details?` ${f.details}`:"",g=`${f.error||"FlutterFlow custom class provisioning failed."}${h}`;throw pd(f)===De.UNCONFIRMED?new ot(`${g} The failure arrived after the deploy began — custom classes may already be written. Open your FlutterFlow project to reconcile before retrying.`):new Error(g)}}catch(h){throw h instanceof ot&&(Ei(t),ww(t,o),p?.then(g=>{g?.finalResultReceived&&g.success?ss(t,o,{uncertain:-1,verified:1}):g?.finalResultReceived&&tp(g)&&ss(t,o,{uncertain:-1})},()=>{})),h}return Ei(t),ss(t,o,{verified:1}),f.verificationSkipped&&(console.warn(`[custom class deploy] ${f.verificationSkipped}`),u.push(f.verificationSkipped)),{remoteFiles:n,syncFileMap:Yy(e,o),unverified:u,approximate:c,provisionSucceeded:!0}}async function pc(t,e={}){const n=xr(t);let i=dl.get(n);if(i===void 0){try{i=await t.fetchProjectSource()}catch(u){throw new Error(`Could not read your project's pubspec.yaml (${u.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Jh(i.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);const l=ui.get(n);if(l){for(const[u,c]of[...l]){const d=i.files.get(u);if(d!==void 0){const f=c.get(d);f&&(f.verified>0?(f.verified-=1,f.explainedByVerified=!0):f.explainedByVerified||(f.uncertain-=1),f.uncertain<=0&&f.verified<=0&&c.delete(d))}c.size===0&&l.delete(u)}l.size===0&&ui.delete(n)}!ui.has(n)&&!di.has(n)&&dl.set(n,i)}const r=await a0(i.pubspecYaml,e),s=O_(i.pubspecYaml,r.overrides),o=N_(s.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>{const l=r.additions[a],u=l?.sdk?`sdk: ${l.sdk}`:l||"any";return`${a}: ${u}`}).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:r.warnings,remoteFiles:i.files}}function Ew(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const i=t.content.split(` +`).length;i>500&&n.push(`Code has ${i} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===X.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const s=h_(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===X.WIDGET){const o=Dh(t.content),a=u_(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${jh(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function Ap(t,e={}){const{artifactType:n="CustomWidget",artifactName:i="GeneratedCode",fileName:r}=e,s=l_(t);let o=r||i;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Dh(s)[0],c=u?jh(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=X.CODE_FILE;switch(n){case"CustomAction":a=X.ACTION;break;case"CustomWidget":a=X.WIDGET;break;case"CustomFunction":a=X.FUNCTION;break;case"CustomClass":case"CodeFile":a=X.CODE_FILE;break}let l="";return a===X.WIDGET?l=`// Automatic FlutterFlow imports import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; @@ -114,15 +114,15 @@ import '/flutter_flow/lat_lng.dart'; import '/flutter_flow/place.dart'; import '/flutter_flow/uploaded_file.dart'; -`),{content:yy(s,l),fileName:o,codeType:a,artifactType:n,artifactName:i}}function rw(t){const e={};for(const n of Pl(t))e[n]="";return e}function sw(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function ow(t,e,n,i=new Set,r=""){const s=[],o=up.test(e),a=dp.test(e);return n===X.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function Xs(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const i=new Set(Array.from(t.values()).flatMap(r=>Hs(r.content||"")));for(const[r,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${r} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=ow(r,s.content,s.type,i,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Nh(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}const ne={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:ne.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=ne.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(ne).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===ne.PREPARING&&(this.startTime=Date.now()),(t===ne.SUCCESS||t===ne.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(ne.ERROR)},setSuccess(t){this.result=t,this.setState(ne.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===ne.PREPARING||this.currentState===ne.VALIDATING||this.currentState===ne.PUSHING}};async function aw(t,e,n={}){let{codeType:i="W"}=n;const{pubspecDeps:r={},artifactName:s=e}=n;i==="CustomWidget"&&(i=X.WIDGET),i==="CustomAction"&&(i=X.ACTION),i==="CustomFunction"&&(i=X.FUNCTION),i==="CustomClass"&&(i=X.CODE_FILE),i==="CodeFile"&&(i=X.CODE_FILE),K.reset(),K.setState(ne.PREPARING);try{const o=await Oe("flutterflow"),a=await Oe("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Ys(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=St(),u=new _i(o,a,"main",l);K.setState(ne.VALIDATING);const c=new Map,d=i||ew(e,t),f=fp(e,d);c.set(e,{artifactName:s,content:t,type:d,path:f}),K.setProgress(0,c.size);const p=Xs(c);if(!p.valid)throw new Error(`Validation failed: +`),{content:$y(s,l),fileName:o,codeType:a,artifactType:n,artifactName:i}}function Sw(t){const e={};for(const n of Hl(t))e[n]="";return e}function xw(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function Iw(t,e,n,i=new Set,r=""){const s=[],o=Ip.test(e),a=kp.test(e);return n===X.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function lo(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const i=new Set(Array.from(t.values()).flatMap(r=>Js(r.content||"")));for(const[r,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${r} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=Iw(r,s.content,s.type,i,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Jh(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}const ne={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:ne.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=ne.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(ne).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===ne.PREPARING&&(this.startTime=Date.now()),(t===ne.SUCCESS||t===ne.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(ne.ERROR)},setSuccess(t){this.result=t,this.setState(ne.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===ne.PREPARING||this.currentState===ne.VALIDATING||this.currentState===ne.PUSHING}};async function gc(t){const e=t!==void 0?t:await Ne("flutterflow"),n=await Ne("flutterflow_project_id");if(!e||!n)return"";if(vp(n,e))return n;const i=++no,r=vt;let s=!1;try{s=(await new Gn(e,"","main",Ge()).listProjects()||[]).some(l=>(l.id||l.projectId)===n)}catch(o){const a=String(o&&o.message||"");if(!/denied \(403\)|without list permission/i.test(a))return"";s=!0}return r!==vt||e!==Ie||i<=un||(un=i,!s)?"":((!Lt||Lt.projectId===n)&&yr(n,e,r),n)}async function kw(t,e,n={}){let{codeType:i="W"}=n;const{pubspecDeps:r={},artifactName:s=e}=n;i==="CustomWidget"&&(i=X.WIDGET),i==="CustomAction"&&(i=X.ACTION),i==="CustomFunction"&&(i=X.FUNCTION),i==="CustomClass"&&(i=X.CODE_FILE),i==="CodeFile"&&(i=X.CODE_FILE),K.reset(),K.setState(ne.PREPARING);try{const o=await Ne("flutterflow"),a=Ge();let l=await gc(o);if((o!==Ie||a!==Ge())&&(l=""),!o)throw new Error("FlutterFlow API Key not configured. Please set your API key in the API Keys settings.");if(!l)throw new Error("No confirmed FlutterFlow project target. Choose a project from the loaded list in API Keys settings.");if(!ro(l))throw new Error("Invalid FlutterFlow Project ID format.");const u=new Gn(o,l,"main",a);K.setState(ne.VALIDATING);const c=new Map,d=i||_w(e,t),f=Cp(e,d);c.set(e,{artifactName:s,content:t,type:d,path:f}),K.setProgress(0,c.size);const p=lo(c);if(!p.valid)throw new Error(`Validation failed: ${p.errors.join(` -`)}`);const h=await ec(u,r),g=h.yaml,m=await Ql(u,c,h.remoteFiles,`Provision ${s} custom class`,g),v=await Jl(m.syncFileMap,m.remoteFiles),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),He.set("package");const x=await tc(b),y={project_id:a,zipped_custom_code:x,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:v.fileMapContents,functions_map:v.functionsMapContents};K.setState(ne.PUSHING),K.setProgress(1,c.size),mi(u),He.set("push");const E=await Xl(u,y);if(E.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:E.errorMap&&E.errorMap.size>0?Array.from(E.errorMap.entries()):[]});else{const k=E.errorMessage||Yl(E.responseCode),R=new Error(k);throw R.remoteRefusal=!0,R}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:h.added,unverified:m.unverified,approximate:m.approximate,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),o instanceof rt?{success:!1,unconfirmed:!0,error:o.message,state:K.currentState}:{success:!1,error:o.message,remoteRefusal:o.remoteRefusal===!0,state:K.currentState}}}async function tc(t){const e=new JSZip;for(const[n,i]of t.entries())e.file(n,i.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function lw(t,e={}){const{artifactType:n,artifactName:i,fileName:r,pipelineResult:s}=e;console.log(`Starting commit for ${i} (${n})`);let o=!1;const a={projectId:null,endpoint:St(),artifactType:n,artifactName:i,fileName:r};try{K.setState(ne.PREPARING);const l=hp(t,{artifactType:n,artifactName:i,fileName:r}),u=rw(l.content);console.log("Detected dependencies:",u),K.setState(ne.VALIDATING);const c=await Oe("flutterflow"),d=Zi||await Oe("flutterflow_project_id");if(!c)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!d)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ys(d))throw new Error("Invalid FlutterFlow Project ID format.");a.projectId=d;const f=new Map;f.set(l.fileName,{artifactName:i,content:l.content,type:l.codeType,path:fp(l.fileName,l.codeType),functionName:l.codeType===X.FUNCTION?i:void 0}),K.setProgress(0,f.size);const p=Xs(f);if(!p.valid)throw new Error(`File validation failed: -${p.errors.join(` -`)}`);p.warnings.length>0&&console.warn("Validation warnings:",p.warnings),K.setState(ne.PUSHING);const h=St(),g=new _i(c,d,"main",h),m=await ec(g,u),v=m.yaml,b=await Ql(g,f,m.remoteFiles,`Provision ${i} custom class`,v);o=b.provisionSucceeded===!0;const x=await Jl(b.syncFileMap,b.remoteFiles),y=new Map(b.syncFileMap);y.set("pubspec.yaml",{content:v,type:X.DEPENDENCIES,path:"pubspec.yaml"}),He.set("package");const E=await tc(y),k={project_id:d,zipped_custom_code:E,uid:`web_${Date.now()}`,branch_name:g.branchName,serialized_yaml:v,file_map:x.fileMapContents,functions_map:x.functionsMapContents};K.setProgress(1,f.size),mi(g),He.set("push");const R=await Xl(g,k);if(R.success){const S={...sw(l,s),projectId:d};return K.setSuccess({...S,fileCount:f.size,warnings:R.errorMap?Array.from(R.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${l.fileName} to FlutterFlow`,metadata:S,targetIdentity:a,addedDependencies:m.added,unverified:b.unverified,approximate:b.approximate,warnings:R.errorMap?Array.from(R.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const S=R.errorMessage||Yl(R.responseCode),F=new Error(S);throw F.errorMap=R.errorMap,F.remoteRefusal=!0,F}}catch(l){console.error("Commit execution failed:",l),K.setError(l);let u=new Map;if(l.errorMap)u=l.errorMap;else if(l.message&&l.message.includes("{"))try{const c=l.message.match(/\{[\s\S]*\}/);if(c){const d=JSON.parse(c[0]);u=new Map(Object.entries(d))}}catch(c){console.warn("Failed to parse error map from commit response:",c)}return l instanceof rt?{success:!1,unconfirmed:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:o?{success:!1,partial:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:l.message,errorMap:u,remoteRefusal:l.remoteRefusal===!0,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function cw(t,e={}){const{pipelineResult:n}=e;let i=!1;const r={projectId:null,endpoint:St(),artifactType:"Bundle",artifactName:t?.title,fileName:t?.fileEntries?`${t.fileEntries.length} artifacts`:"bundle"};try{if(K.setState(ne.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: +`)}`);const h=await pc(u,r),g=h.yaml,m=await hc(u,c,h.remoteFiles,`Provision ${s} custom class`,g),v=await uc(m.syncFileMap,m.remoteFiles),x=new Map(m.syncFileMap);x.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),We.set("package");const E=await mc(x),y={project_id:l,zipped_custom_code:E,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:v.fileMapContents,functions_map:v.functionsMapContents};K.setState(ne.PUSHING),K.setProgress(1,c.size),Ei(u),We.set("push");const S=await fc(u,y);if(S.success)K.setSuccess({fileCount:c.size,projectId:l,warnings:S.errorMap&&S.errorMap.size>0?Array.from(S.errorMap.entries()):[]});else{const I=S.errorMessage||cc(S.responseCode),R=new Error(I);throw R.remoteRefusal=!0,R}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${l}`,addedDependencies:h.added,unverified:m.unverified,approximate:m.approximate,warnings:S.errorMap?Array.from(S.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),o instanceof ot?{success:!1,unconfirmed:!0,error:o.message,state:K.currentState}:{success:!1,error:o.message,remoteRefusal:o.remoteRefusal===!0,state:K.currentState}}}async function mc(t){const e=new JSZip;for(const[n,i]of t.entries())e.file(n,i.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function Cw(t,e={}){const{artifactType:n,artifactName:i,fileName:r,pipelineResult:s}=e;console.log(`Starting commit for ${i} (${n})`);let o=!1;const a={projectId:null,endpoint:Ge(),artifactType:n,artifactName:i,fileName:r};try{K.setState(ne.PREPARING);const l=Ap(t,{artifactType:n,artifactName:i,fileName:r}),u=Sw(l.content);console.log("Detected dependencies:",u),K.setState(ne.VALIDATING);const c=await Ne("flutterflow"),d=Ge(),f=await Ne("flutterflow_project_id");let p=nr||await gc(c);if((c!==Ie||d!==Ge())&&(p=""),!c)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!p)throw new Error(f?"The FlutterFlow project target is not confirmed for your current API key. Reopen the deploy dialog and choose a project from the loaded list.":"FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!ro(p))throw new Error("Invalid FlutterFlow Project ID format.");a.projectId=p;const h=new Map;h.set(l.fileName,{artifactName:i,content:l.content,type:l.codeType,path:Cp(l.fileName,l.codeType),functionName:l.codeType===X.FUNCTION?i:void 0}),K.setProgress(0,h.size);const g=lo(h);if(!g.valid)throw new Error(`File validation failed: +${g.errors.join(` +`)}`);g.warnings.length>0&&console.warn("Validation warnings:",g.warnings),K.setState(ne.PUSHING);const m=new Gn(c,p,"main",d),v=await pc(m,u),x=v.yaml,E=await hc(m,h,v.remoteFiles,`Provision ${i} custom class`,x);o=E.provisionSucceeded===!0;const y=await uc(E.syncFileMap,E.remoteFiles),S=new Map(E.syncFileMap);S.set("pubspec.yaml",{content:x,type:X.DEPENDENCIES,path:"pubspec.yaml"}),We.set("package");const I=await mc(S),R={project_id:p,zipped_custom_code:I,uid:`web_${Date.now()}`,branch_name:m.branchName,serialized_yaml:x,file_map:y.fileMapContents,functions_map:y.functionsMapContents};K.setProgress(1,h.size),Ei(m),We.set("push");const b=await fc(m,R);if(b.success){const P={...xw(l,s),projectId:p};return K.setSuccess({...P,fileCount:h.size,warnings:b.errorMap?Array.from(b.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${l.fileName} to FlutterFlow`,metadata:P,targetIdentity:a,addedDependencies:v.added,unverified:E.unverified,approximate:E.approximate,warnings:b.errorMap?Array.from(b.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const P=b.errorMessage||cc(b.responseCode),T=new Error(P);throw T.errorMap=b.errorMap,T.remoteRefusal=!0,T}}catch(l){console.error("Commit execution failed:",l),K.setError(l);let u=new Map;if(l.errorMap)u=l.errorMap;else if(l.message&&l.message.includes("{"))try{const c=l.message.match(/\{[\s\S]*\}/);if(c){const d=JSON.parse(c[0]);u=new Map(Object.entries(d))}}catch(c){console.warn("Failed to parse error map from commit response:",c)}return l instanceof ot?{success:!1,unconfirmed:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:o?{success:!1,partial:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:l.message,errorMap:u,remoteRefusal:l.remoteRefusal===!0,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Aw(t,e={}){const{pipelineResult:n}=e;let i=!1;const r={projectId:null,endpoint:Ge(),artifactType:"Bundle",artifactName:t?.title,fileName:t?.fileEntries?`${t.fileEntries.length} artifacts`:"bundle"};try{if(K.setState(ne.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: ${t.errors.join(` -`)}`);const s=new Map(t.fileEntries.map(E=>[E.fileName,{artifactId:E.artifactId,artifactName:E.artifactName,content:E.content,type:E.type,path:E.path,functionName:E.type===X.FUNCTION?E.artifactName:void 0}]));K.setProgress(0,s.size);const o=Xs(s);if(!o.valid)throw new Error(`File validation failed: +`)}`);const s=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===X.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,s.size);const o=lo(s);if(!o.valid)throw new Error(`File validation failed: ${o.errors.join(` -`)}`);K.setState(ne.VALIDATING);const a=await Oe("flutterflow"),l=Zi||await Oe("flutterflow_project_id");if(!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!l)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ys(l))throw new Error("Invalid FlutterFlow Project ID format.");r.projectId=l,K.setState(ne.PUSHING);const u=St(),c=new _i(a,l,"main",u),d=await ec(c,t.dependencies),f=d.yaml,p=await Ql(c,s,d.remoteFiles,`Provision ${t.title} custom classes`,f);i=p.provisionSucceeded===!0;const h=await Jl(p.syncFileMap,p.remoteFiles),g=new Map(p.syncFileMap);g.set("pubspec.yaml",{content:f,type:X.DEPENDENCIES,path:"pubspec.yaml"}),He.set("package");const m=await tc(g),v={project_id:l,zipped_custom_code:m,uid:`web_${Date.now()}`,branch_name:c.branchName,serialized_yaml:f,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,s.size),mi(c),He.set("push");const b=await Xl(c,v);if(b.success){const E={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((k,R)=>k+R.content.length,0),projectId:l};return K.setSuccess({...E,fileCount:s.size,warnings:b.errorMap?Array.from(b.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:E,targetIdentity:r,addedDependencies:d.added,unverified:p.unverified,approximate:p.approximate,warnings:b.errorMap?Array.from(b.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const x=b.errorMessage||Yl(b.responseCode),y=new Error(x);throw y.errorMap=b.errorMap,y.remoteRefusal=!0,y}catch(s){console.error("Bundle commit execution failed:",s),K.setError(s);const o=s.errorMap||new Map;return s instanceof rt?{success:!1,unconfirmed:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:i?{success:!1,partial:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function uw(t,e=[]){const n=Il("architect");try{return await Ns("architect",Xh,Dv(t),n,e)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Prompt Architect failed: ${i.message}`)}}async function Qs(t,e,n=[],i){const r=jv(t),s=Il("generator",_.bundleSpec);try{return await Ns("generator",e,r,s,n)}catch(o){if(o.isModelArmor||o.isUsageLimit||o.isPipelineCancel)throw o;if(e!==Or){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,o.message),gb(e,Or,i);try{return await Ns("generator",Or,r,s,n)}catch(a){throw a.isModelArmor||a.isUsageLimit||a.isPipelineCancel?a:new Error(`Code Generator failed: primary (${e}): ${o.message} | fallback (${Or}): ${a.message}`)}}throw new Error(`Code Generator failed: ${o.message}`)}}async function eo(t,e=null){const n={...Il("review",_.artifactBundle||_.bundleSpec),architect_output:e};try{return await Ns("review",Qh,Uv(t),n)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Code Review failed: ${i.message}`)}}function Ms(t,e){const n=document.getElementById(`step${t}-item`),i=document.getElementById(`step${t}-status`);!n||!i||(n.classList.remove("active","completed","error"),i.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),i.classList.add("running"),i.innerHTML=` +`)}`);K.setState(ne.VALIDATING);const a=await Ne("flutterflow"),l=Ge(),u=await Ne("flutterflow_project_id");let c=nr||await gc(a);if((a!==Ie||l!==Ge())&&(c=""),!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!c)throw new Error(u?"The FlutterFlow project target is not confirmed for your current API key. Reopen the deploy dialog and choose a project from the loaded list.":"FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!ro(c))throw new Error("Invalid FlutterFlow Project ID format.");r.projectId=c,K.setState(ne.PUSHING);const d=new Gn(a,c,"main",l),f=await pc(d,t.dependencies),p=f.yaml,h=await hc(d,s,f.remoteFiles,`Provision ${t.title} custom classes`,p);i=h.provisionSucceeded===!0;const g=await uc(h.syncFileMap,h.remoteFiles),m=new Map(h.syncFileMap);m.set("pubspec.yaml",{content:p,type:X.DEPENDENCIES,path:"pubspec.yaml"}),We.set("package");const v=await mc(m),x={project_id:c,zipped_custom_code:v,uid:`web_${Date.now()}`,branch_name:d.branchName,serialized_yaml:p,file_map:g.fileMapContents,functions_map:g.functionsMapContents};K.setProgress(1,s.size),Ei(d),We.set("push");const E=await fc(d,x);if(E.success){const I={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((R,b)=>R+b.content.length,0),projectId:c};return K.setSuccess({...I,fileCount:s.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,targetIdentity:r,addedDependencies:f.added,unverified:h.unverified,approximate:h.approximate,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const y=E.errorMessage||cc(E.responseCode),S=new Error(y);throw S.errorMap=E.errorMap,S.remoteRefusal=!0,S}catch(s){console.error("Bundle commit execution failed:",s),K.setError(s);const o=s.errorMap||new Map;return s instanceof ot?{success:!1,unconfirmed:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:i?{success:!1,partial:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Pw(t,e=[]){const n=Bl("architect");try{return await qs("architect",fp,ey(t),n,e)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Prompt Architect failed: ${i.message}`)}}async function co(t,e,n=[],i){const r=ty(t),s=Bl("generator",_.bundleSpec);try{return await qs("generator",e,r,s,n)}catch(o){if(o.isModelArmor||o.isUsageLimit||o.isPipelineCancel)throw o;if(e!==qr){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,o.message),$b(e,qr,i);try{return await qs("generator",qr,r,s,n)}catch(a){throw a.isModelArmor||a.isUsageLimit||a.isPipelineCancel?a:new Error(`Code Generator failed: primary (${e}): ${o.message} | fallback (${qr}): ${a.message}`)}}throw new Error(`Code Generator failed: ${o.message}`)}}async function uo(t,e=null){const n={...Bl("review",_.artifactBundle||_.bundleSpec),architect_output:e};try{return await qs("review",hp,ny(t),n)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Code Review failed: ${i.message}`)}}function Hs(t,e){const n=document.getElementById(`step${t}-item`),i=document.getElementById(`step${t}-status`);!n||!i||(n.classList.remove("active","completed","error"),i.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),i.classList.add("running"),i.innerHTML=` `):e==="completed"?(n.classList.add("completed"),i.classList.add("completed"),i.innerHTML=` @@ -130,12 +130,12 @@ ${o.errors.join(` `):i.innerHTML=` - `)}function Te(t,e){const n=document.getElementById(`step${t}-loading`),i=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),i.classList.add("hidden"),Ms(t,"active")):(n.classList.add("hidden"),i.classList.remove("hidden"),Ms(t,"completed"))}function dw(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function fw(t){lt(parseInt(t.replace("step","")))}function lt(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),Dn();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const i=document.getElementById(`step${t}-content`);i&&i.classList.remove("hidden");const r=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=s[t]||"Active Workflow Stage")}function hw(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(i=>{console.warn("Failed to copy to clipboard:",i)})}function el(t){const e=tl(t);console.log(`Step 1 (Prompt Architect): ${Jt(Xh)}`),console.log(e!==t?`Step 2 (Code Generator): ${Jt(t)} → ${Jt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${Jt(t)}`),console.log(`Step 3 (Code Review): ${Jt(Qh)}`)}function pp(){return{step1Result:_.step1Result,step2Result:_.step2Result,step3Result:_.step3Result,artifactBundle:_.artifactBundle,bundleReview:_.bundleReview,selectedArtifactId:_.selectedArtifactId}}function pw(t){if(!t)return;Object.assign(_,t),new Set((_.artifactBundle?.artifacts||[]).map(n=>n.id)).has(_.selectedArtifactId)||(_.selectedArtifactId=di(_.artifactBundle)?.id||null)}const gp="results-replacement-error";function gw(t,{stage:e=2,runId:n,retry:i}){if(!le(n))return;const r=document.getElementById(gp);if(!r)return;const s=Wh(t),o=document.getElementById("results-replacement-error-title"),a=document.getElementById("results-replacement-error-message"),l=document.getElementById("results-replacement-error-retry"),u=document.getElementById("results-replacement-error-upgrade");o&&(o.textContent=`${ro[e]||"Regeneration"}: ${s.title}`),a&&(a.textContent=s.message),r.hidden=!1;let c=null;u&&(u.hidden=!s.canUpgrade,s.canUpgrade&&(u.textContent="View plans",u.onclick=()=>vi(),c=u)),l&&(l.hidden=s.canUpgrade,s.canUpgrade||(l.onclick=()=>{nc(),typeof i=="function"&&i()},l.textContent="Retry",c=l)),(c||r).focus({preventScroll:!0})}function nc(){const t=document.getElementById(gp);t&&(t.hidden=!0)}function mp(t,{previous:e,stage:n,runId:i,retry:r}){le(i)&&(t.isUsageLimit&&fn(),pw(e),wr(),Lt(!0),br(),uo(),yn(),gw(t,{stage:n,runId:i,retry:r}),on())}async function vp(){if(console.log("runRefinement called"),_.isRunning)return;const t=document.getElementById("code-generator-model").value;_.isRunning=!0;const e=so();ic("standardRegenerate",_.step2Result,_.step1Result);const n=document.querySelectorAll(".btn-refine-action"),i=pp();n.forEach(r=>{r.disabled=!0,r.innerHTML=` + `)}function $e(t,e){const n=document.getElementById(`step${t}-loading`),i=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),i.classList.add("hidden"),Hs(t,"active")):(n.classList.add("hidden"),i.classList.remove("hidden"),Hs(t,"completed"))}function Fw(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function Rw(t){ut(parseInt(t.replace("step","")))}function ut(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),zn();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const i=document.getElementById(`step${t}-content`);i&&i.classList.remove("hidden");const r=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=s[t]||"Active Workflow Stage")}function Tw(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(i=>{console.warn("Failed to copy to clipboard:",i)})}function fl(t){const e=hl(t);console.log(`Step 1 (Prompt Architect): ${nn(fp)}`),console.log(e!==t?`Step 2 (Code Generator): ${nn(t)} → ${nn(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${nn(t)}`),console.log(`Step 3 (Code Review): ${nn(hp)}`)}function Pp(){return{step1Result:_.step1Result,step2Result:_.step2Result,step3Result:_.step3Result,artifactBundle:_.artifactBundle,bundleReview:_.bundleReview,selectedArtifactId:_.selectedArtifactId}}function $w(t){if(!t)return;Object.assign(_,t),new Set((_.artifactBundle?.artifacts||[]).map(n=>n.id)).has(_.selectedArtifactId)||(_.selectedArtifactId=yi(_.artifactBundle)?.id||null)}const Fp="results-replacement-error";function Mw(t,{stage:e=2,runId:n,retry:i}){if(!le(n))return;const r=document.getElementById(Fp);if(!r)return;const s=ip(t),o=document.getElementById("results-replacement-error-title"),a=document.getElementById("results-replacement-error-message"),l=document.getElementById("results-replacement-error-retry"),u=document.getElementById("results-replacement-error-upgrade");o&&(o.textContent=`${go[e]||"Regeneration"}: ${s.title}`),a&&(a.textContent=s.message),r.hidden=!1;let c=null;u&&(u.hidden=!s.canUpgrade,s.canUpgrade&&(u.textContent="View plans",u.onclick=()=>Si(),c=u)),l&&(l.hidden=s.canUpgrade,s.canUpgrade||(l.onclick=()=>{vc(),typeof i=="function"&&i()},l.textContent="Retry",c=l)),(c||r).focus({preventScroll:!0})}function vc(){const t=document.getElementById(Fp);t&&(t.hidden=!0)}function Rp(t,{previous:e,stage:n,runId:i,retry:r}){le(i)&&(t.isUsageLimit&&_n(),$w(e),Cr(),jt(!0),Ar(),bo(),In(),Mw(t,{stage:n,runId:i,retry:r}),hn())}async function Tp(){if(console.log("runRefinement called"),_.isRunning)return;const t=document.getElementById("code-generator-model").value;_.isRunning=!0;const e=mo();yc("standardRegenerate",_.step2Result,_.step1Result);const n=document.querySelectorAll(".btn-refine-action"),i=Pp();n.forEach(r=>{r.disabled=!0,r.innerHTML=` - Refining...`});try{nc();const r=Gl(),s=r.id,o=Hv({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,artifactId:r.id,userFeedback:"Fix the issues listed in the audit report."});co({runId:e}),Tt(2,e),lt(2),Te(2,!0);const a=await Qs(o,t,[],e);if(!le(e))return;_.step2Result=a,Js(),sn(2,e);const l=document.getElementById("step2-output"),u=hi(_.step2Result);l.textContent=u,l.dataset.raw=u,Te(2,!1),lt(3),Tt(3,e),Te(3,!0);const c=await eo(_.step2Result,_.step1Result);if(!le(e))return;_.step3Result=c,Zs(),sn(3,e),_.artifactBundle?.artifacts?.some(p=>p.id===s)?_.selectedArtifactId=s:_.selectedArtifactId=di(_.artifactBundle)?.id||null;const d=document.getElementById("step3-output");d.textContent=_.step3Result,Te(3,!1),wr();const f=Gs(_.step3Result);br(u,f)}catch(r){if(console.error("Refinement failed:",r),!le(e))return;const s=Vs(r,{architect:2,generator:2,review:3});mp(r,{previous:i,stage:s,runId:e,retry:vp})}finally{n.forEach(r=>{r.disabled=!1,r.textContent="Refine & Regenerate"}),le(e)&&(_.isRunning=!1,on())}}async function ic(t,e,n){const i=`${Et}/connectFeedback`,r={type:t,code:e,input:n};try{const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function mw(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function yp(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!_.step2Result){Ie("No generated code found. Please run the full pipeline first.","warning");return}if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=so();ic("flutterflowError",_.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` + Refining...`});try{vc();const r=ac(),s=r.id,o=iy({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,artifactId:r.id,userFeedback:"Fix the issues listed in the audit report."});wo({runId:e}),Ot(2,e),ut(2),$e(2,!0);const a=await co(o,t,[],e);if(!le(e))return;_.step2Result=a,oo(),fn(2,e);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,e),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(e))return;_.step3Result=c,ao(),fn(3,e),_.artifactBundle?.artifacts?.some(p=>p.id===s)?_.selectedArtifactId=s:_.selectedArtifactId=yi(_.artifactBundle)?.id||null;const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f)}catch(r){if(console.error("Refinement failed:",r),!le(e))return;const s=eo(r,{architect:2,generator:2,review:3});Rp(r,{previous:i,stage:s,runId:e,retry:Tp})}finally{n.forEach(r=>{r.disabled=!1,r.textContent="Refine & Regenerate"}),le(e)&&(_.isRunning=!1,hn())}}async function yc(t,e,n){const i=`${It}/connectFeedback`,r={type:t,code:e,input:n};try{const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function Lw(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function $p(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!_.step2Result){ke("No generated code found. Please run the full pipeline first.","warning");return}if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=mo();yc("flutterflowError",_.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` - Fixing…`);const s=pp();try{nc();const o=yh({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:e});Yp(),co({runId:i}),Tt(2,i),lt(2),Te(2,!0);const a=await Qs(o,n,[],i);if(!le(i))return;_.step2Result=a,Js(),sn(2,i);const l=document.getElementById("step2-output"),u=hi(_.step2Result);l.textContent=u,l.dataset.raw=u,Te(2,!1),lt(3),Tt(3,i),Te(3,!0);const c=await eo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,Zs(),sn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,Te(3,!1),wr();const f=Gs(_.step3Result);br(u,f),t&&(t.value="")}catch(o){if(console.error("Fix from errors failed:",o),!le(i))return;const a=Vs(o,{architect:2,generator:2,review:3});mp(o,{previous:s,stage:a,runId:i,retry:yp})}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,on())}}async function hr(){if(console.log("runThinkingPipeline called"),_.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value,n=Ue.slice();if(!t.trim()){Ie("Please describe your FlutterFlow widget first.","warning");return}_.isRunning=!0;const i=so();try{if(await Va,!le(i)||(mn.length&&await Promise.allSettled(mn.map(x=>x.job)),!le(i))||!await jw()||!le(i)||(await Mw(),!le(i)))return;const r=tl(e);t.length,Y0(),_.submittedPrompt=t,_.submittedImages=n.filter(x=>x.url),Os(!0),el(r),Dn();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");const o=document.getElementById("paywall-exhausted");o&&o.classList.add("hidden");const a=document.getElementById("composer")?.getBoundingClientRect(),l=document.getElementById("hero")?.getBoundingClientRect();co({prompt:t,runId:i}),_b(a,l),lt(1),Tt(1,i),Te(1,!0);const u=_.submittedImages.map(x=>({url:x.url})),c=await uw(t,u);if(!le(i))return;_.step1Result=c,J0(),sn(1,i);const d=document.getElementById("step1-output"),f=hi(_.step1Result);d.textContent=f,d.dataset.raw=f,Te(1,!1),lt(2),Tt(2,i),Te(2,!0);const p=await Qs(_.step1Result,r,u,i);if(!le(i))return;_.step2Result=p,Js(),sn(2,i);const h=document.getElementById("step2-output"),g=hi(_.step2Result);h.textContent=g,h.dataset.raw=g,Te(2,!1),lt(3),Tt(3,i),Te(3,!0);const m=await eo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=m,Zs(),sn(3,i);const v=document.getElementById("step3-output");v.textContent=_.step3Result,Te(3,!1),wr();const b=Gs(_.step3Result);br(g,b)}catch(r){if(r.isPipelineCancel||console.error("Pipeline failed:",r),!le(i))return;const s=Vs(r,{architect:1,generator:2,review:3});r.isUsageLimit?fn():(r.message,tl(document.getElementById("code-generator-model").value),void 0),lt(s),Te(s,!1),zp(r,{stage:s,runId:i}),Ms(s,"error")}finally{le(i)&&(_.isRunning=!1,Os(!1),on())}}function vw(){const t=document.getElementById("code-generator-model").value,e=[Ps,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(i=>i!==t),n=prompt(`Retry with different model? + Fixing…`);const s=Pp();try{vc();const o=$h({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:e});ug(),wo({runId:i}),Ot(2,i),ut(2),$e(2,!0);const a=await co(o,n,[],i);if(!le(i))return;_.step2Result=a,oo(),fn(2,i);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,ao(),fn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f),t&&(t.value="")}catch(o){if(console.error("Fix from errors failed:",o),!le(i))return;const a=eo(o,{architect:2,generator:2,review:3});Rp(o,{previous:s,stage:a,runId:i,retry:$p})}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,hn())}}async function wr(){if(console.log("runThinkingPipeline called"),_.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value,n=He.slice();if(!t.trim()){ke("Please describe your FlutterFlow widget first.","warning");return}_.isRunning=!0;const i=mo();try{if(await nl,!le(i)||(Sn.length&&await Promise.allSettled(Sn.map(E=>E.job)),!le(i))||!await sb()||!le(i)||(await Qw(),!le(i)))return;const r=hl(e);t.length,pw(),_.submittedPrompt=t,_.submittedImages=n.filter(E=>E.url),zs(!0),fl(r),zn();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");const o=document.getElementById("paywall-exhausted");o&&o.classList.add("hidden");const a=document.getElementById("composer")?.getBoundingClientRect(),l=document.getElementById("hero")?.getBoundingClientRect();wo({prompt:t,runId:i}),Ob(a,l),ut(1),Ot(1,i),$e(1,!0);const u=_.submittedImages.map(E=>({url:E.url})),c=await Pw(t,u);if(!le(i))return;_.step1Result=c,gw(),fn(1,i);const d=document.getElementById("step1-output"),f=wi(_.step1Result);d.textContent=f,d.dataset.raw=f,$e(1,!1),ut(2),Ot(2,i),$e(2,!0);const p=await co(_.step1Result,r,u,i);if(!le(i))return;_.step2Result=p,oo(),fn(2,i);const h=document.getElementById("step2-output"),g=wi(_.step2Result);h.textContent=g,h.dataset.raw=g,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const m=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=m,ao(),fn(3,i);const v=document.getElementById("step3-output");v.textContent=_.step3Result,$e(3,!1),Cr();const x=to(_.step3Result);Ar(g,x)}catch(r){if(r.isPipelineCancel||console.error("Pipeline failed:",r),!le(i))return;const s=eo(r,{architect:1,generator:2,review:3});r.isUsageLimit?_n():(r.message,hl(document.getElementById("code-generator-model").value),void 0),ut(s),$e(s,!1),og(r,{stage:s,runId:i}),Hs(s,"error")}finally{le(i)&&(_.isRunning=!1,zs(!1),hn())}}function Nw(){const t=document.getElementById("code-generator-model").value,e=[Os,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(i=>i!==t),n=prompt(`Retry with different model? Current: ${t} @@ -143,14 +143,14 @@ Options: 1. ${e[0]} 2. ${e[1]} -Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],hr()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],hr())}async function yw(){const t=Kl();if(!t){Ie("No code to commit. Please run the pipeline first.","warning");return}const e=await Oe("flutterflow"),n=await Oe("flutterflow_project_id");if(!e||!n){Ie("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Hl();return}if(_.artifactBundle?.artifacts?.length>1){await _w();return}const{artifactType:i,artifactName:r,fileName:s}=cp(),o=hp(t,{artifactType:i,artifactName:r,fileName:s}),a=iw(o);if(!a.canProceed){Ie(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}oc(o,a,null,null)}async function _w(){const t=await Oe("flutterflow"),e=await Oe("flutterflow_project_id");if(!t||!e){Ie("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Hl();return}const n=Py(_.artifactBundle);if(n.errors.length>0){Ie(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const i=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),r=Xs(i),s={canProceed:r.valid&&n.errors.length===0,issues:[...n.errors,...r.errors],warnings:[...n.warnings,...r.warnings]};if(!s.canProceed){Ie(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName} +Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],wr()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],wr())}async function Ow(){const t=lc();if(!t){ke("No code to commit. Please run the pipeline first.","warning");return}const e=await Ne("flutterflow"),n=await Ne("flutterflow_project_id");if(!e||!n){ke("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ic();return}if(_.artifactBundle?.artifacts?.length>1){await Bw();return}const{artifactType:i,artifactName:r,fileName:s}=xp(),o=Ap(t,{artifactType:i,artifactName:r,fileName:s}),a=Ew(o);if(!a.canProceed){ke(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}bc(o,a,null,null)}async function Bw(){const t=await Ne("flutterflow"),e=await Ne("flutterflow_project_id");if(!t||!e){ke("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ic();return}const n=qy(_.artifactBundle);if(n.errors.length>0){ke(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const i=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),r=lo(i),s={canProceed:r.valid&&n.errors.length===0,issues:[...n.errors,...r.errors],warnings:[...n.warnings,...r.warnings]};if(!s.canProceed){ke(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName} ${a.content}`).join(` -`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};oc(o,s,n.dependencies,n)}function ww(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`
+`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};bc(o,s,n.dependencies,n)}function Dw(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`

FlutterFlow Commit Failed

${W(t.error)}

`;if(e&&e.size>0){n+=`

Errors:

-
    `;for(const[r,s]of e.entries()){const o=Rl(s);n+=`
  • +
      `;for(const[r,s]of e.entries()){const o=ql(s);n+=`
    • ${W(r)}: ${W(o)}
    • `}n+="
"}n+="
",n+=`
-
`;const i=document.getElementById("step3-output");i&&(i.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{_p(t.error,e)}))}async function _p(t,e){if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=so(),r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` +
`;const i=document.getElementById("step3-output");i&&(i.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{Mp(t.error,e)}))}async function Mp(t,e){if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=mo(),r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` Fixing...`);try{let s=`The previous code had the following errors when committing to FlutterFlow: -`;if(e&&e.size>0)for(const[p,h]of e.entries()){const g=Rl(h);s+=`File: ${p} +`;if(e&&e.size>0)for(const[p,h]of e.entries()){const g=ql(h);s+=`File: ${p} Error: ${g} `}else s+=`${t} -`;const o=yh({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:s});co({runId:i}),Tt(2,i),lt(2),Te(2,!0);const a=await Qs(o,n,[],i);if(!le(i))return;_.step2Result=a,Js(),sn(2,i);const l=document.getElementById("step2-output"),u=hi(_.step2Result);l.textContent=u,l.dataset.raw=u,Te(2,!1),lt(3),Tt(3,i),Te(3,!0);const c=await eo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,Zs(),sn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,Te(3,!1),wr();const f=Gs(_.step3Result);br(u,f)}catch(s){if(console.error("Regeneration failed:",s),!le(i))return;const o=Vs(s,{architect:2,generator:2,review:3});s.isUsageLimit&&fn(),lt(o),Te(o,!1),zp(s,{stage:o,runId:i,retry:()=>_p(t,e)}),Ms(o,"error")}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,on())}}async function bw(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Oe("flutterflow"),i=await Oe("flutterflow_project_id");n&&i?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||i?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function wp(t){try{const e=await fetch(`${Et}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function Ew(t){try{const n=await(await fetch(`${Et}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Sw(t){try{const e=await fetch(`${Et}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${Et}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${Et}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function md(t,e){const n=Ep(),i=(H.email||n.email)!==t;H.email=t,H.sessionToken=e,H.isVerified=!0,fe=On({isLoading:!0}),localStorage.setItem(ks,JSON.stringify({email:t,sessionToken:e})),i&&Ap()}function bp(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=On({isResolved:!0}),localStorage.removeItem(ks),localStorage.removeItem(As)}function Ep(){try{const t=localStorage.getItem(ks);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(ks),{email:null,sessionToken:null}}}async function xw(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:i}=await Ew(e);md(n,i),Sp();const r=vd();r&&!window.location.hash&&(window.location.hash=r)}catch(n){vd();const i=n.message||"Sign-in link invalid or expired.";Ie(i,"error"),to(),Qn(i,"error")}}else{const{email:n,sessionToken:i}=Ep();if(n&&i){const r=await Sw(i);r?md(r.email,r.sessionToken):bp()}}rc()}function Iw(){try{localStorage.setItem(za,JSON.stringify({hash:window.location.hash||"#home",ts:Date.now()}))}catch(t){console.warn("rememberSignInReturnSurface: failed to persist return surface:",t)}}function vd(){try{const t=localStorage.getItem(za);if(localStorage.removeItem(za),!t)return null;const{hash:e,ts:n}=JSON.parse(t);return!e||typeof n!="number"||Date.now()-n>a0?null:e}catch(t){return console.warn("consumeSignInReturnSurface: failed to read return surface:",t),null}}function to(){const t=document.getElementById("signin-modal");if(!t)return;Iw(),document.getElementById("signin-email-input")?.removeAttribute("aria-invalid"),Qn(""),Ve(t)}function Sp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&Ge(e)}function Qn(t,e){const n=document.getElementById("signin-message");n&&(n.textContent=t||"",n.classList.remove("signin-message-success","signin-message-error"),e&&n.classList.add(`signin-message-${e}`))}async function kw(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=qs(t?.value);if(!n||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)||n.length>254){t?.setAttribute("aria-invalid","true"),Qn("Please enter a valid email address.","error");return}t?.removeAttribute("aria-invalid"),e&&(e.disabled=!0,e.textContent="Sending…");const r=Ch(n);r&&Qn(r,"error");try{const s=await wp(n),o=s?.code===kh;t&&!o&&(t.value=""),t?.setAttribute("aria-invalid",String(o)),Qn(Ah(s,n),o?"error":"success"),e&&(e.disabled=!1,e.textContent=o?"Send Sign-in Link":"Sent!",o||setTimeout(()=>{e.textContent==="Sent!"&&(e.textContent="Send Sign-in Link")},2500))}catch(s){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:n,err:s}),Qn("Something went wrong. Please try again.","error"),e&&(e.disabled=!1,e.textContent="Send Sign-in Link")}}function Cw(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=On({isResolved:!0}),f_({storage:window.localStorage,onIdentityChanged:rc,onPlanChanged:io})}const Aw=h_({sendLink:wp,getEmail:()=>H.email||"",onState:Pw});function Pw(t){const e=document.getElementById("send-new-link-btn"),n=document.getElementById("send-new-link-msg");if(!e||!n)return;if(t.status==="pending"){e.disabled=!0,e.textContent="Sending…",n.className="acct-access-msg",n.textContent="Sending a fresh sign-in link…";return}if(t.status==="sent"){e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg",n.textContent=Ah(t.data,H.email||"")||"Link sent — check your email.";return}e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg error";const i=t.error?.message?`Couldn't send a link right now. ${t.error.message}`:"Couldn't send a link right now. Please try again.";n.textContent=i}async function Fw(){await Aw()}function Rw(){const t=u_(window.localStorage),e=t.length?`Cleared disposable UI caches: ${t.join(", ")}.`:"Nothing disposable to clear.";Ie(`${e} Your run count, identity and stored keys are kept.`,"info")}function Tw(){const t=document.getElementById("delete-unavailable-modal");t&&Ve(t,{trigger:document.activeElement})}function $w(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("delete-unavailable-modal");e&&Ge(e)}function rc(){const t=H.isVerified&&!!H.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),i=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),i&&i.classList.toggle("hidden",t);const r=document.getElementById("auth-user-email");r&&(r.textContent=H.email||"");const s=document.getElementById("access-signed-email");s&&(s.textContent=H.email||""),Ww(),io()}async function xp(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,i=await fetch(d0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!i.ok)throw new Error(`Identity check HTTP ${i.status}`);const r=await i.json();if(yt.userId=r.user_id,yt.token=r.identity_token||null,yt.status=r.status,yt.resolved=!0,sessionStorage.setItem(c0,r.user_id),yt.token&&sessionStorage.setItem(u0,yt.token),r.usage_count!==void 0){const s=vn(),a=(r.usage_month||s)===s?r.usage_count:0;localStorage.setItem($n,JSON.stringify({count:a,month:s})),fn()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Qo=null;function Mw(t=5e3){return yt.resolved?Promise.resolve():(Qo||(Qo=xp().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Qo,new Promise(e=>setTimeout(e,t))]))}function Ip(){const t=vn();try{const e=localStorage.getItem($n);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:$n,month:t,err:e}),localStorage.removeItem($n),{count:0,month:t}}}function vn(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function yr(){const t=Ip();return t.month!==vn()?{count:0,month:vn()}:t}function Lw(){const e={count:yr().count+1,month:vn()};return localStorage.setItem($n,JSON.stringify(e)),e}function wi(){return!!fe.isLoading}function Mt(){return!!fe.isResolved}function Nw(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(Cs,e)?e:null}function Ow(t){return t&&Object.entries(Gh).find(([,e])=>e===t)?.[0]||null}function Br(...t){return t.find(e=>e!=null&&e!=="")}function Bw(...t){return t.find(e=>e&&typeof e=="object")||{}}function Dw(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=Bw(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),i=e.metadata||n.metadata||e.customer?.metadata||{},r=Br(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=Br(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=Nw(Br(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,i.tier,i.plan)),a=f0.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Ow(r)||(a||l?"professional":"free");return On({tier:u,status:s,periodEnd:Br(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function no(){return Cs[fe.tier]??Cs.free}async function jw(){if(H.isVerified&&(!Mt()||wi())&&(await Cp({force:!0}),io()),H.isVerified&&!Mt())return Ie("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=yr(),e=no();if(t>=e)return kp(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const i=e-t;Ie(`${i} run${i===1?"":"s"} remaining this month.`,"warning")}return!0}function yd(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function kp(t,e,n={}){Lt(!0);const i=document.getElementById("walkthrough-modal");i&&Ge(i,{restoreFocus:!1});const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){Ie(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),vi();return}const c=document.getElementById("paywall-exhausted-text");if(c){const f=fe.tier;f==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${f} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",H.isVerified),u.classList.remove("hidden"),n.openModal&&vi()}function tl(t){return fe.tier==="free"&&Gr.includes(t)?Ps:t}function Uw(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=fe.tier,r=!(H.isVerified&&!Mt())&&n==="free";Array.from(e.options).forEach(o=>{const a=Jt(o.value),l=Gr.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&Gr.includes(e.value)&&(e.value=Ps),e.disabled=!1,rd.has(e)||(e.addEventListener("change",()=>{Mt()&&fe.tier==="free"&&Gr.includes(e.value)&&(e.value=Ps,vi()),el(e.value),Ol()}),rd.add(e));let s=document.getElementById("model-selector-free-notice");r?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),el(e.value)}function sc(){const t=H.isVerified&&!!H.email,e=t&&wi(),n=!t||Mt(),i=yr(),r=n?i.count:0,s=n?no():0,o=Math.max(0,s-r),a=`${r} / ${s} runs this month`,l=xl,u=n?fe.tier||"free":null,c=document.getElementById("topbar-credits-count");c&&(e?c.textContent="…":n?c.textContent=String(o):c.textContent="—");const d=document.getElementById("credits-balance");d&&(e?d.textContent="Checking plan…":n?d.textContent=a:d.textContent="Plan check failed");const f=document.getElementById("usage-dialog-tier");f&&(e?f.textContent="Checking…":n?f.textContent=l[u]||"Free":f.textContent="Unavailable");const p=document.getElementById("usage-dialog-status");p&&(e?p.textContent="Verifying your subscription…":n?p.textContent="Runs reset at the start of each month.":p.textContent="Could not verify your subscription. Try again or sign out.");const h=document.getElementById("usage-counter");if(h)if(e&&t)h.textContent="Checking plan…",h.className="text-xs text-gray-500";else if(!n&&t)h.textContent="Plan check failed",h.className="text-xs text-red-600 font-medium";else{h.textContent=a;const g=s>0?r/s:0;h.className=g>=1?"text-xs text-red-600 font-medium":g>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500"}if(!t){const g=document.getElementById("guest-usage-text");if(g){const m=Ip(),v=m.month===vn()?m.count??0:0;g.textContent=`${v} / ${Cs.free} generations used`}}Hw()}function Hw(){if(!(H.isVerified&&!!H.email))return;const e=wi(),n=Mt(),i=yr(),r=n?i.count:0,s=n?no():0,o=Math.max(0,s-r),a=n?fe.tier||"free":null,l={free:"Free",professional:"Pro",power:"Power"}[a]||"Free",u=H.email||"",c=u.split("@")[0]||u,d=document.getElementById("acct-avatar");d&&(d.textContent=(u[0]||"?").toUpperCase());const f=document.getElementById("acct-name");f&&(f.textContent=c||"—");const p=document.getElementById("acct-plan-tier"),h=document.getElementById("acct-plan-price"),g=document.getElementById("acct-plan-note"),m=document.getElementById("acct-renewal");if(p&&(p.textContent=e?"Checking…":n?l:"Plan unavailable"),h)if(e)h.textContent="—";else if(!n)h.textContent="—";else if(a==="free")h.textContent="$0 / month";else{const S=qi(Wi[a]??0,Bl());h.textContent=`${S} / month`}if(g&&(e?g.textContent="Verifying your subscription…":n?a==="free"?g.textContent="No subscription. Upgrade for more generations.":g.textContent="billed monthly through Stripe":g.textContent="Could not verify your subscription. Check billing or sign out."),m){const S=Date.parse(fe.periodEnd||""),F=n&&a!=="free"&&!!fe.periodEnd&&!Number.isNaN(S);if(e)m.textContent="";else if(!n)m.textContent="";else if(a==="free")m.textContent="";else if(F){const $=new Date(S).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"});m.textContent=`Renews ${$} · reset at the start of each month.`}else m.textContent="Renewal date is not available for this period."}const v=document.getElementById("acct-left-count"),b=document.getElementById("acct-left-limit"),x=document.getElementById("acct-reset-note");v&&(v.textContent=e?"…":n?String(o):"—"),b&&(b.textContent=e?"…":n?String(s):"—"),x&&(e?x.textContent="Checking plan…":n?x.textContent="Runs reset at the start of each month.":x.textContent="Plan check failed. Refresh or manage billing.");const y=document.getElementById("acct-used-count"),E=document.getElementById("acct-meter-fill"),k=document.getElementById("acct-meter-meta"),R=document.getElementById("acct-meter-track");if(y&&(y.textContent=e?"…":n?String(r):"—"),E){const S=n&&s>0?Math.min(100,Math.round(r/s*100)):0;E.style.width=`${S}%`}if(k)if(e)k.textContent="Checking…";else if(!n)k.textContent="Plan check failed";else if(s===0)k.textContent=`${r} of ${s}`;else{const S=Math.round(r/s*100);k.textContent=`${r} of ${s} · ${S}%`}R&&(e?R.setAttribute("aria-label","Checking usage…"):n?R.setAttribute("aria-label",`${r} of ${s} generations used`):R.setAttribute("aria-label","Usage unavailable")),bt()}function fn(){if(sc(),H.isVerified&&(wi()||!Mt())){yd();return}const{count:t}=yr(),e=no();t>=e&&!_.isRunning&&!Rv()?kp(t,e):yd()}function Ww(){sc()}async function Cp(t={}){const e=t.force===!0;if(!H.isVerified||!H.sessionToken){fe=On({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const n=H.sessionToken,i=localStorage.getItem(As);if(!e&&i)try{const{data:r,email:s,ts:o,version:a}=JSON.parse(i);if(a===sd&&s===H.email&&Date.now()-o<300*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",i)}try{const s=await(await fetch(`${Et}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken,user_id:yt.userId})})).json();if(!H.isVerified||H.sessionToken!==n)return;if(s.error){if(["unauthorized","invalid session","expired session"].some(a=>String(s.error).toLowerCase().includes(a))){bp(),rc();return}fe=On({isResolved:!1,error:s.error});return}fe=Dw(s),localStorage.setItem(As,JSON.stringify({version:sd,data:fe,email:H.email,ts:Date.now()}))}catch(r){if(!H.isVerified||H.sessionToken!==n)return;console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function Ap(){localStorage.removeItem(As)}async function qw(t){if(!H.isVerified||!H.sessionToken){Fp(),to();return}if(!Gh[t]){Ie("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const i=await(await fetch(`${Et}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:H.sessionToken,currency:Bl()})})).json();if(i.error||!i.url)throw new Error(i.error||"Failed to create checkout session");const{url:r}=i;window.location.href=r}catch(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),Ie("Could not start checkout. Please try again.","error")}}async function zw(t){if(!H.isVerified||!H.sessionToken){to();return}const e=t||document.getElementById("manage-billing-btn"),n=e?e.textContent:"";e&&(e.disabled=!0,e.textContent="Loading…");try{const r=await(await fetch(`${Et}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to open billing portal");const{url:s}=r;window.location.href=s}catch(i){console.error("openCustomerPortal failed:",i),e&&(e.disabled=!1,e.textContent=n),Ie("Could not open billing portal. Please try again.","error")}}const Ls=new Set;function Pp(){Ls.forEach(t=>t.abort()),Ls.clear()}async function Ns(t,e,n,i={},r=[]){const o=new AbortController;Ls.add(o);let a=!1;const l=setTimeout(()=>{a=!0,o.abort()},12e4);try{const u=await fetch(l0,{method:"POST",headers:{"Content-Type":"application/json",...yt.token?{Authorization:`Bearer ${yt.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:yt.userId,step:t,model:e,prompt:n,images:r,context:i})}),c=await u.text();let d={};try{d=c?JSON.parse(c):{}}catch{d={}}if(u.status===429){d.serverCount!==void 0&&(localStorage.setItem($n,JSON.stringify({count:d.serverCount,month:vn()})),fn());const h=new Error(d.message||"Monthly usage limit reached. Upgrade to continue.");throw h.isUsageLimit=!0,h.pipelineStep=t,h}const f=Yv(d,t);if(f)throw f;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(d),"content type:",typeof d.content),!u.ok)throw new Error(`${d.message||d.error||"BuildShip pipeline error"} (HTTP ${u.status})`);if(t==="generator")if(d.usage_status==="success"&&Number.isFinite(d.usage_count)){const h=vn();(d.usage_month||h)===h&&(localStorage.setItem($n,JSON.stringify({count:d.usage_count,month:h})),fn())}else Lw(),fn();let p=d.output||d.content;if(!p){const h=c?` (body: ${c.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${h}`)}return Array.isArray(p)&&(p=p.map(h=>typeof h=="string"?h:h.text||"").join("")),typeof p!="string"&&(p=JSON.stringify(p)),p}catch(u){if(u.name==="AbortError"){if(a)throw new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`);const c=new Error(`BuildShip ${t} request cancelled`);throw c.isPipelineCancel=!0,c}throw u instanceof TypeError?new Error(`BuildShip unreachable: ${u.message}`):u}finally{clearTimeout(l),Ls.delete(o)}}let nl=!1;function Vw(){const e=new URLSearchParams(window.location.search).get("checkout");return e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),Ap(),nl=!0):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),Ie("Checkout cancelled.","info")),e}function Gw(){if(!nl)return;nl=!1;const t=fe.tier!=="free";Ie(t?"Subscription active! Your plan is live.":"Checkout complete — confirming your subscription. Check Manage billing if it does not update.",t?"success":"info")}function io(){const t=H.isVerified&&!!H.email,e=fe.tier,n=t&&wi(),i=!t||Mt(),r=document.getElementById("subscription-tier-badge");if(r){const a=xl,l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};r.textContent=n?"Checking…":i?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${i?l[e]||l.free:l.unresolved}`}const s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!i||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||i&&e==="free"),Kw(i?e:null),Uw(),Ol(),fn(),Jp()}function Kw(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([r,{btnId:s,defaultText:o}])=>{const a=document.getElementById(s);a&&(r===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const i=document.getElementById("free-tier-current");i&&i.classList.toggle("hidden",t!=="free")}function Yw(){document.querySelectorAll(".pm-card[data-tier]").forEach(t=>{const e=t.dataset.tier,n=Nv[e];if(!n)return;const i=t.querySelector("ul.pm-features");if(i){i.innerHTML="";for(const r of n){const s=document.createElement("li");s.textContent=r,i.appendChild(s)}}})}function il(){const t=Bl(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),i=document.getElementById("plans-pro-price"),r=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=qi(Wi.professional,t)),n&&(n.textContent=qi(Wi.power,t)),i&&(i.textContent=qi(Wi.professional,t)),r&&(r.textContent=qi(Wi.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function vi(){il();const t=document.getElementById("pricing-modal");t&&Ve(t),S0().then(()=>il())}function Fp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&Ge(e)}function Ie(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},i=document.createElement("div");i.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${n[e]||n.info}`,i.textContent=t,document.body.appendChild(i),setTimeout(()=>{i.style.opacity="0",setTimeout(()=>i.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{$v(),db(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Jw(),window.__heroField=P_(),window.__pipelineLogo=$_(),Rb(),Nl=n0({onSubmit:hr}),Va=(async()=>{try{await xw(),Vw(),await Cp()}catch(n){console.warn("Startup auth/subscription initialization failed:",n)}})(),await Va,Gw(),io(),il(),Yw(),await Z0(),V0();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=St();t.value=n}ap(),xp();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{rn===2&&e.value.trim().length>0&&(Wl(),Ks())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");rn===2&&n&&Ve(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const i=document.getElementById("walkthrough-modal");rn===2&&i&&setTimeout(()=>{Ve(i)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:i}=n.detail;i===ne.PREPARING||i===ne.VALIDATING||i===ne.PUSHING?(Np(),He.phaseId||Op(),wd(i)):(i===ne.SUCCESS||i===ne.ERROR)&&(wd(i),Rn&&clearTimeout(Rn),Rn=setTimeout(()=>{Rn=null,lc()},1e3))}),gc()});function Jw(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Zw(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Dn),document.addEventListener("keydown",Dn))}function Dn(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const i=document.getElementById("welcome-video-player");i&&i.removeEventListener("click",Dn),document.removeEventListener("keydown",Dn),ap()}let Xi=null;async function Xw(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++ud,n=()=>e===ud,i=await Oe("flutterflow"),r=await Oe("flutterflow_project_id");if(n()){if(!i){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new _i(i,"","main",St()).listProjects();if(!n())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),r&&(t.value=r)}catch(s){if(!n())return;console.error("Failed to load projects for deploy:",s),t.innerHTML=''}}}function Qw(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function oc(t,e,n,i=null){Xi={codeInfo:t,checks:e,deps:n,bundlePlan:i},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=i?`${i.fileEntries.length} files`:t.content.split(` -`).length,Xw();const r=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(r.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${nn(c)}`:"version resolved from your project";return`
  • • ${nn(u)}: ${d}
  • `}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
  • • ${nn(u)}
  • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&Ve(l)}function Rp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&Ge(e),Xi=null}function eb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&Ge(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const i=document.getElementById("success-warnings-section");i&&i.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function Tp(t){const e=(m,v)=>{const b=document.getElementById(m);b&&(b.textContent=v||"")},n=t.metadata?.fileName||"",i=t.metadata?.projectId||"",r=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",i),e("success-file-name",n),e("success-artifact-type",r),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&i&&(u.href=`https://app.flutterflow.io/project/${i}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),f=t.unverified||[],p=t.approximate||[],h=t.warnings||[];(h.length>0||f.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...f.map(m=>`
  • Not verified before deploying: ${W(String(m))}
  • `),...p.map(m=>`
  • Verified approximately: ${W(String(m))}
  • `),...h.map(([m,v])=>`
  • ${W(m)}: ${W(String(v))}
  • `)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&Ve(g)}function $p(t){lc(),ww(t);const e=t.remoteRefusal===!0;ac(t,{heading:"Deploy failed",title:e?"FlutterFlow refused this deploy — nothing was confirmed written.":"The deploy failed before FlutterFlow confirmed anything.",guidance:e?"Review the error and any per-file outcomes above, fix them in your code or in FlutterFlow, then deploy again. A refusal is definitive: no part of this deploy was applied, so retrying is safe once the problem is fixed.":"Review the error above, fix it, then deploy again. The deploy stopped before a write was confirmed, so nothing was applied."})}function ac(t,{heading:e,title:n,guidance:i}){const r=t.targetIdentity||{},s=document.getElementById("commit-terminal-modal");if(!s)return!1;const o=(h,g)=>{const m=document.getElementById(h);m&&(m.textContent=g||"")};o("terminal-heading",e),o("terminal-title",n),o("terminal-message",t.error||t.message||"");const a=document.getElementById("terminal-identity-list");if(a){const h=[["Project",r.projectId||t.metadata?.projectId],["Endpoint",r.endpoint],["File",r.fileName||t.metadata?.fileName],["Artifact",r.artifactType||t.metadata?.artifactType]];a.innerHTML=h.map(([g,m])=>`
    ${W(g)}:${W(String(m??"—"))}
    `).join("")}const l=document.getElementById("terminal-file-outcomes");let u=t.errorMap;u&&!(u instanceof Map)&&(u=new Map(Object.entries(u)));const c=l?.querySelector("ul");l&&c&&u&&u.size>0?(c.innerHTML=[...u.entries()].map(([h,g])=>`
  • ${W(h)}: ${W(Rl(g))}
  • `).join(""),l.classList.remove("hidden")):l&&(c&&(c.innerHTML=""),l.classList.add("hidden"));const d=document.getElementById("terminal-guidance");d&&(d.innerHTML=i);const f=document.getElementById("terminal-open-ff-link"),p=r.projectId||t.metadata?.projectId;return f&&(f.href=p?`https://app.flutterflow.io/project/${p}`:"https://app.flutterflow.io/"),Ve(s),!0}function Mp(t){ac(t,{heading:"Deploy partially applied",title:"Some custom classes reached FlutterFlow, but the deploy did not fully complete.",guidance:"The custom classes the runner confirmed are already in your project and are not lost. Review the per-file errors above, fix them in FlutterFlow or regenerate, then deploy again. Open the project to see exactly what landed."})}function Lp(t){ac(t,{heading:"Deploy outcome not yet known",title:"This browser stopped waiting before the FlutterFlow server reported a result.",guidance:"The deploy may still be finishing on the server — it was not cancelled. Open your FlutterFlow project and confirm whether the class landed before retrying, so you do not push a duplicate or build on top of an unknown state."})}function tb(t){t&&t.target!==t.currentTarget||Ge(document.getElementById("commit-terminal-modal"))}function nb(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const _d={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},ib=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}];let Rn=null;function Np(){Rn&&clearTimeout(Rn),Rn=null}const He={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){Np(),this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&(Mu(e,!0,"Deploying to FlutterFlow"),Ve(e)),this.set("prepare")},set(t,e=null){if(!(!_d[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=_d[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=ib.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const i=this.sequence.indexOf(this.phaseId),s=[`Step ${i===-1?1:i+1} of ${this.sequence.length}`];e>=5&&s.push(rb(e)),Bp(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(Mu(t,!1),Ge(t,{force:!0,restoreFocus:!1}))}};function rb(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function Op(t){He.start(t)}function lc(){He.stop()}function Bp(t,e,n,i=null){const r=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=i||"",a.classList.toggle("hidden",!i))}function wd(t){const e={[ne.PREPARING]:"prepare",[ne.VALIDATING]:"validate",[ne.PUSHING]:"project",[ne.SUCCESS]:"done"};if(t===ne.ERROR){He.timer&&clearInterval(He.timer),He.timer=null,Bp(100,"Failed","Error occurred");return}const n=e[t];n&&He.set(n)}function sb(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===X.CODE_FILE):t.codeInfo?.codeType===X.CODE_FILE}let Dp=!1;function jp(t){Dp=t;const e=document.querySelector("#commit-confirm-modal button[data-deploy-confirm]");e&&(e.disabled=t),[...document.querySelectorAll("[data-deploy-start]"),...document.querySelectorAll("#btn-deploy-to-ff")].forEach(i=>{i.disabled=t})}function bd(t){lc(),jp(!1);const e=jh(t);e===Be.COMMITTED?Tp(t):e===Be.PARTIAL?Mp(t):e===Be.UNCONFIRMED?Lp(t):$p(t)}async function ob(){if(!Xi){console.error("No pending commit data");return}if(Dp){console.warn("Deploy already in flight; ignoring duplicate confirm.");return}const t=Xi;if(Xi=null,Zi=Qw(),Rp(),jp(!0),Op({withProvisioning:sb(t)}),t.bundlePlan){const o=await cw(t.bundlePlan,{pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zi=null,bd(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:i,fileName:r}=cp(),s=await lw(e.content,{artifactType:n,artifactName:i,fileName:r,pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zi=null,bd(s)}window.runThinkingPipeline=hr;window.toggleStep=fw;window.toggleSection=dw;window.selectWorkflowStep=lt;window.copyCode=hw;window.retryWithDifferentModel=vw;window.openApiKeysModal=Hl;window.closeApiKeysModal=sp;window.openComposerSettings=rp;window.closeComposerSettings=O0;window.walkthroughConnectAccount=N0;window.closeWalkthroughModal=D0;window.openWalkthroughModal=B0;window.advanceWalkthrough=Wl;window.commitToFlutterFlow=aw;function ab(){_.isRunning||Lt(!1);const t=document.getElementById("pipeline-input");t&&t.focus()}function lb(){rp();const t=document.getElementById("composer-settings-model");t&&(t.scrollIntoView({behavior:"smooth",block:"center"}),t.focus(),t.click())}window.focusPromptInput=ab;window.openModelSelector=lb;window.handlePromptImageSelect=b0;window.removePromptImage=E0;window.saveApiKeys=H0;window.validateFlutterFlowConnection=zl;window.clearAllApiKeys=W0;window.toggleKeyVisibility=K0;window.handleWelcomeVideoEnd=Zw;window.dismissWelcomeVideo=Dn;window.initiateCommitToFlutterFlow=yw;window.updateFlutterFlowCredentialStatus=bw;window.openCommitConfirmModal=oc;window.closeCommitConfirmModal=Rp;window.closeCommitSuccessModal=eb;window.closeCommitTerminalModal=tb;window.showCommitPartialModal=Mp;window.showCommitUnconfirmedModal=Lp;window.showCommitSuccessModal=Tp;window.showCommitFailureModal=$p;window.toggleCodePreview=nb;window.confirmCommitToFlutterFlow=ob;window.runRefinement=vp;window.regenerateFromPastedErrors=yp;window.clearErrorInput=mw;window.setFlutterFlowEndpoint=L0;window.getFlutterFlowEndpoint=St;window.commitProgress=He;window.openSignInModal=to;window.closeSignInModal=Sp;window.handleMagicLinkRequest=kw;window.handleSignOut=Cw;window.handleSendNewLink=Fw;window.handleClearCache=Rw;window.handleDeleteAccount=Tw;window.closeDeleteUnavailableModal=$w;window.startCheckout=qw;window.openCustomerPortal=zw;window.openPricingModal=vi;window.closePricingModal=Fp;let Xr=null,Up=null,jn={1:"pending",2:"pending",3:"pending"},cc=1,uc=null;const ro={1:"Prompt Architect",2:"Code Generator",3:"Code Review"},cb={1:"Understanding your prompt",2:"Generating Dart code",3:"Running the code audit"},ub={1:"Prompt understood",2:"Dart code generated",3:"Code audit complete"};function so(){return _.runId+=1,_.runId}function le(t){return t===void 0||t===_.runId}function Hp(){_.runId+=1}function dc(t){return document.getElementById(`pdot-${t}`)}const Wp=window.matchMedia("(max-width: 920px)");function Ed(){const t=document.getElementById("pipeline-progress"),e=t?.querySelector(":scope > .pipeline-view"),n=t?.querySelector(":scope > .pipeline-prompt-recap");if(!e||!n)return;const i=Wp.matches;if((e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0===i)return;const s=document.activeElement;t.insertBefore(n,i?e.nextSibling:e),s instanceof HTMLElement&&n.contains(s)&&s.focus({preventScroll:!0})}function db(){Ed(),Wp.addEventListener("change",Ed)}function fb(t){return{1:"Turning your idea into a clear FlutterFlow specification.",2:"Building the Dart source, widget parameters and animation.",3:"Checking the generated code and preparing the file review."}[t]||""}function Os(t){const e=document.getElementById("btn-run-pipeline")||document.getElementById("hero-send");e&&(e.disabled=t,e.classList.toggle("is-busy",t),t?e.setAttribute("aria-busy","true"):e.removeAttribute("aria-busy"))}function oo(t){const e=document.getElementById("pipeline-progress");e&&(e.dataset.runState=t)}function Mn(t,e){jn[t]=e;const n=dc(t);if(!n)return;n.dataset.state=e,n.disabled=e==="pending"||e==="skipped";const i=ro[t],r={pending:"not started",active:"in progress",done:"complete",failed:"failed",skipped:"not run"};n.setAttribute("aria-label",`Step ${t} of 3, ${i}: ${r[e]||e}`),e==="active"?n.setAttribute("aria-current","step"):n.removeAttribute("aria-current")}function hb(){return[1,2,3].filter(t=>jn[t]==="done").length}function ao(){const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width=`${hb()/3*100}%`);const e=document.getElementById("progress-stage-count");e&&(e.textContent=`Step ${cc} of 3`)}function lo(t,{done:e=!1}={}){const n=document.getElementById("progress-title-text"),i=document.getElementById("progress-description-text"),r=document.getElementById("progress-substep-text"),s=jn[t],o=e||s==="done";if(n&&(n.textContent=o?ub[t]:cb[t]),i&&(i.textContent=fb(t)),r){const a=o?" — complete":s==="failed"?" — stopped":"";r.textContent=`Step ${t} of 3 — ${ro[t]}${a}`}}function pb(t){jn[t]==="pending"||jn[t]==="skipped"||(uc=t,[1,2,3].forEach(e=>{const n=dc(e);n&&n.setAttribute("aria-pressed",String(e===t))}),lo(t))}function fc(){uc=null,[1,2,3].forEach(t=>{const e=dc(t);e&&e.removeAttribute("aria-pressed")})}function qp(t){const e=document.getElementById("pipeline-note");e&&(e.textContent=t||"",e.hidden=!t)}function gb(t,e,n){le(n)&&qp(`${Jt(t)} did not answer. Continuing on ${Jt(e)}.`)}function hc(){const t=document.getElementById("pipeline-failure");if(!t)return;t.hidden=!0;const e=document.getElementById("pipeline-failure-actions");e&&e.replaceChildren()}function mb(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0}function yn(){Nn()}function vb(){return[".pipeline-prompt-kicker","#pipeline-submitted-prompt","#pipeline-edit-prompt",".pipeline-glyph","#progress-title-text","#progress-description-text",".progress-track",".progress-meta"].map(t=>document.querySelector(t))}function yb(){const e=document.getElementById("pipeline-stage-nav").classList.toggle("is-open");document.getElementById("progress-stage-count").setAttribute("aria-expanded",String(e))}window.togglePipelineStageNavigation=yb;function _b(t,e){Vh(t,document.getElementById("main-stage-container"),vb()),s0(document.getElementById("hero"),e)}window.addEventListener("hashchange",yn);window.addEventListener("popstate",yn);function co(t={}){const{prompt:e=null,runId:n}=t;if(!le(n))return;bi(),yn(),Lt(!0);const i=document.getElementById("pipeline-progress"),r=document.getElementById("results-view"),s=document.getElementById("ready-state");if(s&&s.classList.add("hidden"),r&&r.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),i&&i.classList.add("visible"),document.getElementById("pipeline-stage-nav")?.classList.remove("is-open"),document.getElementById("progress-stage-count")?.setAttribute("aria-expanded","false"),oo("running"),e!==null){const a=document.getElementById("pipeline-submitted-prompt");a&&(a.textContent=e)}Up=Date.now();const o=document.getElementById("progress-elapsed");o&&(o.textContent="0s"),jn={1:"pending",2:"pending",3:"pending"},fc(),hc(),qp(""),[1,2,3].forEach(a=>Mn(a,"pending")),Tt(1,n),wb()}function Tt(t,e){le(e)&&(cc=t,fc(),[1,2,3].forEach(n=>{n===t?Mn(n,"active"):nt&&Mn(n,"pending")}),lo(t),ao())}function sn(t,e){le(e)&&(Mn(t,"done"),uc===null&&lo(t,{done:!0}),ao())}function zp(t,{stage:e=1,runId:n,retry:i=Vp}={}){if(!le(n))return;_r(),bi(),yn(),oo("failed"),Lt(!0);const r=document.getElementById("pipeline-progress");r&&r.classList.add("visible");const s=document.getElementById("results-view");s&&s.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),Mn(e,"failed"),[1,2,3].forEach(h=>{h>e&&Mn(h,"pending")}),cc=e,fc(),lo(e),ao();const o=Wh(t),a=document.getElementById("pipeline-failure"),l=document.getElementById("pipeline-failure-title"),u=document.getElementById("pipeline-failure-message"),c=document.getElementById("pipeline-failure-hint"),d=document.getElementById("pipeline-failure-actions");if(!a||!l||!u||!d)return;if(a.dataset.kind=o.kind,l.textContent=`${ro[e]}: ${o.title}`,u.textContent=o.message,c){const h=o.detail&&o.detail!==o.message?o.detail:"";c.textContent=h,c.hidden=!h}d.replaceChildren();const f=[o.canUpgrade&&{id:"upgrade",label:"View plans",variant:"primary",onClick:()=>vi()},o.canRetry&&{id:"retry",label:"Retry",variant:o.canUpgrade?"secondary":"primary",onClick:i},o.canEdit&&{id:"edit",label:"Edit prompt",variant:"secondary",onClick:rl}].filter(Boolean);!o.canEdit&&!o.canRetry&&f.push({id:"edit",label:"Back to prompt",variant:"secondary",onClick:rl}),f.forEach(h=>{const g=document.createElement("button");g.type="button",g.textContent=h.label,g.dataset.action=h.id,g.dataset.variant=h.variant,g.addEventListener("click",h.onClick),d.appendChild(g)}),a.hidden=!1;const p=d.querySelector("button");p&&p.focus({preventScroll:!0})}function rl(){Hp(),Pp(),_.isRunning=!1,Os(!1),on(),oo("settled"),yn(),_r(),bi(),hc();const t=document.getElementById("pipeline-progress");t&&t.classList.remove("visible"),Lt(!1);const e=document.getElementById("pipeline-input");e&&(_.submittedPrompt&&(e.value=_.submittedPrompt,e.dispatchEvent(new Event("input",{bubbles:!0}))),e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))}function Vp(){const t=document.getElementById("pipeline-input");t&&_.submittedPrompt&&(t.value=_.submittedPrompt,t.dispatchEvent(new Event("input",{bubbles:!0}))),Ue=_.submittedImages.slice(),dn(),hc(),hr()}function wb(){_r(),Xr=setInterval(()=>{const t=(Date.now()-Up)/1e3,e=document.getElementById("progress-elapsed");e&&(e.textContent=`${Math.floor(t)}s`)},250)}function _r(){Xr&&(clearInterval(Xr),Xr=null)}let Qi=null;function bi(){Qi&&(clearTimeout(Qi),Qi=null)}function wr(){_r(),bi(),oo("settled"),ao();const t=document.getElementById("pipeline-progress-fill");Qi=setTimeout(()=>{Qi=null;const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function yi(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function Gp(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function bb(){return zy({bundle:_.artifactBundle,reviewResult:_.step3Result})}function Eb(t){return` -
    - ${yi(t.severity)} +`;const o=$h({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:s});wo({runId:i}),Ot(2,i),ut(2),$e(2,!0);const a=await co(o,n,[],i);if(!le(i))return;_.step2Result=a,oo(),fn(2,i);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,ao(),fn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f)}catch(s){if(console.error("Regeneration failed:",s),!le(i))return;const o=eo(s,{architect:2,generator:2,review:3});s.isUsageLimit&&_n(),ut(o),$e(o,!1),og(s,{stage:o,runId:i,retry:()=>Mp(t,e)}),Hs(o,"error")}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,hn())}}async function jw(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Ne("flutterflow"),i=await Ne("flutterflow_project_id");n&&i?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||i?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function Lp(t){try{const e=await fetch(`${It}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function Uw(t){try{const n=await(await fetch(`${It}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Hw(t){try{const e=await fetch(`${It}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${It}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${It}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Rd(t,e){const n=Op(),i=(H.email||n.email)!==t;H.email=t,H.sessionToken=e,H.isVerified=!0,fe=qn({isLoading:!0}),localStorage.setItem(Ms,JSON.stringify({email:t,sessionToken:e})),i&&Wp()}function Np(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=qn({isResolved:!0}),localStorage.removeItem(Ms),localStorage.removeItem(Ns)}function Op(){try{const t=localStorage.getItem(Ms);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(Ms),{email:null,sessionToken:null}}}async function Ww(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:i}=await Uw(e);Rd(n,i),Bp();const r=Td();r&&!window.location.hash&&(window.location.hash=r)}catch(n){Td();const i=n.message||"Sign-in link invalid or expired.";ke(i,"error"),fo(),oi(i,"error")}}else{const{email:n,sessionToken:i}=Op();if(n&&i){const r=await Hw(i);r?Rd(r.email,r.sessionToken):Np()}}_c()}function qw(){try{localStorage.setItem(tl,JSON.stringify({hash:window.location.hash||"#home",ts:Date.now()}))}catch(t){console.warn("rememberSignInReturnSurface: failed to persist return surface:",t)}}function Td(){try{const t=localStorage.getItem(tl);if(localStorage.removeItem(tl),!t)return null;const{hash:e,ts:n}=JSON.parse(t);return!e||typeof n!="number"||Date.now()-n>x0?null:e}catch(t){return console.warn("consumeSignInReturnSurface: failed to read return surface:",t),null}}function fo(){const t=document.getElementById("signin-modal");if(!t)return;qw(),document.getElementById("signin-email-input")?.removeAttribute("aria-invalid"),oi(""),Ke(t)}function Bp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&Ye(e)}function oi(t,e){const n=document.getElementById("signin-message");n&&(n.textContent=t||"",n.classList.remove("signin-message-success","signin-message-error"),e&&n.classList.add(`signin-message-${e}`))}async function zw(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=Xs(t?.value);if(!n||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)||n.length>254){t?.setAttribute("aria-invalid","true"),oi("Please enter a valid email address.","error");return}t?.removeAttribute("aria-invalid"),e&&(e.disabled=!0,e.textContent="Sending…");const r=Uh(n);r&&oi(r,"error");try{const s=await Lp(n),o=zl(s);t&&o&&(t.value=""),t?.setAttribute("aria-invalid",String(!o)),oi(Hh(s,n),o?"success":"error"),e&&(e.disabled=!1,e.textContent=o?"Sent!":"Send Sign-in Link",o&&setTimeout(()=>{e.textContent==="Sent!"&&(e.textContent="Send Sign-in Link")},2500))}catch(s){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:n,err:s}),oi("Something went wrong. Please try again.","error"),e&&(e.disabled=!1,e.textContent="Send Sign-in Link")}}function Vw(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=qn({isResolved:!0}),A_({storage:window.localStorage,onIdentityChanged:_c,onPlanChanged:po})}const Gw=F_({sendLink:Lp,getEmail:()=>H.email||"",onState:Kw});function Kw(t){const e=document.getElementById("send-new-link-btn"),n=document.getElementById("send-new-link-msg");if(!e||!n)return;if(t.status==="pending"){e.disabled=!0,e.textContent="Sending…",n.className="acct-access-msg",n.textContent="Sending a fresh sign-in link…";return}if(t.status==="sent"){e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg",n.textContent=Hh(t.data,H.email||"")||"Link sent — check your email.";return}e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg error";const i=t.error?.message?`Couldn't send a link right now. ${t.error.message}`:"Couldn't send a link right now. Please try again.";n.textContent=i}async function Yw(){await Gw()}function Jw(){const t=k_(window.localStorage),e=t.length?`Cleared disposable UI caches: ${t.join(", ")}.`:"Nothing disposable to clear.";ke(`${e} Your run count, identity and stored keys are kept.`,"info")}function Zw(){const t=document.getElementById("delete-unavailable-modal");t&&Ke(t,{trigger:document.activeElement})}function Xw(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("delete-unavailable-modal");e&&Ye(e)}function _c(){const t=H.isVerified&&!!H.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),i=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),i&&i.classList.toggle("hidden",t);const r=document.getElementById("auth-user-email");r&&(r.textContent=H.email||"");const s=document.getElementById("access-signed-email");s&&(s.textContent=H.email||""),lb(),po()}async function Dp(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,i=await fetch(A0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!i.ok)throw new Error(`Identity check HTTP ${i.status}`);const r=await i.json();if(bt.userId=r.user_id,bt.token=r.identity_token||null,bt.status=r.status,bt.resolved=!0,sessionStorage.setItem(k0,r.user_id),bt.token&&sessionStorage.setItem(C0,bt.token),r.usage_count!==void 0){const s=xn(),a=(r.usage_month||s)===s?r.usage_count:0;localStorage.setItem(jn,JSON.stringify({count:a,month:s})),_n()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let ca=null;function Qw(t=5e3){return bt.resolved?Promise.resolve():(ca||(ca=Dp().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([ca,new Promise(e=>setTimeout(e,t))]))}function jp(){const t=xn();try{const e=localStorage.getItem(jn);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:jn,month:t,err:e}),localStorage.removeItem(jn),{count:0,month:t}}}function xn(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Ir(){const t=jp();return t.month!==xn()?{count:0,month:xn()}:t}function eb(){const e={count:Ir().count+1,month:xn()};return localStorage.setItem(jn,JSON.stringify(e)),e}function Ii(){return!!fe.isLoading}function Dt(){return!!fe.isResolved}function tb(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(Ls,e)?e:null}function nb(t){return t&&Object.entries(ap).find(([,e])=>e===t)?.[0]||null}function zr(...t){return t.find(e=>e!=null&&e!=="")}function ib(...t){return t.find(e=>e&&typeof e=="object")||{}}function rb(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=ib(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),i=e.metadata||n.metadata||e.customer?.metadata||{},r=zr(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=zr(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=tb(zr(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,i.tier,i.plan)),a=P0.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||nb(r)||(a||l?"professional":"free");return qn({tier:u,status:s,periodEnd:zr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function ho(){return Ls[fe.tier]??Ls.free}async function sb(){if(H.isVerified&&(!Dt()||Ii())&&(await Hp({force:!0}),po()),H.isVerified&&!Dt())return ke("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Ir(),e=ho();if(t>=e)return Up(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const i=e-t;ke(`${i} run${i===1?"":"s"} remaining this month.`,"warning")}return!0}function $d(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Up(t,e,n={}){jt(!0);const i=document.getElementById("walkthrough-modal");i&&Ye(i,{restoreFocus:!1});const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ke(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Si();return}const c=document.getElementById("paywall-exhausted-text");if(c){const f=fe.tier;f==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${f} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",H.isVerified),u.classList.remove("hidden"),n.openModal&&Si()}function hl(t){return fe.tier==="free"&&es.includes(t)?Os:t}function ob(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=fe.tier,r=!(H.isVerified&&!Dt())&&n==="free";Array.from(e.options).forEach(o=>{const a=nn(o.value),l=es.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&es.includes(e.value)&&(e.value=Os),e.disabled=!1,_d.has(e)||(e.addEventListener("change",()=>{Dt()&&fe.tier==="free"&&es.includes(e.value)&&(e.value=Os,Si()),fl(e.value),Zl()}),_d.add(e));let s=document.getElementById("model-selector-free-notice");r?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),fl(e.value)}function wc(){const t=H.isVerified&&!!H.email,e=t&&Ii(),n=!t||Dt(),i=Ir(),r=n?i.count:0,s=n?ho():0,o=Math.max(0,s-r),a=`${r} / ${s} runs this month`,l=Ol,u=n?fe.tier||"free":null,c=document.getElementById("topbar-credits-count");c&&(e?c.textContent="…":n?c.textContent=String(o):c.textContent="—");const d=document.getElementById("credits-balance");d&&(e?d.textContent="Checking plan…":n?d.textContent=a:d.textContent="Plan check failed");const f=document.getElementById("usage-dialog-tier");f&&(e?f.textContent="Checking…":n?f.textContent=l[u]||"Free":f.textContent="Unavailable");const p=document.getElementById("usage-dialog-status");p&&(e?p.textContent="Verifying your subscription…":n?p.textContent="Runs reset at the start of each month.":p.textContent="Could not verify your subscription. Try again or sign out.");const h=document.getElementById("usage-counter");if(h)if(e&&t)h.textContent="Checking plan…",h.className="text-xs text-gray-500";else if(!n&&t)h.textContent="Plan check failed",h.className="text-xs text-red-600 font-medium";else{h.textContent=a;const g=s>0?r/s:0;h.className=g>=1?"text-xs text-red-600 font-medium":g>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500"}if(!t){const g=document.getElementById("guest-usage-text");if(g){const m=jp(),v=m.month===xn()?m.count??0:0;g.textContent=`${v} / ${Ls.free} generations used`}}ab()}function ab(){if(!(H.isVerified&&!!H.email))return;const e=Ii(),n=Dt(),i=Ir(),r=n?i.count:0,s=n?ho():0,o=Math.max(0,s-r),a=n?fe.tier||"free":null,l={free:"Free",professional:"Pro",power:"Power"}[a]||"Free",u=H.email||"",c=u.split("@")[0]||u,d=document.getElementById("acct-avatar");d&&(d.textContent=(u[0]||"?").toUpperCase());const f=document.getElementById("acct-name");f&&(f.textContent=c||"—");const p=document.getElementById("acct-plan-tier"),h=document.getElementById("acct-plan-price"),g=document.getElementById("acct-plan-note"),m=document.getElementById("acct-renewal");if(p&&(p.textContent=e?"Checking…":n?l:"Plan unavailable"),h)if(e)h.textContent="—";else if(!n)h.textContent="—";else if(a==="free")h.textContent="$0 / month";else{const b=Yi(Ki[a]??0,Xl());h.textContent=`${b} / month`}if(g&&(e?g.textContent="Verifying your subscription…":n?a==="free"?g.textContent="No subscription. Upgrade for more generations.":g.textContent="billed monthly through Stripe":g.textContent="Could not verify your subscription. Check billing or sign out."),m){const b=Date.parse(fe.periodEnd||""),P=n&&a!=="free"&&!!fe.periodEnd&&!Number.isNaN(b);if(e)m.textContent="";else if(!n)m.textContent="";else if(a==="free")m.textContent="";else if(P){const T=new Date(b).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"});m.textContent=`Renews ${T} · reset at the start of each month.`}else m.textContent="Renewal date is not available for this period."}const v=document.getElementById("acct-left-count"),x=document.getElementById("acct-left-limit"),E=document.getElementById("acct-reset-note");v&&(v.textContent=e?"…":n?String(o):"—"),x&&(x.textContent=e?"…":n?String(s):"—"),E&&(e?E.textContent="Checking plan…":n?E.textContent="Runs reset at the start of each month.":E.textContent="Plan check failed. Refresh or manage billing.");const y=document.getElementById("acct-used-count"),S=document.getElementById("acct-meter-fill"),I=document.getElementById("acct-meter-meta"),R=document.getElementById("acct-meter-track");if(y&&(y.textContent=e?"…":n?String(r):"—"),S){const b=n&&s>0?Math.min(100,Math.round(r/s*100)):0;S.style.width=`${b}%`}if(I)if(e)I.textContent="Checking…";else if(!n)I.textContent="Plan check failed";else if(s===0)I.textContent=`${r} of ${s}`;else{const b=Math.round(r/s*100);I.textContent=`${r} of ${s} · ${b}%`}R&&(e?R.setAttribute("aria-label","Checking usage…"):n?R.setAttribute("aria-label",`${r} of ${s} generations used`):R.setAttribute("aria-label","Usage unavailable")),xt()}function _n(){if(wc(),H.isVerified&&(Ii()||!Dt())){$d();return}const{count:t}=Ir(),e=ho();t>=e&&!_.isRunning&&!Vv()?Up(t,e):$d()}function lb(){wc()}async function Hp(t={}){const e=t.force===!0;if(!H.isVerified||!H.sessionToken){fe=qn({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const n=H.sessionToken,i=localStorage.getItem(Ns);if(!e&&i)try{const{data:r,email:s,ts:o,version:a}=JSON.parse(i);if(a===wd&&s===H.email&&Date.now()-o<300*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",i)}try{const s=await(await fetch(`${It}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken,user_id:bt.userId})})).json();if(!H.isVerified||H.sessionToken!==n)return;if(s.error){if(["unauthorized","invalid session","expired session"].some(a=>String(s.error).toLowerCase().includes(a))){Np(),_c();return}fe=qn({isResolved:!1,error:s.error});return}fe=rb(s),localStorage.setItem(Ns,JSON.stringify({version:wd,data:fe,email:H.email,ts:Date.now()}))}catch(r){if(!H.isVerified||H.sessionToken!==n)return;console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function Wp(){localStorage.removeItem(Ns)}async function cb(t){if(!H.isVerified||!H.sessionToken){zp(),fo();return}if(!ap[t]){ke("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const i=await(await fetch(`${It}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:H.sessionToken,currency:Xl()})})).json();if(i.error||!i.url)throw new Error(i.error||"Failed to create checkout session");const{url:r}=i;window.location.href=r}catch(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),ke("Could not start checkout. Please try again.","error")}}async function ub(t){if(!H.isVerified||!H.sessionToken){fo();return}const e=t||document.getElementById("manage-billing-btn"),n=e?e.textContent:"";e&&(e.disabled=!0,e.textContent="Loading…");try{const r=await(await fetch(`${It}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to open billing portal");const{url:s}=r;window.location.href=s}catch(i){console.error("openCustomerPortal failed:",i),e&&(e.disabled=!1,e.textContent=n),ke("Could not open billing portal. Please try again.","error")}}const Ws=new Set;function qp(){Ws.forEach(t=>t.abort()),Ws.clear()}async function qs(t,e,n,i={},r=[]){const o=new AbortController;Ws.add(o);let a=!1;const l=setTimeout(()=>{a=!0,o.abort()},12e4);try{const u=await fetch(I0,{method:"POST",headers:{"Content-Type":"application/json",...bt.token?{Authorization:`Bearer ${bt.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:bt.userId,step:t,model:e,prompt:n,images:r,context:i})}),c=await u.text();let d={};try{d=c?JSON.parse(c):{}}catch{d={}}if(u.status===429){d.serverCount!==void 0&&(localStorage.setItem(jn,JSON.stringify({count:d.serverCount,month:xn()})),_n());const h=new Error(d.message||"Monthly usage limit reached. Upgrade to continue.");throw h.isUsageLimit=!0,h.pipelineStep=t,h}const f=uy(d,t);if(f)throw f;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(d),"content type:",typeof d.content),!u.ok)throw new Error(`${d.message||d.error||"BuildShip pipeline error"} (HTTP ${u.status})`);if(t==="generator")if(d.usage_status==="success"&&Number.isFinite(d.usage_count)){const h=xn();(d.usage_month||h)===h&&(localStorage.setItem(jn,JSON.stringify({count:d.usage_count,month:h})),_n())}else eb(),_n();let p=d.output||d.content;if(!p){const h=c?` (body: ${c.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${h}`)}return Array.isArray(p)&&(p=p.map(h=>typeof h=="string"?h:h.text||"").join("")),typeof p!="string"&&(p=JSON.stringify(p)),p}catch(u){if(u.name==="AbortError"){if(a)throw new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`);const c=new Error(`BuildShip ${t} request cancelled`);throw c.isPipelineCancel=!0,c}throw u instanceof TypeError?new Error(`BuildShip unreachable: ${u.message}`):u}finally{clearTimeout(l),Ws.delete(o)}}let pl=!1;function db(){const e=new URLSearchParams(window.location.search).get("checkout");return e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),Wp(),pl=!0):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),ke("Checkout cancelled.","info")),e}function fb(){if(!pl)return;pl=!1;const t=fe.tier!=="free";ke(t?"Subscription active! Your plan is live.":"Checkout complete — confirming your subscription. Check Manage billing if it does not update.",t?"success":"info")}function po(){const t=H.isVerified&&!!H.email,e=fe.tier,n=t&&Ii(),i=!t||Dt(),r=document.getElementById("subscription-tier-badge");if(r){const a=Ol,l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};r.textContent=n?"Checking…":i?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${i?l[e]||l.free:l.unresolved}`}const s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!i||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||i&&e==="free"),hb(i?e:null),ob(),Zl(),_n(),dg()}function hb(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([r,{btnId:s,defaultText:o}])=>{const a=document.getElementById(s);a&&(r===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const i=document.getElementById("free-tier-current");i&&i.classList.toggle("hidden",t!=="free")}function pb(){document.querySelectorAll(".pm-card[data-tier]").forEach(t=>{const e=t.dataset.tier,n=Zv[e];if(!n)return;const i=t.querySelector("ul.pm-features");if(i){i.innerHTML="";for(const r of n){const s=document.createElement("li");s.textContent=r,i.appendChild(s)}}})}function gl(){const t=Xl(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),i=document.getElementById("plans-pro-price"),r=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=Yi(Ki.professional,t)),n&&(n.textContent=Yi(Ki.power,t)),i&&(i.textContent=Yi(Ki.professional,t)),r&&(r.textContent=Yi(Ki.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function Si(){gl();const t=document.getElementById("pricing-modal");t&&Ke(t),j0().then(()=>gl())}function zp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&Ye(e)}function ke(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},i=document.createElement("div");i.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${n[e]||n.info}`,i.textContent=t,document.body.appendChild(i),setTimeout(()=>{i.style.opacity="0",setTimeout(()=>i.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{Kv(),Pb(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),gb(),window.__heroField=V_(),window.__pipelineLogo=J_(),Yb(),Jl=_0({onSubmit:wr}),nl=(async()=>{try{await Ww(),db(),await Hp()}catch(n){console.warn("Startup auth/subscription initialization failed:",n)}})(),await nl,fb(),po(),gl(),pb(),await mw(),dw();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=Ge();t.value=n}Sp(),Dp();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{dn===2&&e.value.trim().length>0&&(rc(),io())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");dn===2&&n&&Ke(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const i=document.getElementById("walkthrough-modal");dn===2&&i&&setTimeout(()=>{Ke(i)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:i}=n.detail;i===ne.PREPARING||i===ne.VALIDATING||i===ne.PUSHING?(Zp(),We.phaseId||Xp(),Ld(i)):(i===ne.SUCCESS||i===ne.ERROR)&&(Ld(i),Bn&&clearTimeout(Bn),Bn=setTimeout(()=>{Bn=null,Sc()},1e3))}),Fc()});function gb(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function mb(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",zn),document.addEventListener("keydown",zn))}function zn(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const i=document.getElementById("welcome-video-player");i&&i.removeEventListener("click",zn),document.removeEventListener("keydown",zn),Sp()}let ir=null;async function ml(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++Id,n=++no,i=()=>e===Id,r=vt;vr=null;const s=await Ne("flutterflow"),o=await Ne("flutterflow_project_id");if(i()){if(!s){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const l=await new Gn(s,"","main",Ge()).listProjects();if(!i())return;if(r!==vt||s!==Ie)return ml();if(n>un&&(un=n,tc(l,s,r)),!l||l.length===0){t.innerHTML='';return}t.innerHTML='',l.forEach(u=>{const c=document.createElement("option");c.value=u.id||u.projectId||"",c.textContent=u.name||u.projectName||`Project ${u.id}`,t.appendChild(c)}),vr={key:s,generation:r},o&&(t.value=o)}catch(a){if(!i())return;if(r!==vt||s!==Ie)return ml();console.error("Failed to load projects for deploy:",a),t.innerHTML=''}}}function vb(){const e=document.getElementById("confirm-project-select")?.value?.trim();if(!e)return null;const n=vr;return!n||n.key!==Ie||n.generation!==vt?null:e}function bc(t,e,n,i=null){ir={codeInfo:t,checks:e,deps:n,bundlePlan:i},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=i?`${i.fileEntries.length} files`:t.content.split(` +`).length,ml();const r=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(r.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${cn(c)}`:"version resolved from your project";return`
  • • ${cn(u)}: ${d}
  • `}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
  • • ${cn(u)}
  • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&Ke(l)}function Vp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&Ye(e),ir=null}function yb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&Ye(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const i=document.getElementById("success-warnings-section");i&&i.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function Gp(t){const e=(m,v)=>{const x=document.getElementById(m);x&&(x.textContent=v||"")},n=t.metadata?.fileName||"",i=t.metadata?.projectId||"",r=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",i),e("success-file-name",n),e("success-artifact-type",r),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&i&&(u.href=`https://app.flutterflow.io/project/${i}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),f=t.unverified||[],p=t.approximate||[],h=t.warnings||[];(h.length>0||f.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...f.map(m=>`
  • Not verified before deploying: ${W(String(m))}
  • `),...p.map(m=>`
  • Verified approximately: ${W(String(m))}
  • `),...h.map(([m,v])=>`
  • ${W(m)}: ${W(String(v))}
  • `)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&Ke(g)}function Kp(t){Sc(),Dw(t);const e=t.remoteRefusal===!0;Ec(t,{heading:"Deploy failed",title:e?"FlutterFlow refused this deploy — nothing was confirmed written.":"The deploy failed before FlutterFlow confirmed anything.",guidance:e?"Review the error and any per-file outcomes above, fix them in your code or in FlutterFlow, then deploy again. A refusal is definitive: no part of this deploy was applied, so retrying is safe once the problem is fixed.":"Review the error above, fix it, then deploy again. The deploy stopped before a write was confirmed, so nothing was applied."})}function Ec(t,{heading:e,title:n,guidance:i}){const r=t.targetIdentity||{},s=document.getElementById("commit-terminal-modal");if(!s)return!1;const o=(h,g)=>{const m=document.getElementById(h);m&&(m.textContent=g||"")};o("terminal-heading",e),o("terminal-title",n),o("terminal-message",t.error||t.message||"");const a=document.getElementById("terminal-identity-list");if(a){const h=[["Project",r.projectId||t.metadata?.projectId],["Endpoint",r.endpoint],["File",r.fileName||t.metadata?.fileName],["Artifact",r.artifactType||t.metadata?.artifactType]];a.innerHTML=h.map(([g,m])=>`
    ${W(g)}:${W(String(m??"—"))}
    `).join("")}const l=document.getElementById("terminal-file-outcomes");let u=t.errorMap;u&&!(u instanceof Map)&&(u=new Map(Object.entries(u)));const c=l?.querySelector("ul");l&&c&&u&&u.size>0?(c.innerHTML=[...u.entries()].map(([h,g])=>`
  • ${W(h)}: ${W(ql(g))}
  • `).join(""),l.classList.remove("hidden")):l&&(c&&(c.innerHTML=""),l.classList.add("hidden"));const d=document.getElementById("terminal-guidance");d&&(d.innerHTML=i);const f=document.getElementById("terminal-open-ff-link"),p=r.projectId||t.metadata?.projectId;return f&&(f.href=p?`https://app.flutterflow.io/project/${p}`:"https://app.flutterflow.io/"),Ke(s),!0}function Yp(t){Ec(t,{heading:"Deploy partially applied",title:"Some custom classes reached FlutterFlow, but the deploy did not fully complete.",guidance:"The custom classes the runner confirmed are already in your project and are not lost. Review the per-file errors above, fix them in FlutterFlow or regenerate, then deploy again. Open the project to see exactly what landed."})}function Jp(t){Ec(t,{heading:"Deploy outcome not yet known",title:"This browser stopped waiting before the FlutterFlow server reported a result.",guidance:"The deploy may still be finishing on the server — it was not cancelled. Open your FlutterFlow project and confirm whether the class landed before retrying, so you do not push a duplicate or build on top of an unknown state."})}function _b(t){t&&t.target!==t.currentTarget||Ye(document.getElementById("commit-terminal-modal"))}function wb(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const Md={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},bb=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}];let Bn=null;function Zp(){Bn&&clearTimeout(Bn),Bn=null}const We={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){Zp(),this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&(Yu(e,!0,"Deploying to FlutterFlow"),Ke(e)),this.set("prepare")},set(t,e=null){if(!(!Md[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Md[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=bb.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const i=this.sequence.indexOf(this.phaseId),s=[`Step ${i===-1?1:i+1} of ${this.sequence.length}`];e>=5&&s.push(Eb(e)),Qp(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(Yu(t,!1),Ye(t,{force:!0,restoreFocus:!1}))}};function Eb(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function Xp(t){We.start(t)}function Sc(){We.stop()}function Qp(t,e,n,i=null){const r=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=i||"",a.classList.toggle("hidden",!i))}function Ld(t){const e={[ne.PREPARING]:"prepare",[ne.VALIDATING]:"validate",[ne.PUSHING]:"project",[ne.SUCCESS]:"done"};if(t===ne.ERROR){We.timer&&clearInterval(We.timer),We.timer=null,Qp(100,"Failed","Error occurred");return}const n=e[t];n&&We.set(n)}function Sb(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===X.CODE_FILE):t.codeInfo?.codeType===X.CODE_FILE}let eg=!1;function tg(t){eg=t;const e=document.querySelector("#commit-confirm-modal button[data-deploy-confirm]");e&&(e.disabled=t),[...document.querySelectorAll("[data-deploy-start]"),...document.querySelectorAll("#btn-deploy-to-ff")].forEach(i=>{i.disabled=t})}function Nd(t){Sc(),tg(!1);const e=ep(t);e===De.COMMITTED?Gp(t):e===De.PARTIAL?Yp(t):e===De.UNCONFIRMED?Jp(t):Kp(t)}async function xb(){if(!ir){console.error("No pending commit data");return}if(eg){console.warn("Deploy already in flight; ignoring duplicate confirm.");return}const t=ir;if(ir=null,nr=vb(),Vp(),tg(!0),Xp({withProvisioning:Sb(t)}),t.bundlePlan){const o=await Aw(t.bundlePlan,{pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});nr=null,Nd(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:i,fileName:r}=xp(),s=await Cw(e.content,{artifactType:n,artifactName:i,fileName:r,pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});nr=null,Nd(s)}window.runThinkingPipeline=wr;window.toggleStep=Rw;window.toggleSection=Fw;window.selectWorkflowStep=ut;window.copyCode=Tw;window.retryWithDifferentModel=Nw;window.openApiKeysModal=ic;window.closeApiKeysModal=bp;window.openComposerSettings=wp;window.closeComposerSettings=nw;window.walkthroughConnectAccount=tw;window.closeWalkthroughModal=rw;window.openWalkthroughModal=iw;window.advanceWalkthrough=rc;window.commitToFlutterFlow=kw;function Ib(){_.isRunning||jt(!1);const t=document.getElementById("pipeline-input");t&&t.focus()}function kb(){wp();const t=document.getElementById("composer-settings-model");t&&(t.scrollIntoView({behavior:"smooth",block:"center"}),t.focus(),t.click())}window.focusPromptInput=Ib;window.openModelSelector=kb;window.handlePromptImageSelect=B0;window.removePromptImage=D0;window.saveApiKeys=aw;window.validateFlutterFlowConnection=oc;window.clearAllApiKeys=lw;window.toggleKeyVisibility=hw;window.handleWelcomeVideoEnd=mb;window.dismissWelcomeVideo=zn;window.initiateCommitToFlutterFlow=Ow;window.updateFlutterFlowCredentialStatus=jw;window.openCommitConfirmModal=bc;window.closeCommitConfirmModal=Vp;window.closeCommitSuccessModal=yb;window.closeCommitTerminalModal=_b;window.showCommitPartialModal=Yp;window.showCommitUnconfirmedModal=Jp;window.showCommitSuccessModal=Gp;window.showCommitFailureModal=Kp;window.toggleCodePreview=wb;window.confirmCommitToFlutterFlow=xb;window.runRefinement=Tp;window.regenerateFromPastedErrors=$p;window.clearErrorInput=Lw;window.setFlutterFlowEndpoint=X0;window.getFlutterFlowEndpoint=Ge;window.commitProgress=We;window.openSignInModal=fo;window.closeSignInModal=Bp;window.handleMagicLinkRequest=zw;window.handleSignOut=Vw;window.handleSendNewLink=Yw;window.handleClearCache=Jw;window.handleDeleteAccount=Zw;window.closeDeleteUnavailableModal=Xw;window.startCheckout=cb;window.openCustomerPortal=ub;window.openPricingModal=Si;window.closePricingModal=zp;let os=null,ng=null,Vn={1:"pending",2:"pending",3:"pending"},xc=1,Ic=null;const go={1:"Prompt Architect",2:"Code Generator",3:"Code Review"},Cb={1:"Understanding your prompt",2:"Generating Dart code",3:"Running the code audit"},Ab={1:"Prompt understood",2:"Dart code generated",3:"Code audit complete"};function mo(){return _.runId+=1,_.runId}function le(t){return t===void 0||t===_.runId}function ig(){_.runId+=1}function kc(t){return document.getElementById(`pdot-${t}`)}const rg=window.matchMedia("(max-width: 920px)");function Od(){const t=document.getElementById("pipeline-progress"),e=t?.querySelector(":scope > .pipeline-view"),n=t?.querySelector(":scope > .pipeline-prompt-recap");if(!e||!n)return;const i=rg.matches;if((e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0===i)return;const s=document.activeElement;t.insertBefore(n,i?e.nextSibling:e),s instanceof HTMLElement&&n.contains(s)&&s.focus({preventScroll:!0})}function Pb(){Od(),rg.addEventListener("change",Od)}function Fb(t){return{1:"Turning your idea into a clear FlutterFlow specification.",2:"Building the Dart source, widget parameters and animation.",3:"Checking the generated code and preparing the file review."}[t]||""}function zs(t){const e=document.getElementById("btn-run-pipeline")||document.getElementById("hero-send");e&&(e.disabled=t,e.classList.toggle("is-busy",t),t?e.setAttribute("aria-busy","true"):e.removeAttribute("aria-busy"))}function vo(t){const e=document.getElementById("pipeline-progress");e&&(e.dataset.runState=t)}function Un(t,e){Vn[t]=e;const n=kc(t);if(!n)return;n.dataset.state=e,n.disabled=e==="pending"||e==="skipped";const i=go[t],r={pending:"not started",active:"in progress",done:"complete",failed:"failed",skipped:"not run"};n.setAttribute("aria-label",`Step ${t} of 3, ${i}: ${r[e]||e}`),e==="active"?n.setAttribute("aria-current","step"):n.removeAttribute("aria-current")}function Rb(){return[1,2,3].filter(t=>Vn[t]==="done").length}function yo(){const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width=`${Rb()/3*100}%`);const e=document.getElementById("progress-stage-count");e&&(e.textContent=`Step ${xc} of 3`)}function _o(t,{done:e=!1}={}){const n=document.getElementById("progress-title-text"),i=document.getElementById("progress-description-text"),r=document.getElementById("progress-substep-text"),s=Vn[t],o=e||s==="done";if(n&&(n.textContent=o?Ab[t]:Cb[t]),i&&(i.textContent=Fb(t)),r){const a=o?" — complete":s==="failed"?" — stopped":"";r.textContent=`Step ${t} of 3 — ${go[t]}${a}`}}function Tb(t){Vn[t]==="pending"||Vn[t]==="skipped"||(Ic=t,[1,2,3].forEach(e=>{const n=kc(e);n&&n.setAttribute("aria-pressed",String(e===t))}),_o(t))}function Cc(){Ic=null,[1,2,3].forEach(t=>{const e=kc(t);e&&e.removeAttribute("aria-pressed")})}function sg(t){const e=document.getElementById("pipeline-note");e&&(e.textContent=t||"",e.hidden=!t)}function $b(t,e,n){le(n)&&sg(`${nn(t)} did not answer. Continuing on ${nn(e)}.`)}function Ac(){const t=document.getElementById("pipeline-failure");if(!t)return;t.hidden=!0;const e=document.getElementById("pipeline-failure-actions");e&&e.replaceChildren()}function Mb(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0}function In(){Wn()}function Lb(){return[".pipeline-prompt-kicker","#pipeline-submitted-prompt","#pipeline-edit-prompt",".pipeline-glyph","#progress-title-text","#progress-description-text",".progress-track",".progress-meta"].map(t=>document.querySelector(t))}function Nb(){const e=document.getElementById("pipeline-stage-nav").classList.toggle("is-open");document.getElementById("progress-stage-count").setAttribute("aria-expanded",String(e))}window.togglePipelineStageNavigation=Nb;function Ob(t,e){op(t,document.getElementById("main-stage-container"),Lb()),E0(document.getElementById("hero"),e)}window.addEventListener("hashchange",In);window.addEventListener("popstate",In);function wo(t={}){const{prompt:e=null,runId:n}=t;if(!le(n))return;ki(),In(),jt(!0);const i=document.getElementById("pipeline-progress"),r=document.getElementById("results-view"),s=document.getElementById("ready-state");if(s&&s.classList.add("hidden"),r&&r.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),i&&i.classList.add("visible"),document.getElementById("pipeline-stage-nav")?.classList.remove("is-open"),document.getElementById("progress-stage-count")?.setAttribute("aria-expanded","false"),vo("running"),e!==null){const a=document.getElementById("pipeline-submitted-prompt");a&&(a.textContent=e)}ng=Date.now();const o=document.getElementById("progress-elapsed");o&&(o.textContent="0s"),Vn={1:"pending",2:"pending",3:"pending"},Cc(),Ac(),sg(""),[1,2,3].forEach(a=>Un(a,"pending")),Ot(1,n),Bb()}function Ot(t,e){le(e)&&(xc=t,Cc(),[1,2,3].forEach(n=>{n===t?Un(n,"active"):nt&&Un(n,"pending")}),_o(t),yo())}function fn(t,e){le(e)&&(Un(t,"done"),Ic===null&&_o(t,{done:!0}),yo())}function og(t,{stage:e=1,runId:n,retry:i=ag}={}){if(!le(n))return;kr(),ki(),In(),vo("failed"),jt(!0);const r=document.getElementById("pipeline-progress");r&&r.classList.add("visible");const s=document.getElementById("results-view");s&&s.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),Un(e,"failed"),[1,2,3].forEach(h=>{h>e&&Un(h,"pending")}),xc=e,Cc(),_o(e),yo();const o=ip(t),a=document.getElementById("pipeline-failure"),l=document.getElementById("pipeline-failure-title"),u=document.getElementById("pipeline-failure-message"),c=document.getElementById("pipeline-failure-hint"),d=document.getElementById("pipeline-failure-actions");if(!a||!l||!u||!d)return;if(a.dataset.kind=o.kind,l.textContent=`${go[e]}: ${o.title}`,u.textContent=o.message,c){const h=o.detail&&o.detail!==o.message?o.detail:"";c.textContent=h,c.hidden=!h}d.replaceChildren();const f=[o.canUpgrade&&{id:"upgrade",label:"View plans",variant:"primary",onClick:()=>Si()},o.canRetry&&{id:"retry",label:"Retry",variant:o.canUpgrade?"secondary":"primary",onClick:i},o.canEdit&&{id:"edit",label:"Edit prompt",variant:"secondary",onClick:vl}].filter(Boolean);!o.canEdit&&!o.canRetry&&f.push({id:"edit",label:"Back to prompt",variant:"secondary",onClick:vl}),f.forEach(h=>{const g=document.createElement("button");g.type="button",g.textContent=h.label,g.dataset.action=h.id,g.dataset.variant=h.variant,g.addEventListener("click",h.onClick),d.appendChild(g)}),a.hidden=!1;const p=d.querySelector("button");p&&p.focus({preventScroll:!0})}function vl(){ig(),qp(),_.isRunning=!1,zs(!1),hn(),vo("settled"),In(),kr(),ki(),Ac();const t=document.getElementById("pipeline-progress");t&&t.classList.remove("visible"),jt(!1);const e=document.getElementById("pipeline-input");e&&(_.submittedPrompt&&(e.value=_.submittedPrompt,e.dispatchEvent(new Event("input",{bubbles:!0}))),e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))}function ag(){const t=document.getElementById("pipeline-input");t&&_.submittedPrompt&&(t.value=_.submittedPrompt,t.dispatchEvent(new Event("input",{bubbles:!0}))),He=_.submittedImages.slice(),yn(),Ac(),wr()}function Bb(){kr(),os=setInterval(()=>{const t=(Date.now()-ng)/1e3,e=document.getElementById("progress-elapsed");e&&(e.textContent=`${Math.floor(t)}s`)},250)}function kr(){os&&(clearInterval(os),os=null)}let rr=null;function ki(){rr&&(clearTimeout(rr),rr=null)}function Cr(){kr(),ki(),vo("settled"),yo();const t=document.getElementById("pipeline-progress-fill");rr=setTimeout(()=>{rr=null;const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function xi(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function lg(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function Db(){return o_({bundle:_.artifactBundle,reviewResult:_.step3Result})}function jb(t){return` +
    + ${xi(t.severity)}
    ${W(t.message)}
    ${t.suggestion?`
    ${W(t.suggestion)}
    `:""} ${W(t.source)}
    - `}function Sb(t){return` + `}function Ub(t){return`
  • ${W(t.title)} ${t.detail&&t.detail!==t.title?`

    ${W(t.detail)}

    `:""}
  • - `}function xb(t){const e=document.getElementById("results-summary-detail"),n=document.getElementById("results-title");if(!e)return;n&&(n.textContent=t.title);const i=t.score,r=i==null?"neutral":i>=80?"pass":i>=60?"warning":"fail",s=i==null?"":i>=80?"Strong":i>=60?"Needs work":"High risk",o=t.findings.length?` + `}function Hb(t){const e=document.getElementById("results-summary-detail"),n=document.getElementById("results-title");if(!e)return;n&&(n.textContent=t.title);const i=t.score,r=i==null?"neutral":i>=80?"pass":i>=60?"warning":"fail",s=i==null?"":i>=80?"Strong":i>=60?"Needs work":"High risk",o=t.findings.length?`
      ${t.findings.map(u=>` -
    • - ${yi(u.severity)} +
    • + ${xi(u.severity)} ${W(u.message)} ${u.suggestion?`${W(u.suggestion)}`:""} @@ -198,7 +198,7 @@ Error: ${g}
    `:"",a=t.warnings.length?`
    -

    ${yi("warning")} Bundle

    +

    ${xi("warning")} Bundle

      ${t.warnings.map(u=>`
    • ${W(u)}
    • `).join("")}
    @@ -231,7 +231,7 @@ Error: ${g} ${a}
    -
    - `}function Ib(t){const e=t.artifacts.find(l=>l.id===_.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],i=e.findings.length?e.findings.map(Eb).join(""):`
    ${yi(n.icon)} ${W(n.message)}
    `,r=e.dependencies?.length?e.dependencies.map(l=>` + `}function Wb(t){const e=t.artifacts.find(l=>l.id===_.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],i=e.findings.length?e.findings.map(jb).join(""):`
    ${xi(n.icon)} ${W(n.message)}
    `,r=e.dependencies?.length?e.dependencies.map(l=>`
  • ${W(l.name)}${l.version?` ${W(l.version)}`:""}${l.reason?`

    ${W(l.reason)}

    `:""}
  • `).join(""):'
  • No external packages
  • ',s=e.imports?.length?e.imports.map(l=>`${W(l)}`).join(""):'No imports returned',o=e.publicApi?.length?e.publicApi.map(l=>`${W(l)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(l=>`
  • ${W(l.from||"Bundle")} ${W(l.type)} ${W(l.to||"Bundle")}${l.description?`

    ${W(l.description)}

    `:""}
  • `).join(""):'
  • No relationships for this file
  • ';return`
    - ${yi(e.status)} ${W(Gp(e.status))} + ${xi(e.status)} ${W(lg(e.status))}

    ${W(e.artifactName)}

    ${e.description?`

    ${W(e.description)}

    `:""}
    @@ -274,7 +274,7 @@ Error: ${g} ${e.manualSteps.length?`

    Manual FlutterFlow steps for this file

    -
      ${e.manualSteps.map(Sb).join("")}
    +
      ${e.manualSteps.map(Ub).join("")}
    `:""}
    @@ -306,23 +306,23 @@ Error: ${g}
      ${a}
    - `}function kb(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),i=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(n){const s=_.resultsViewMode==="summary";n.classList.toggle("active",s),n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(s)),n.setAttribute("aria-controls","results-summary-detail"),n.tabIndex=s?0:-1}if(i&&(i.setAttribute("role","tablist"),i.setAttribute("aria-label","Artifacts in this bundle")),!t.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),i&&(i.innerHTML=""),Sd();return}if(r){const s=t.artifacts.length;r.textContent=`${s} ${s===1?"file":"files"}`}i&&(i.innerHTML=t.artifacts.map(s=>{const o=_.resultsViewMode==="file"&&s.id===_.selectedArtifactId;return` + `}function qb(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),i=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(n){const s=_.resultsViewMode==="summary";n.classList.toggle("active",s),n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(s)),n.setAttribute("aria-controls","results-summary-detail"),n.tabIndex=s?0:-1}if(i&&(i.setAttribute("role","tablist"),i.setAttribute("aria-label","Artifacts in this bundle")),!t.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),i&&(i.innerHTML=""),Bd();return}if(r){const s=t.artifacts.length;r.textContent=`${s} ${s===1?"file":"files"}`}i&&(i.innerHTML=t.artifacts.map(s=>{const o=_.resultsViewMode==="file"&&s.id===_.selectedArtifactId;return` - `}).join(""),i.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&pc(o.dataset.artifactId)},Sd()),e&&e.classList.add("visible")}function Sd(){const t=document.getElementById("bundle-strip");!t||t.dataset.tabKeyboard==="bound"||(t.dataset.tabKeyboard="bound",t.addEventListener("keydown",e=>{if(e.defaultPrevented)return;const n=[document.getElementById("results-summary-tab"),...Array.from(document.querySelectorAll("#artifact-tabs .artifact-tab"))].filter(Boolean);if(!n.length||!n.includes(document.activeElement))return;let i=-1;const r=n.indexOf(document.activeElement);if(e.key==="ArrowRight")i=(r+1)%n.length;else if(e.key==="ArrowLeft")i=(r-1+n.length)%n.length;else if(e.key==="Home")i=0;else if(e.key==="End")i=n.length-1;else return;e.preventDefault();const s=n[i];if(!s)return;if(s.id==="results-summary-tab")Kp();else{const a=s.dataset.artifactId;a&&pc(a)}const o=s.id==="results-summary-tab"?document.getElementById("results-summary-tab"):document.querySelector(`#artifact-tabs .artifact-tab[data-artifact-id="${s.dataset.artifactId}"]`);o&&o.focus()}))}function uo(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),i=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),s=bb(),o=Kl();if(i&&(i.setAttribute("role","tabpanel"),i.setAttribute("aria-labelledby","results-summary-tab")),r){r.setAttribute("role","tabpanel");const a=s?.artifacts?.find(l=>l.id===_.selectedArtifactId);r.setAttribute("aria-labelledby",a?`artifact-tab-${a.id}`:"results-summary-tab")}xb(s),kb(s),e&&(e.textContent=""),e&&(e.replaceChildren(),o.split(` -`).forEach((a,l)=>{const u=document.createElement("span");u.className="code-line",u.innerHTML=qh(a),!mb()&&_.resultsViewMode==="file"&&(u.classList.add("is-in"),u.style.setProperty("--d",`${l*10}ms`),u.addEventListener("animationend",()=>u.classList.remove("is-in"),{once:!0})),e.appendChild(u)})),n&&(n.innerHTML=Ib(s)),i&&i.classList.toggle("hidden",_.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",_.resultsViewMode!=="file"),t&&t.classList.add("visible")}function br(t,e){const n=document.getElementById("main-stage-container"),i=i0(n),r=document.body.classList.contains("results-fullscreen");bi(),document.getElementById("pipeline-progress")?.classList.remove("visible"),Lt(!0),_.selectedArtifactId||(_.selectedArtifactId=di(_.artifactBundle).id),_.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),uo(),on(),Cb(),r||Vh(i,n,["#bundle-strip",".summary-heading",".review-summary-text",".summary-spec",".review-score-column",".results-action-bar"].map(o=>document.querySelector(o)),{results:!0})}function Cb(){const t=document.getElementById("btn-feedback-up"),e=document.getElementById("btn-feedback-down"),n=document.getElementById("results-feedback-status");t&&(t.className="feedback-btn",t.setAttribute("aria-pressed","false"),t.disabled=!1,t.removeAttribute("aria-disabled")),e&&(e.className="feedback-btn",e.setAttribute("aria-pressed","false"),e.disabled=!1,e.removeAttribute("aria-disabled")),n&&(n.textContent=""),sl=!1}function pc(t){_.selectedArtifactId=t,_.resultsViewMode="file",uo()}function Kp(){_.resultsViewMode="summary",uo()}function Ab(){const t=document.getElementById("btn-copy-results"),e=document.getElementById("results-copy-status"),n=Kl(),i=(r,s)=>{e&&(e.textContent=r,e.classList.toggle("ok",!!s),e.classList.toggle("fail",!s))};if(!navigator.clipboard?.writeText){i("Copying isn't supported in this browser.",!1);return}navigator.clipboard.writeText(n).then(()=>{if(i("Copied to clipboard",!0),t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}}).catch(()=>{i("Clipboard permission was denied. Select the code to copy it manually.",!1)})}let sl=!1;async function Pb(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down"),i=document.getElementById("results-feedback-status");if(!e||!n||sl)return;const r=l=>{i&&(i.textContent="",i.offsetWidth,i.textContent=l)},s=l=>{sl=l,[e,n].forEach(u=>{u.disabled=l,u.setAttribute("aria-disabled",String(l))})},o=t==="up"?"thumbsUp":"thumbsDown";s(!0),r("Submitting review feedback…");const a={type:o,code:_.step2Result,input:_.step1Result};try{const l=await ic(a.type,a.code,a.input);if(!l||l.success!==!0){s(!1),r("Review feedback could not be sent. Tap again to retry.");return}e.classList.toggle("active-up",t==="up"),n.classList.toggle("active-down",t==="down"),e.setAttribute("aria-pressed",String(t==="up")),n.setAttribute("aria-pressed",String(t==="down")),s(!1),r("Review feedback saved.")}catch{s(!1),r("Review feedback could not be sent. Tap again to retry.")}}function Fb(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function Yp(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function Rb(){const t=document.getElementById("shell-stage"),e=document.getElementById("main-stage-container"),n=e?.querySelector(".pipeline-prompt-recap"),i=window.matchMedia("(max-width: 920px)"),r=()=>t?.style.setProperty("--fit",Math.min(1,document.documentElement.clientWidth/1920)),s=()=>{if(!n)return;const o=n.contains(document.activeElement)?document.activeElement:null;i.matches?e.appendChild(n):e.prepend(n),o?.focus({preventScroll:!0})};r(),s(),window.addEventListener("resize",r),i.addEventListener("change",s)}function Lt(t){const e=document.getElementById("generation-stage");if(!e)return;const n=document.getElementById("hero");n&&(n.hidden=t,n.inert=t),t?(e.hidden=!1,e.inert=!1,e.classList.add("is-active")):(yn(),document.body.classList.remove("results-fullscreen","results-with-sidebar"),e.classList.remove("is-active"),e.inert=!0,e.hidden=!0)}function Jp(){const t=H.isVerified&&!!H.email,e=fe.tier||"free",n=t&&wi(),i=!t||Mt(),s=n?"Checking…":i?xl[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(H.email||"?")[0].toUpperCase()),sc();const l=document.getElementById("plans-free-current");l&&l.classList.toggle("hidden",e!=="free"||!i);const u=document.getElementById("plans-checkout-btn-professional");if(u){const d=e==="professional"&&i;u.disabled=d,u.textContent=d?"Current plan":"Subscribe"}const c=document.getElementById("plans-checkout-btn-power");if(c){const d=e==="power"&&i;c.disabled=d,c.textContent=d?"Current plan":"Subscribe"}}function Tb(){Jp();const t=document.getElementById("credits-modal");t&&Ve(t)}function $b(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&Ge(e)}function Zp(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.body.dataset.shellView=t,t!=="home"&&(yn(),Nl?.cancelTyping?.(),_.isRunning&&(Hp(),Pp(),_.isRunning=!1,Os(!1),_r(),bi())),document.querySelectorAll(".view[data-view]").forEach(r=>{r.dataset.view===t?(r.hidden=!1,r.removeAttribute("inert"),requestAnimationFrame(()=>{r.classList.add("is-active"),n&&r.focus({preventScroll:!0})})):(r.classList.remove("is-active"),r.setAttribute("inert","true"),setTimeout(()=>{r.classList.contains("is-active")||(r.hidden=!0)},260))}),t!=="home")Lt(!1);else{const r=document.getElementById("main-stage-container");r&&r.classList.contains("visible")&&Lt(!0)}if(e){const r=t==="home"?"":`#${t}`;window.location.hash!==r&&window.history.pushState({view:t},"",r||"#")}}let xd=!1;function gc(){const t=window.location.hash.replace(/^#/,"");Zp(t||"home",!1,xd),xd=!0}window.addEventListener("popstate",t=>{gc()});window.addEventListener("hashchange",()=>{gc()});window.copyResultsCode=Ab;window.selectArtifact=pc;window.selectResultsSummary=Kp;window.submitResultsFeedback=Pb;window.showErrorInputPanel=Fb;window.hideErrorInputPanel=Yp;window.setGenerationStageVisible=Lt;window.switchView=Zp;window.selectPipelineStage=pb;window.editPipelinePrompt=rl;window.retryPipelineRun=Vp;window.openCreditsModal=Tb;window.closeCreditsModal=$b; + `}).join(""),i.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&Pc(o.dataset.artifactId)},Bd()),e&&e.classList.add("visible")}function Bd(){const t=document.getElementById("bundle-strip");!t||t.dataset.tabKeyboard==="bound"||(t.dataset.tabKeyboard="bound",t.addEventListener("keydown",e=>{if(e.defaultPrevented)return;const n=[document.getElementById("results-summary-tab"),...Array.from(document.querySelectorAll("#artifact-tabs .artifact-tab"))].filter(Boolean);if(!n.length||!n.includes(document.activeElement))return;let i=-1;const r=n.indexOf(document.activeElement);if(e.key==="ArrowRight")i=(r+1)%n.length;else if(e.key==="ArrowLeft")i=(r-1+n.length)%n.length;else if(e.key==="Home")i=0;else if(e.key==="End")i=n.length-1;else return;e.preventDefault();const s=n[i];if(!s)return;if(s.id==="results-summary-tab")cg();else{const a=s.dataset.artifactId;a&&Pc(a)}const o=s.id==="results-summary-tab"?document.getElementById("results-summary-tab"):document.querySelector(`#artifact-tabs .artifact-tab[data-artifact-id="${s.dataset.artifactId}"]`);o&&o.focus()}))}function bo(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),i=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),s=Db(),o=lc();if(i&&(i.setAttribute("role","tabpanel"),i.setAttribute("aria-labelledby","results-summary-tab")),r){r.setAttribute("role","tabpanel");const a=s?.artifacts?.find(l=>l.id===_.selectedArtifactId);r.setAttribute("aria-labelledby",a?`artifact-tab-${a.id}`:"results-summary-tab")}Hb(s),qb(s),e&&(e.textContent=""),e&&(e.replaceChildren(),o.split(` +`).forEach((a,l)=>{const u=document.createElement("span");u.className="code-line",u.innerHTML=rp(a),!Mb()&&_.resultsViewMode==="file"&&(u.classList.add("is-in"),u.style.setProperty("--d",`${l*10}ms`),u.addEventListener("animationend",()=>u.classList.remove("is-in"),{once:!0})),e.appendChild(u)})),n&&(n.innerHTML=Wb(s)),i&&i.classList.toggle("hidden",_.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",_.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Ar(t,e){const n=document.getElementById("main-stage-container"),i=w0(n),r=document.body.classList.contains("results-fullscreen");ki(),document.getElementById("pipeline-progress")?.classList.remove("visible"),jt(!0),_.selectedArtifactId||(_.selectedArtifactId=yi(_.artifactBundle).id),_.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),bo(),hn(),zb(),r||op(i,n,["#bundle-strip",".summary-heading",".review-summary-text",".summary-spec",".review-score-column",".results-action-bar"].map(o=>document.querySelector(o)),{results:!0})}function zb(){const t=document.getElementById("btn-feedback-up"),e=document.getElementById("btn-feedback-down"),n=document.getElementById("results-feedback-status");t&&(t.className="feedback-btn",t.setAttribute("aria-pressed","false"),t.disabled=!1,t.removeAttribute("aria-disabled")),e&&(e.className="feedback-btn",e.setAttribute("aria-pressed","false"),e.disabled=!1,e.removeAttribute("aria-disabled")),n&&(n.textContent=""),yl=!1}function Pc(t){_.selectedArtifactId=t,_.resultsViewMode="file",bo()}function cg(){_.resultsViewMode="summary",bo()}function Vb(){const t=document.getElementById("btn-copy-results"),e=document.getElementById("results-copy-status"),n=lc(),i=(r,s)=>{e&&(e.textContent=r,e.classList.toggle("ok",!!s),e.classList.toggle("fail",!s))};if(!navigator.clipboard?.writeText){i("Copying isn't supported in this browser.",!1);return}navigator.clipboard.writeText(n).then(()=>{if(i("Copied to clipboard",!0),t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}}).catch(()=>{i("Clipboard permission was denied. Select the code to copy it manually.",!1)})}let yl=!1;async function Gb(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down"),i=document.getElementById("results-feedback-status");if(!e||!n||yl)return;const r=l=>{i&&(i.textContent="",i.offsetWidth,i.textContent=l)},s=l=>{yl=l,[e,n].forEach(u=>{u.disabled=l,u.setAttribute("aria-disabled",String(l))})},o=t==="up"?"thumbsUp":"thumbsDown";s(!0),r("Submitting review feedback…");const a={type:o,code:_.step2Result,input:_.step1Result};try{const l=await yc(a.type,a.code,a.input);if(!l||l.success!==!0){s(!1),r("Review feedback could not be sent. Tap again to retry.");return}e.classList.toggle("active-up",t==="up"),n.classList.toggle("active-down",t==="down"),e.setAttribute("aria-pressed",String(t==="up")),n.setAttribute("aria-pressed",String(t==="down")),s(!1),r("Review feedback saved.")}catch{s(!1),r("Review feedback could not be sent. Tap again to retry.")}}function Kb(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function ug(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function Yb(){const t=document.getElementById("shell-stage"),e=document.getElementById("main-stage-container"),n=e?.querySelector(".pipeline-prompt-recap"),i=window.matchMedia("(max-width: 920px)"),r=()=>t?.style.setProperty("--fit",Math.min(1,document.documentElement.clientWidth/1920)),s=()=>{if(!n)return;const o=n.contains(document.activeElement)?document.activeElement:null;i.matches?e.appendChild(n):e.prepend(n),o?.focus({preventScroll:!0})};r(),s(),window.addEventListener("resize",r),i.addEventListener("change",s)}function jt(t){const e=document.getElementById("generation-stage");if(!e)return;const n=document.getElementById("hero");n&&(n.hidden=t,n.inert=t),t?(e.hidden=!1,e.inert=!1,e.classList.add("is-active")):(In(),document.body.classList.remove("results-fullscreen","results-with-sidebar"),e.classList.remove("is-active"),e.inert=!0,e.hidden=!0)}function dg(){const t=H.isVerified&&!!H.email,e=fe.tier||"free",n=t&&Ii(),i=!t||Dt(),s=n?"Checking…":i?Ol[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(H.email||"?")[0].toUpperCase()),wc();const l=document.getElementById("plans-free-current");l&&l.classList.toggle("hidden",e!=="free"||!i);const u=document.getElementById("plans-checkout-btn-professional");if(u){const d=e==="professional"&&i;u.disabled=d,u.textContent=d?"Current plan":"Subscribe"}const c=document.getElementById("plans-checkout-btn-power");if(c){const d=e==="power"&&i;c.disabled=d,c.textContent=d?"Current plan":"Subscribe"}}function Jb(){dg();const t=document.getElementById("credits-modal");t&&Ke(t)}function Zb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&Ye(e)}function fg(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.body.dataset.shellView=t,t!=="home"&&(In(),Jl?.cancelTyping?.(),_.isRunning&&(ig(),qp(),_.isRunning=!1,zs(!1),kr(),ki())),document.querySelectorAll(".view[data-view]").forEach(r=>{r.dataset.view===t?(r.hidden=!1,r.removeAttribute("inert"),requestAnimationFrame(()=>{r.classList.add("is-active"),n&&r.focus({preventScroll:!0})})):(r.classList.remove("is-active"),r.setAttribute("inert","true"),setTimeout(()=>{r.classList.contains("is-active")||(r.hidden=!0)},260))}),t!=="home")jt(!1);else{const r=document.getElementById("main-stage-container");r&&r.classList.contains("visible")&&jt(!0)}if(e){const r=t==="home"?"":`#${t}`;window.location.hash!==r&&window.history.pushState({view:t},"",r||"#")}}let Dd=!1;function Fc(){const t=window.location.hash.replace(/^#/,"");fg(t||"home",!1,Dd),Dd=!0}window.addEventListener("popstate",t=>{Fc()});window.addEventListener("hashchange",()=>{Fc()});window.copyResultsCode=Vb;window.selectArtifact=Pc;window.selectResultsSummary=cg;window.submitResultsFeedback=Gb;window.showErrorInputPanel=Kb;window.hideErrorInputPanel=ug;window.setGenerationStageVisible=jt;window.switchView=fg;window.selectPipelineStage=Tb;window.editPipelinePrompt=vl;window.retryPipelineRun=ag;window.openCreditsModal=Jb;window.closeCreditsModal=Zb; diff --git a/dist/index.html b/dist/index.html index 4afc291..783aef1 100644 --- a/dist/index.html +++ b/dist/index.html @@ -3298,7 +3298,7 @@ .send.is-busy .send-spin { animation: none; opacity: 0.6; } } - +