{"mappings":"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","names":["getTopLevelDomain","hostname","parts","saveColorScheme","scheme","storageKey","domain","domainAttribute","setColorScheme","resolvedScheme","USER_SETTINGS_KEYS","getUrlHashPreference","getUrlQueryPreference","getHermesPreference","getCookiePreference","storageKey","row","getUserAccountSettingsPreference","existingKey","key","localStorageSettings","darkmodeValue","getLocalStoragePreference","getColorSchemePreference","defaultColorSchemePreference","p","getColorScheme","preference","initializeDarkMode","defaultColorSchemePreference","darkmodeStorageKey","getColorScheme","prefersDark","handlePreferences"],"sources":["../esm/npm/@schibsted/dark-mode@0.0.12/node_modules/@schibsted/dark-mode/dist/actions.js","../esm/npm/@schibsted/dark-mode@0.0.12/node_modules/@schibsted/dark-mode/dist/preferences.js","../esm/npm/@schibsted/dark-mode@0.0.12/node_modules/@schibsted/dark-mode/dist/initialize.js"],"sourcesContent":["/**\n * Get the top-level domain for cookie storage\n * @returns The top-level domain (e.g., aftonbladet.se from https://front.pro.front-pages.aftonbladet.se/)\n */\nfunction getTopLevelDomain() {\n    if (typeof window === \"undefined\")\n        return \"\";\n    const hostname = window.location.hostname;\n    const parts = hostname.split(\".\");\n    // If localhost or IP address, don't set domain\n    if (parts.length \u003c= 1 || /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)) {\n        return \"\";\n    }\n    // Return last two parts (e.g., \"aftonbladet.se\" from \"front.pro.front-pages.aftonbladet.se\")\n    return `.${parts.slice(-2).join(\".\")}`;\n}\n/**\n * Save color scheme to localStorage and cookie (internal function)\n */\nfunction saveColorScheme(scheme, storageKey) {\n    if (typeof window !== \"undefined\") {\n        window.localStorage?.setItem(storageKey, scheme);\n    }\n    if (typeof document !== \"undefined\") {\n        const domain = getTopLevelDomain();\n        const domainAttribute = domain ? `; domain=${domain}` : \"\";\n        // biome-ignore lint: noDocumentCookie\n        document.cookie = `${storageKey}=${scheme}; path=/; max-age=31536000; SameSite=Lax${domainAttribute}`;\n    }\n}\n/**\n * Set a specific color scheme\n * Saves the preference and updates the UI immediately\n * @param scheme The color scheme to set: \"light\", \"dark\", or \"system\"\n * @param storageKey Use specified key when storing in local storage and cookie. Default is \"prefers-color-scheme\"\n * @example\n * // Set to dark mode\n * setColorScheme('dark');\n *\n * // Set to dark-mode with other key\n * setColorScheme('dark', 'svd-theme');\n *\n * // Set to light mode\n * setColorScheme('light');\n *\n * // Set to follow system preference\n * setColorScheme('system');\n *\n */\nexport function setColorScheme(scheme, storageKey = \"prefers-color-scheme\") {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n        return;\n    }\n    // Save the preference\n    saveColorScheme(scheme, storageKey);\n    // Get the resolved scheme (in case \"system\" was passed)\n    const resolvedScheme = scheme === \"system\"\n        ? window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n            ? \"dark\"\n            : \"light\"\n        : scheme;\n    // Update the UI immediately\n    document.documentElement.dataset.colorScheme = resolvedScheme;\n    // Dispatch event to notify listeners\n    document.dispatchEvent(new Event(\"prefers-color-scheme\"));\n}\n","// User settings keys to check - only used by VG for now\nconst USER_SETTINGS_KEYS = [\"VG_USER_SETTINGS\"];\n/**\n * Get color scheme preference from URL hash fragment\n * @returns The color scheme preference from URL hash (e.g., #prefers-color-scheme=dark) or undefined if not found\n * @example\n * // URL: https://example.com/#prefers-color-scheme=dark\n * getUrlHashPreference() // returns \"dark\"\n */\nfunction getUrlHashPreference() {\n    if (typeof window === \"undefined\")\n        return undefined;\n    return window.location.hash?.match(/prefers-color-scheme=([a-z]+)/)?.[1];\n}\n/**\n * Get color scheme preference from URL query parameters\n * @returns The color scheme preference from URL query parameter or null if not found\n * @example\n * // URL: https://example.com/?prefers-color-scheme=light\n * getUrlQueryPreference() // returns \"light\"\n */\nfunction getUrlQueryPreference() {\n    if (typeof window === \"undefined\")\n        return null;\n    return new URLSearchParams(window.location.search)?.get(\"prefers-color-scheme\");\n}\n/**\n * Get color scheme preference from Hermes user agent\n * @returns \"system\" if Hermes user agent is detected, undefined otherwise\n * @example\n * // Schibsted ios \u0026 Android apps use Hermes user agent\n * getHermesPreference() // returns \"system\"\n */\nfunction getHermesPreference() {\n    if (typeof window === \"undefined\" || typeof navigator === \"undefined\")\n        return undefined;\n    return /Hermes/.test(navigator.userAgent) ? \"system\" : undefined;\n}\n/**\n * Get color scheme preference from cookie\n * @returns The color scheme preference from cookie or undefined if not found\n * @example\n * // Cookie: prefers-color-scheme=dark\n * getCookiePreference() // returns \"dark\"\n * getCookiePreference('svd-theme') // returns value based on passed storage key\n */\nfunction getCookiePreference(storageKey) {\n    if (typeof document === \"undefined\")\n        return undefined;\n    return document.cookie\n        ?.split(\"; \")\n        .find((row) =\u003e row.startsWith(`${storageKey}=`))\n        ?.split(\"=\")?.[1];\n}\n/**\n * Get color scheme preference from user account settings\n * Automatically checks all known user account settings keys\n * @returns The color scheme preference from account settings or undefined if not found\n * @example\n * // localStorage VG_USER_SETTINGS: {\"darkmode\": {\"value\": \"true\"}}\n * getUserAccountSettingsPreference() // returns \"dark\"\n */\nfunction getUserAccountSettingsPreference() {\n    if (typeof window === \"undefined\")\n        return undefined;\n    // Find the first user settings key that exists in localStorage\n    const existingKey = USER_SETTINGS_KEYS.find((key) =\u003e window.localStorage?.getItem(key) !== null);\n    if (!existingKey)\n        return;\n    try {\n        const localStorageSettings = window.localStorage?.getItem(existingKey);\n        if (!localStorageSettings)\n            return;\n        const settings = JSON.parse(localStorageSettings);\n        const darkmodeValue = settings?.darkmode?.value;\n        if (darkmodeValue === \"os\")\n            return \"system\";\n        if (darkmodeValue === \"true\" || darkmodeValue === true)\n            return \"dark\";\n        if (darkmodeValue === \"false\" || darkmodeValue === false)\n            return \"light\";\n    }\n    catch {\n        // If parsing fails, return undefined\n    }\n}\n/**\n * Get color scheme preference from local storage\n * @returns The color scheme preference from localStorage or null if not found\n * @example\n * // localStorage.getItem('prefers-color-scheme') === 'dark'\n * getLocalStoragePreference() // returns \"dark\"\n */\nfunction getLocalStoragePreference(storageKey) {\n    if (typeof window === \"undefined\")\n        return null;\n    return window.localStorage?.getItem(storageKey);\n}\n/**\n * Get the current color scheme preference without resolving system preference\n * Checks preferences in order: URL hash, URL query, Hermes user agent, user account settings, cookie, localStorage, then defaults to light\n * @param storageKey Use specified key when reading from local storage and cookie. Default is \"prefers-color-scheme\"\n * @returns The raw color scheme preference: \"light\", \"dark\", or \"system\"\n * @example\n * getColorSchemePreference() // returns \"dark\", \"light\", or \"system\"\n */\nexport function getColorSchemePreference(defaultColorSchemePreference = \"light\", storageKey = \"prefers-color-scheme\") {\n    // Choose color scheme from url, user account settings, cookie or local storage\n    const preference = [\n        getUrlHashPreference(), // URL fragment\n        getUrlQueryPreference(), // URL query parameter\n        getHermesPreference(), // Hermes decides\n        getUserAccountSettingsPreference(), // User account settings (auto-detected)\n        getCookiePreference(storageKey), // Cookie\n        getLocalStoragePreference(storageKey), // Local storage\n    ].find((p) =\u003e p !== null \u0026\u0026 p !== undefined);\n    return preference || defaultColorSchemePreference;\n}\n/**\n * Get the current color scheme based on preferences\n * Checks preferences in order: URL hash, URL query, Hermes user agent, user account settings, cookie, localStorage, then defaults to light\n * @param defaultColorSchemePreference The default color scheme preference if no other preference is found. Default is \"system\"\n * @param storageKey Use specified key when reading from local storage and cookie. Default is \"prefers-color-scheme\"\n * @returns The resolved color scheme: \"light\" or \"dark\"\n * @example\n * getColorScheme() // returns \"dark\" or \"light\"\n */\nexport function getColorScheme(defaultColorSchemePreference = \"light\", storageKey = \"prefers-color-scheme\") {\n    const preference = getColorSchemePreference(defaultColorSchemePreference, storageKey);\n    if (preference === \"dark\" || preference === \"light\") {\n        return preference;\n    }\n    if (preference === \"system\") {\n        if (typeof window !== \"undefined\" \u0026\u0026\n            window.matchMedia(\"(prefers-color-scheme: dark)\").matches) {\n            return \"dark\";\n        }\n        return \"light\";\n    }\n    return \"light\";\n}\n","import { getColorScheme } from \"./preferences.js\";\n/**\n * Initialize dark mode functionality\n * Sets the initial color scheme on document.documentElement.dataset.colorScheme\n * Listens for system preference changes and updates accordingly\n * Dispatches \"prefers-color-scheme\" event when scheme changes\n * @returns A cleanup function to remove event listeners\n * @example\n * const cleanup = initializeDarkMode();\n * // Later, when component unmounts or cleanup is needed:\n * cleanup();\n */\nexport function initializeDarkMode(defaultColorSchemePreference, darkmodeStorageKey) {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n        return () =\u003e { };\n    }\n    // Set initial color scheme\n    document.documentElement.dataset.colorScheme = getColorScheme(defaultColorSchemePreference, darkmodeStorageKey);\n    // Listen for system preference changes\n    const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n    const handlePreferences = () =\u003e {\n        document.documentElement.dataset.colorScheme = getColorScheme(defaultColorSchemePreference, darkmodeStorageKey);\n        document.dispatchEvent(new Event(\"prefers-color-scheme\"));\n    };\n    // Listen for system preference changes\n    prefersDark.addEventListener(\"change\", handlePreferences);\n    // Return cleanup function\n    return () =\u003e {\n        prefersDark.removeEventListener(\"change\", handlePreferences);\n    };\n}\n"],"version":3}
