{"version":3,"sources":["../src/util.ts","../src/script.ts","../src/store.ts"],"names":["themes","themesMap","defaultTheme","defaultLightTheme","defaultDarkTheme","dataAttributes","themeStorageKey","darkMediaQuery","enableColorScheme","enableSystem","updateClassAttribute","forcedThemeFlagAttribute","forcedTheme","atom","computed","onMount"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DataAttributePattern, SystemTheme, ThemeName } from \"./types\";\n\n/**\n * Detects the system's color scheme preference.\n *\n * @param darkMediaQuery - The media query string to detect dark mode\n * preference.\n * @returns The detected system theme ('dark' or 'light'), or undefined if\n * running server-side.\n */\nexport function getSystemTheme(\n  darkMediaQuery: string,\n): SystemTheme | undefined {\n  if (typeof window === \"undefined\") return undefined;\n  return window.matchMedia(darkMediaQuery).matches ? \"dark\" : \"light\";\n}\n\n/**\n * Updates the DOM to reflect the new theme.\n *\n * @param newTheme - The name of the new theme to apply.\n * @param themes - Array of all available theme names.\n * @param themesMap - Mapping of system themes to theme names.\n * @param dataAttributes - Array of data attributes to update with the new\n * theme.\n * @param enableColorScheme - Whether to update the color-scheme CSS property.\n * @param updateClassAttribute - Whether to update the class attribute of the\n * root element.\n * @param forcedThemeFlagAttribute - Data attribute indicating if a theme is\n * forced by the user.\n */\nexport function updateDOM(\n  newTheme: ThemeName,\n  themes: ThemeName[],\n  themesMap: Record<SystemTheme, ThemeName[]>,\n  dataAttributes: DataAttributePattern[],\n  enableColorScheme: boolean,\n  updateClassAttribute: boolean,\n  forcedThemeFlagAttribute: DataAttributePattern,\n): void {\n  if (!newTheme || typeof window === \"undefined\") return;\n\n  const root = document.documentElement;\n\n  // Check if theme is forced by user\n  if (\n    forcedThemeFlagAttribute &&\n    root.getAttribute(forcedThemeFlagAttribute) === \"true\"\n  ) {\n    return;\n  }\n\n  // Update class attribute\n  if (updateClassAttribute) {\n    root.classList.remove(...themes);\n    root.classList.add(newTheme);\n  }\n\n  // Update data attributes\n  dataAttributes.forEach((dataAttribute: DataAttributePattern) => {\n    if (dataAttribute && dataAttribute.startsWith(\"data-\")) {\n      root.setAttribute(dataAttribute, newTheme);\n    }\n  });\n\n  // Update color scheme\n  if (enableColorScheme) {\n    const colorScheme = themesMap.dark?.includes(newTheme)\n      ? \"dark\"\n      : themesMap.light?.includes(newTheme)\n        ? \"light\"\n        : null;\n    if (colorScheme) {\n      root.style.colorScheme = colorScheme;\n    }\n  }\n}\n\n/**\n * Temporarily disables all CSS transitions and animations on the page.\n *\n * @returns A cleanup function that, when called, will re-enable animations.\n *\n * @example\n * // Disable animations\n * const enableAnimations = disableAnimation();\n *\n * // Perform DOM operations here...\n *\n * // Re-enable animations\n * enableAnimations();\n */\nexport function disableAnimation(): () => void {\n  const css = document.createElement(\"style\");\n  css.appendChild(\n    document.createTextNode(`\n    *,\n    *::before,\n    *::after {\n      -webkit-transition: none !important;\n      -moz-transition: none !important;\n      -o-transition: none !important;\n      -ms-transition: none !important;\n      transition: none !important;\n    }\n  `),\n  );\n  document.head.appendChild(css);\n\n  return () => {\n    // Force a reflow\n    window.getComputedStyle(document.body);\n\n    // Remove the style element in the next frame\n    requestAnimationFrame(() => {\n      document.head.removeChild(css);\n    });\n  };\n}\n","import type { ThemeName, ThemeStoreConfig } from \"./types\";\n\n/**\n * Creates a script string to apply the theme based on the provided configuration.\n * This script is designed to be injected into the <head> of the document to solve\n * the \"flash of incorrect theme\" (FOIT) issue.\n *\n * @param config - The theme store configuration object.\n * @returns A script string that can be injected into the HTML.\n */\nexport function createThemeScript({\n  themes,\n  themesMap,\n  defaultTheme,\n  defaultLightTheme,\n  defaultDarkTheme,\n  dataAttributes,\n  themeStorageKey,\n  darkMediaQuery,\n  enableColorScheme,\n  enableSystem,\n  updateClassAttribute,\n  forcedThemeFlagAttribute,\n}: Omit<ThemeStoreConfig, \"disableTransitionOnChange\">): string {\n  // The `applyThemeScript` function is meant to be injected into the <head> of the document.\n  // It's written in vanilla JavaScript to ensure browser compatibility.\n  const applyThemeScript = (\n    themes = [\"light\", \"dark\"],\n    themesMap = { light: [\"light\"], dark: [\"dark\"] },\n    defaultTheme = \"light\",\n    defaultLightTheme = \"light\",\n    defaultDarkTheme = \"dark\",\n    dataAttributes = [`data-theme`],\n    themeStorageKey = \"omni-theme\",\n    darkMediaQuery = \"(prefers-color-scheme: dark)\",\n    enableColorScheme = true,\n    enableSystem = true,\n    updateClassAttribute = true,\n    forcedThemeFlagAttribute = \"data-theme-forced\",\n  ) => {\n    /* Don't run on the server */\n    if (typeof window === \"undefined\") return;\n\n    const root = document.documentElement;\n\n    /* Don't respond to theme change if the user has forced a theme */\n    if (\n      forcedThemeFlagAttribute &&\n      root.getAttribute(forcedThemeFlagAttribute) === \"true\"\n    )\n      return;\n\n    let resolvedTheme = defaultTheme;\n    const theme = localStorage && localStorage.getItem(themeStorageKey);\n\n    if (theme && theme !== \"system\") {\n      resolvedTheme = theme;\n    } else if (enableSystem) {\n      const systemTheme = window.matchMedia(darkMediaQuery).matches\n        ? \"dark\"\n        : \"light\";\n      resolvedTheme =\n        systemTheme === \"dark\" ? defaultDarkTheme : defaultLightTheme;\n    }\n\n    /* Update class attribute if enabled */\n    if (updateClassAttribute) {\n      root.classList.remove(...themes);\n      root.classList.add(resolvedTheme);\n    }\n\n    /* Update data attributes */\n    if (dataAttributes) {\n      dataAttributes.forEach((dataAttribute) => {\n        if (dataAttribute && dataAttribute.startsWith(\"data-\")) {\n          root.setAttribute(dataAttribute, resolvedTheme);\n        }\n      });\n    }\n\n    /* Update color scheme if enabled */\n    if (enableColorScheme && themesMap) {\n      if (themesMap.dark && themesMap.dark.includes(resolvedTheme)) {\n        root.style.colorScheme = \"dark\";\n      } else if (themesMap.light && themesMap.light.includes(resolvedTheme)) {\n        root.style.colorScheme = \"light\";\n      }\n    }\n  };\n\n  // Stringify the arguments to the applyThemeScript function\n  const scriptArgs = JSON.stringify([\n    themes,\n    themesMap,\n    defaultTheme,\n    defaultLightTheme,\n    defaultDarkTheme,\n    dataAttributes,\n    themeStorageKey,\n    darkMediaQuery,\n    enableColorScheme,\n    enableSystem,\n    updateClassAttribute,\n    forcedThemeFlagAttribute,\n  ]).slice(1, -1); // remove square brackets\n\n  // Create the script string that runs as IIFE when injected\n  const scriptString = `(${applyThemeScript.toString()})(${scriptArgs})`;\n\n  // TODO: Minify the script string?\n  return scriptString;\n}\n\n/**\n * Creates a factory function that generates scripts to apply a forced theme.\n *\n * @param config - Partial theme store configuration object.\n * @returns A function that creates a script string for applying a forced theme.\n */\nexport function createForcedThemeScriptFactory({\n  themes,\n  themesMap,\n  dataAttributes,\n  enableColorScheme,\n  updateClassAttribute,\n  forcedThemeFlagAttribute,\n}: Omit<\n  ThemeStoreConfig,\n  | \"defaultTheme\"\n  | \"defaultLightTheme\"\n  | \"defaultDarkTheme\"\n  | \"themeStorageKey\"\n  | \"darkMediaQuery\"\n  | \"enableSystem\"\n  | \"disableTransitionOnChange\"\n>): (forcedTheme: ThemeName) => string {\n  return (forcedTheme: ThemeName): string => {\n    // The `applyForcedThemeScript` function is meant to be injected into the <head> of the document.\n    // It's written in vanilla JavaScript to ensure browser compatibility.\n    const applyForcedThemeScript = (\n      forcedTheme = \"light\",\n      themes = [\"light\", \"dark\"],\n      themesMap = { light: [\"light\"], dark: [\"dark\"] },\n      dataAttributes = [`data-theme`],\n      enableColorScheme = true,\n      updateClassAttribute = true,\n      forcedThemeFlagAttribute = \"data-theme-forced\",\n    ) => {\n      /* Don't run on the server */\n      if (typeof window === \"undefined\") return;\n\n      const root = document.documentElement;\n\n      /* Mark the page that the user has forced a theme */\n      if (forcedThemeFlagAttribute) {\n        root.setAttribute(forcedThemeFlagAttribute, \"true\");\n      }\n\n      /* Update class attribute if enabled */\n      if (updateClassAttribute) {\n        root.classList.remove(...themes);\n        root.classList.add(forcedTheme);\n      }\n\n      /* Update data attributes */\n      if (dataAttributes) {\n        dataAttributes.forEach((dataAttribute) => {\n          if (dataAttribute && dataAttribute.startsWith(\"data-\")) {\n            root.setAttribute(dataAttribute, forcedTheme);\n          }\n        });\n      }\n\n      /* Update color scheme if enabled */\n      if (enableColorScheme && themesMap) {\n        if (themesMap.dark && themesMap.dark.includes(forcedTheme)) {\n          root.style.colorScheme = \"dark\";\n        } else if (themesMap.light && themesMap.light.includes(forcedTheme)) {\n          root.style.colorScheme = \"light\";\n        }\n      }\n    };\n\n    // Stringify the arguments to the applyForcedThemeScript function\n    const scriptArgs = JSON.stringify([\n      forcedTheme,\n      themes,\n      themesMap,\n      dataAttributes,\n      enableColorScheme,\n      updateClassAttribute,\n      forcedThemeFlagAttribute,\n    ]).slice(1, -1); // remove square brackets\n\n    // Create the script string that runs as IIFE when injected\n    const scriptString = `(${applyForcedThemeScript.toString()})(${scriptArgs})`;\n\n    // TODO: Minify the script string?\n    return scriptString;\n  };\n}\n","import { onMount, computed, atom } from \"nanostores\";\nimport type { ReadableAtom, WritableAtom } from \"nanostores\";\nimport type {\n  SystemTheme,\n  ThemeName,\n  ThemeStore,\n  ThemeStoreConfig,\n} from \"./types\";\nimport { updateDOM, disableAnimation, getSystemTheme } from \"./util\";\nimport { createForcedThemeScriptFactory, createThemeScript } from \"./script\";\n\ntype SystemThemeStateValue = SystemTheme | undefined;\n\nconst isServer = typeof window === \"undefined\";\n\n/**\n * Creates a theme store with the provided configuration.\n * @param config - The theme store configuration object.\n * @returns A theme store object.\n */\nexport function createThemeStore(config: ThemeStoreConfig): ThemeStore {\n  const {\n    themes,\n    defaultTheme,\n    defaultLightTheme,\n    defaultDarkTheme,\n    themesMap,\n    themeStorageKey,\n    darkMediaQuery,\n    dataAttributes,\n    enableColorScheme,\n    enableSystem,\n    updateClassAttribute,\n    disableTransitionOnChange,\n    forcedThemeFlagAttribute,\n    debug,\n  } = validateAndInitializeThemeStoreConfiguration(config);\n\n  const $theme = atom<ThemeName>(\n    defaultTheme ? defaultTheme : enableSystem ? \"system\" : themes[0],\n  );\n\n  const $systemTheme = atom<SystemThemeStateValue>(\n    getSystemTheme(darkMediaQuery),\n  );\n\n  const $resolvedTheme = computed<\n    ThemeName,\n    [WritableAtom<ThemeName>, WritableAtom<SystemThemeStateValue>]\n  >([$theme, $systemTheme], (theme, systemTheme) => {\n    // Resolve the theme based on user preference and system theme\n    if (theme !== \"system\") return theme;\n    if (systemTheme === \"dark\") return defaultDarkTheme;\n    if (systemTheme === \"light\") return defaultLightTheme;\n    return defaultTheme;\n  });\n\n  onMount($theme, () => {\n    if (debug) console.log(\"🚀 theme mounted:\", $theme.get());\n\n    if (isServer) return;\n\n    // Initialize from localStorage if available\n    const storedValue = localStorage.getItem(themeStorageKey);\n    if (storedValue !== null) {\n      $theme.set(storedValue);\n    }\n\n    // Listen for theme changes in localStorage\n    const handleStorageChange = (e: StorageEvent) => {\n      if (e.key === themeStorageKey) {\n        if (e.newValue !== null) $theme.set(e.newValue);\n      }\n    };\n\n    window.addEventListener(\"storage\", handleStorageChange);\n\n    return () => {\n      if (debug) console.log(\"🚀 theme unmounted\");\n      window.removeEventListener(\"storage\", handleStorageChange);\n    };\n  });\n\n  onMount($systemTheme, () => {\n    if (debug) console.log(\"🚀 system theme mounted:\", $systemTheme.get());\n\n    if (isServer) return;\n\n    // Listen for system theme changes\n    const darkModeMediaQuery = window.matchMedia(darkMediaQuery);\n    const handleMediaQueryChange = (e: MediaQueryListEvent) => {\n      $systemTheme.set(e.matches ? \"dark\" : \"light\");\n    };\n\n    darkModeMediaQuery.addEventListener(\"change\", handleMediaQueryChange);\n\n    return () => {\n      if (debug) console.log(\"🚀 system theme unmounted\");\n      darkModeMediaQuery.removeEventListener(\"change\", handleMediaQueryChange);\n    };\n  });\n\n  onMount($resolvedTheme, () => {\n    if (debug) console.log(\"🚀 resolved theme mounted:\", $resolvedTheme.get());\n\n    return () => {\n      if (debug) console.log(\"🚀 resolved theme unmounted\");\n    };\n  });\n\n  // Add persistance to the theme atom\n  $theme.subscribe((theme) => {\n    if (isServer) return;\n\n    // Update localStorage\n    localStorage.setItem(themeStorageKey, theme);\n  });\n\n  $resolvedTheme.subscribe((resolvedTheme) => {\n    if (isServer) return;\n\n    // Disable transitions during theme change if configured\n    const enableAnimations = disableTransitionOnChange\n      ? disableAnimation()\n      : null;\n\n    // Update the DOM with the new theme\n    updateDOM(\n      resolvedTheme,\n      themes,\n      themesMap,\n      dataAttributes,\n      enableColorScheme,\n      updateClassAttribute,\n      forcedThemeFlagAttribute,\n    );\n\n    // Re-enable transitions if they were disabled\n    enableAnimations?.();\n  });\n\n  // Create logger if debug is enabled\n  if (debug) {\n    $theme.listen((value) => console.log(\"🚀 theme:\", value));\n    $systemTheme.listen((value) => console.log(\"🚀 system theme:\", value));\n    $resolvedTheme.listen((value) => console.log(\"🚀 resolved theme:\", value));\n  }\n\n  const applyThemeScriptString = createThemeScript({\n    themes,\n    themesMap,\n    defaultTheme,\n    defaultLightTheme,\n    defaultDarkTheme,\n    dataAttributes,\n    themeStorageKey,\n    darkMediaQuery,\n    enableColorScheme,\n    enableSystem,\n    updateClassAttribute,\n    forcedThemeFlagAttribute,\n  });\n\n  const createForcedThemeScriptString = createForcedThemeScriptFactory({\n    themes,\n    themesMap,\n    dataAttributes,\n    enableColorScheme,\n    updateClassAttribute,\n    forcedThemeFlagAttribute,\n  });\n\n  return {\n    themes: enableSystem ? [...themes, \"system\"] : themes,\n    $theme: $theme as ReadableAtom<ThemeName>,\n    $resolvedTheme,\n    $systemTheme: $systemTheme as ReadableAtom<SystemThemeStateValue>,\n    setTheme: (theme: ThemeName) => $theme.set(theme),\n    applyThemeScriptString,\n    createForcedThemeScriptString,\n  };\n}\n\n/**\n * Validates and initializes the theme store configuration.\n * @param config - The theme store configuration object.\n * @returns The validated and initialized configuration object.\n */\nfunction validateAndInitializeThemeStoreConfiguration(\n  config: ThemeStoreConfig,\n): Required<ThemeStoreConfig> {\n  const {\n    themes = [],\n    defaultTheme,\n    defaultLightTheme,\n    defaultDarkTheme,\n    themesMap,\n    themeStorageKey = \"omni-theme\",\n    darkMediaQuery = \"(prefers-color-scheme: dark)\",\n    dataAttributes = [\"data-theme\"],\n    enableColorScheme = true,\n    enableSystem = true,\n    updateClassAttribute = true,\n    disableTransitionOnChange = false,\n    forcedThemeFlagAttribute = \"data-theme-forced\",\n    debug = false,\n  } = config;\n\n  // Validate and set default values for theme-related properties\n  const validatedThemes = themes.length > 0 ? themes : [\"light\", \"dark\"];\n  const validatedDefaultTheme =\n    defaultTheme && validatedThemes.includes(defaultTheme)\n      ? defaultTheme\n      : enableSystem\n        ? \"system\"\n        : validatedThemes[0];\n\n  const validatedDefaultLightTheme =\n    defaultLightTheme && validatedThemes.includes(defaultLightTheme)\n      ? defaultLightTheme\n      : validatedThemes.find((t) => t.toLowerCase().includes(\"light\")) ||\n        validatedThemes[0];\n\n  const validatedDefaultDarkTheme =\n    defaultDarkTheme && validatedThemes.includes(defaultDarkTheme)\n      ? defaultDarkTheme\n      : validatedThemes.find((t) => t.toLowerCase().includes(\"dark\")) ||\n        validatedThemes[validatedThemes.length - 1];\n\n  // Validate and set default values for themesMap\n  const validatedThemesMap: Record<SystemTheme, ThemeName[]> = themesMap || {\n    light: [validatedDefaultLightTheme],\n    dark: [validatedDefaultDarkTheme],\n  };\n\n  // Ensure all themes in themesMap are valid\n  Object.values(validatedThemesMap)\n    .flat()\n    .forEach((theme) => {\n      if (!validatedThemes.includes(theme)) {\n        throw new Error(\n          `Invalid theme \"${theme}\" in themesMap. Must be one of ${validatedThemes.join(\n            \", \",\n          )}.`,\n        );\n      }\n    });\n\n  // If enableSystem is true, ensure all required properties are set\n  if (enableSystem) {\n    if (!validatedDefaultLightTheme || !validatedDefaultDarkTheme) {\n      throw new Error(\n        \"If enableSystem is true, both defaultLightTheme and defaultDarkTheme must be defined\",\n      );\n    }\n    if (!validatedThemesMap.light || !validatedThemesMap.dark) {\n      throw new Error(\n        \"If enableSystem is true, themesMap must include both 'light' and 'dark' keys\",\n      );\n    }\n  }\n\n  return {\n    themes: validatedThemes,\n    defaultTheme: validatedDefaultTheme,\n    defaultLightTheme: validatedDefaultLightTheme,\n    defaultDarkTheme: validatedDefaultDarkTheme,\n    themesMap: validatedThemesMap,\n    themeStorageKey,\n    darkMediaQuery,\n    dataAttributes,\n    enableColorScheme,\n    enableSystem,\n    updateClassAttribute,\n    disableTransitionOnChange,\n    forcedThemeFlagAttribute,\n    debug,\n  };\n}\n"]}