{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "theme-preset-provider",
  "title": "Theme Preset Provider",
  "description": "Applies the persisted theme preset on mount and injects a no-flash script so the saved preset is set before paint.",
  "dependencies": [
    "@vllnt/ui@^0.2.1"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/default/theme-preset-provider/theme-preset-provider.tsx",
      "content": "\"use client\";\n\nimport { type ReactNode, useEffect } from \"react\";\n\nimport {\n  CUSTOM_THEME_NAME,\n  DEFAULT_THEME_PRESET,\n  isThemePresetName,\n  THEME_CUSTOM_CSS_STORAGE_KEY,\n  THEME_CUSTOM_STYLE_ID,\n  THEME_PRESET_STORAGE_KEY,\n} from \"@vllnt/ui\";\nimport { setThemePreset } from \"@vllnt/ui\";\n\nconst FOUC_SCRIPT = `(function(){try{var v=localStorage.getItem(${JSON.stringify(\n  THEME_PRESET_STORAGE_KEY,\n)});if(!v||v===${JSON.stringify(\n  DEFAULT_THEME_PRESET,\n)})return;document.documentElement.setAttribute(\"data-theme\",v);if(v===${JSON.stringify(\n  CUSTOM_THEME_NAME,\n)}){var c=localStorage.getItem(${JSON.stringify(\n  THEME_CUSTOM_CSS_STORAGE_KEY,\n)});if(c){var s=document.createElement(\"style\");s.id=${JSON.stringify(\n  THEME_CUSTOM_STYLE_ID,\n)};s.textContent=c;document.head.appendChild(s);}}}catch(e){}})();`;\n\nexport type ThemePresetProviderProps = {\n  readonly children?: ReactNode;\n  /** Preset applied on first visit when no stored preference exists. */\n  readonly defaultPreset?: string;\n};\n\n/**\n * Restores the persisted theme preset before paint (avoiding a flash) and\n * optionally seeds a default preset for first-time visitors. Render it once,\n * high in the tree, alongside the light/dark `ThemeProvider`.\n */\nexport function ThemePresetProvider({\n  children,\n  defaultPreset,\n}: ThemePresetProviderProps) {\n  useEffect(() => {\n    if (!defaultPreset || defaultPreset === DEFAULT_THEME_PRESET) {\n      return;\n    }\n    let stored: null | string = null;\n    try {\n      stored = window.localStorage.getItem(THEME_PRESET_STORAGE_KEY);\n    } catch {\n      stored = null;\n    }\n    if (!stored && isThemePresetName(defaultPreset)) {\n      setThemePreset(defaultPreset);\n    }\n  }, [defaultPreset]);\n\n  return (\n    <>\n      <script\n        dangerouslySetInnerHTML={{ __html: FOUC_SCRIPT }}\n        suppressHydrationWarning\n      />\n      {children}\n    </>\n  );\n}\n",
      "type": "registry:component"
    }
  ],
  "type": "registry:component",
  "version": "0.2.1",
  "stability": "stable"
}
