Files
Gemini-Search/node_modules/@replit/vite-plugin-shadcn-theme-json/dist/index.mjs.map
Ammaar Reshi d6025af146 Initial commit
2025-01-04 14:06:53 +00:00

1 line
24 KiB
Plaintext

{"version":3,"sources":["../src/index.ts","../src/createTheme.ts","../src/utils.ts","../src/schemas.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport type { Plugin } from 'vite';\n\nimport { createTheme } from './createTheme';\nimport { safeParseThemeJson, type Theme } from './schemas';\n\ninterface ThemePluginOptions {\n // Path to theme config file\n themeJsonPath: string;\n // Function to transform theme to CSS vars\n createThemeVars: (theme: Theme) => string;\n}\n\nexport default function themePlugin(\n _options?: Partial<ThemePluginOptions>,\n): Plugin {\n const options: ThemePluginOptions = {\n themeJsonPath: './theme.json',\n createThemeVars: (theme) => createTheme(theme),\n ..._options,\n };\n\n let cachedCss: string | null = null;\n const virtualModuleId = 'virtual:theme-vars';\n const resolvedVirtualModuleId = '\\0' + virtualModuleId;\n\n return {\n name: 'vite-plugin-theme',\n\n async buildStart() {\n // Read and transform theme at startup\n try {\n const themeContent = await fs.readFile(options.themeJsonPath, 'utf-8');\n const themeConfig: Theme | null = safeParseThemeJson(themeContent);\n cachedCss = themeConfig ? options.createThemeVars(themeConfig) : null;\n } catch (e) {\n this.error(`Failed to read theme file: ${e.message}`);\n }\n },\n\n configureServer(server) {\n const resolvedPath = path.resolve(options.themeJsonPath);\n // Watch theme file for changes in dev mode\n server.watcher.add(resolvedPath);\n\n server.watcher.on('change', async (changedPath) => {\n if (changedPath === resolvedPath) {\n try {\n const componentsJsonFile = await fs.readFile(resolvedPath, 'utf-8');\n const themeConfig: Theme | null =\n safeParseThemeJson(componentsJsonFile);\n cachedCss = themeConfig\n ? options.createThemeVars(themeConfig)\n : null;\n\n // Notify clients to reload CSS\n // TOOD: i don't know if full reload is correct\n server.ws.send({\n type: 'full-reload',\n path: '*',\n });\n server.moduleGraph.invalidateAll();\n } catch (e) {\n server.config.logger.error(`Failed to update theme: ${e.message}`);\n }\n }\n });\n },\n\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId && cachedCss) {\n return `\n // Remove any existing theme styles first\n document.querySelector('style[data-vite-theme]')?.remove()\n \n const style = document.createElement('style')\n style.setAttribute('data-vite-theme', '')\n style.textContent = ${JSON.stringify(cachedCss)}\n document.head.insertBefore(style, document.head.firstChild)\n `;\n }\n },\n\n transformIndexHtml(html) {\n if (!cachedCss) {\n return;\n }\n\n return {\n html,\n tags: [\n {\n tag: 'style',\n attrs: {\n 'data-vite-theme': '',\n // Add lower priority by inserting at start of head\n 'data-inject-first': '',\n },\n children: cachedCss,\n injectTo: 'head-prepend', // Change to prepend instead of default append\n },\n ],\n };\n },\n };\n}\n","import Color from 'colorjs.io';\nimport dedent from 'dedent';\n\nimport type { CssVars, Theme } from './schemas';\nimport { getForegroundColor, toShadCn } from './utils';\n\nconst createCssVarsString = (vars: Record<string, string>) => {\n return Object.entries(vars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n};\n\nconst createCssString = ({\n appearance,\n lightVars,\n darkVars,\n}: {\n appearance: Theme['appearance'];\n lightVars: CssVars;\n darkVars: CssVars;\n}): string => {\n if (appearance === 'dark') {\n return dedent`\n :root {\n ${createCssVarsString(darkVars)}\n }\n .light {\n ${createCssVarsString(lightVars)}\n }\n `;\n }\n\n if (appearance === 'light') {\n return dedent`\n :root {\n ${createCssVarsString(lightVars)}\n }\n .dark {\n ${createCssVarsString(darkVars)}\n }\n `;\n }\n\n return dedent`\n :root {\n ${createCssVarsString(lightVars)}\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n ${createCssVarsString(darkVars)}\n }\n }\n .light {\n ${createCssVarsString(lightVars)}\n }\n .dark {\n ${createCssVarsString(darkVars)}\n }\n `;\n};\n\nexport const createTheme = ({\n primary: oklch,\n radius: radiusRem,\n variant: kind = 'professional',\n appearance,\n}: Theme): string => {\n const color = new Color(oklch);\n if (kind === 'tint') {\n const lightBg = new Color(color).set('oklch.l', 0.98).set('oklch.c', 0.01);\n const darkBg = new Color(color).set('oklch.l', 0.2).set('oklch.c', 0.02);\n\n const lightPrimary = new Color(color).set('oklch.l', 0.5);\n const darkPrimary = new Color(color).set('oklch.l', 0.7);\n\n const lightAccent = new Color(color)\n .set('oklch.l', 0.94)\n .set('oklch.c', 0.05);\n const darkAccent = new Color(color)\n .set('oklch.l', 0.3)\n .set('oklch.c', 0.08);\n\n const lightBorder = new Color(color)\n .set('oklch.l', 0.9)\n .set('oklch.c', 0.05);\n const darkBorder = new Color(color)\n .set('oklch.l', 0.3)\n .set('oklch.c', 0.08);\n\n const lightFg = new Color(color).set('oklch.l', 0.1).set('oklch.c', 0.1);\n const darkFg = new Color(color).set('oklch.l', 0.9).set('oklch.c', 0.05);\n\n const lightVars = {\n '--background': toShadCn(lightBg),\n '--foreground': toShadCn(lightFg),\n '--muted': toShadCn(lightBorder),\n '--muted-foreground': toShadCn(lightFg),\n '--popover': toShadCn(lightBg),\n '--popover-foreground': toShadCn(lightFg),\n '--card': toShadCn(lightBg),\n '--card-foreground': toShadCn(lightFg),\n '--border': toShadCn(lightBorder),\n '--input': toShadCn(lightBorder),\n '--primary': toShadCn(lightPrimary),\n '--primary-foreground': toShadCn(getForegroundColor(lightPrimary)),\n '--secondary': toShadCn(lightAccent),\n '--secondary-foreground': toShadCn(lightFg),\n '--accent': toShadCn(lightAccent),\n '--accent-foreground': toShadCn(lightFg),\n '--destructive': '0 84.2% 60.2%',\n '--destructive-foreground': '60 9.1% 97.8%',\n '--ring': toShadCn(lightPrimary),\n '--radius': `${radiusRem}rem`,\n };\n\n const darkVars = {\n '--background': toShadCn(darkBg),\n '--foreground': toShadCn(darkFg),\n '--muted': toShadCn(darkBorder),\n '--muted-foreground': toShadCn(darkFg),\n '--popover': toShadCn(darkBg),\n '--popover-foreground': toShadCn(darkFg),\n '--card': toShadCn(darkBg),\n '--card-foreground': toShadCn(darkFg),\n '--border': toShadCn(darkBorder),\n '--input': toShadCn(darkBorder),\n '--primary': toShadCn(darkPrimary),\n '--primary-foreground': toShadCn(getForegroundColor(darkPrimary)),\n '--secondary': toShadCn(darkAccent),\n '--secondary-foreground': toShadCn(darkFg),\n '--accent': toShadCn(darkAccent),\n '--accent-foreground': toShadCn(darkFg),\n '--destructive': '0 62.8% 30.6%',\n '--destructive-foreground': '0 0% 98%',\n '--ring': toShadCn(darkPrimary),\n '--radius': `${radiusRem}rem`,\n };\n\n return createCssString({ appearance, lightVars, darkVars });\n }\n\n if (kind === 'vibrant') {\n const lightBg = new Color(color).set('oklch.l', 0.8).set('oklch.c', 0.1);\n const lightElementBg = new Color(color)\n .set('oklch.l', 0.98)\n .set('oklch.c', 0.05);\n const lightPrimary = new Color(color)\n .set('oklch.l', 0.7)\n .set('oklch.c', 0.2);\n const lightAccent = new Color(color)\n .set('oklch.l', 0.85)\n .set('oklch.c', 0.1);\n const lightBorder = new Color(color)\n .set('oklch.l', 0.7)\n .set('oklch.c', 0.15);\n const lightFg = new Color(color).set('oklch.l', 0.2).set('oklch.c', 0.15);\n\n const darkBg = new Color(color).set('oklch.l', 0.05).set('oklch.c', 0.15);\n const darkElementBg = new Color(color)\n .set('oklch.l', 0.2)\n .set('oklch.c', 0.08);\n const darkPrimary = new Color(color)\n .set('oklch.l', 0.6)\n .set('oklch.c', 0.2);\n const darkAccent = new Color(color)\n .set('oklch.l', 0.4)\n .set('oklch.c', 0.15);\n const darkBorder = new Color(color)\n .set('oklch.l', 0.4)\n .set('oklch.c', 0.15);\n const darkFg = new Color(color).set('oklch.l', 0.95).set('oklch.c', 0.15);\n\n const lightVars = {\n '--background': toShadCn(lightBg),\n '--foreground': toShadCn(lightFg),\n '--muted': toShadCn(lightBorder),\n '--muted-foreground': toShadCn(lightFg),\n '--popover': toShadCn(lightElementBg),\n '--popover-foreground': toShadCn(lightFg),\n '--card': toShadCn(lightElementBg),\n '--card-foreground': toShadCn(lightFg),\n '--border': toShadCn(lightBorder),\n '--input': toShadCn(lightBorder),\n '--primary': toShadCn(lightPrimary),\n '--primary-foreground': toShadCn(getForegroundColor(lightPrimary)),\n '--secondary': toShadCn(lightAccent),\n '--secondary-foreground': toShadCn(lightFg),\n '--accent': toShadCn(lightAccent),\n '--accent-foreground': toShadCn(lightFg),\n '--destructive': '0 84.2% 60.2%',\n '--destructive-foreground': '60 9.1% 97.8%',\n '--ring': toShadCn(lightPrimary),\n '--radius': `${radiusRem}rem`,\n };\n\n const darkVars = {\n '--background': toShadCn(darkBg),\n '--foreground': toShadCn(darkFg),\n '--muted': toShadCn(darkBorder),\n '--muted-foreground': toShadCn(darkFg),\n '--popover': toShadCn(darkElementBg),\n '--popover-foreground': toShadCn(darkFg),\n '--card': toShadCn(darkElementBg),\n '--card-foreground': toShadCn(darkFg),\n '--border': toShadCn(darkBorder),\n '--input': toShadCn(darkBorder),\n '--primary': toShadCn(darkPrimary),\n '--primary-foreground': toShadCn(getForegroundColor(darkPrimary)),\n '--secondary': toShadCn(darkAccent),\n '--secondary-foreground': toShadCn(darkFg),\n '--accent': toShadCn(darkAccent),\n '--accent-foreground': toShadCn(darkFg),\n '--destructive': '0 62.8% 30.6%',\n '--destructive-foreground': '0 0% 98%',\n '--ring': toShadCn(darkPrimary),\n '--radius': `${radiusRem}rem`,\n };\n\n return createCssString({ appearance, lightVars, darkVars });\n }\n\n // theme = \"professional\"\n return createCssString({\n appearance,\n darkVars: {\n '--background': '240 10% 3.9%',\n '--foreground': '0 0% 98%',\n '--muted': '240 3.7% 15.9%',\n '--muted-foreground': '240 5% 64.9%',\n '--popover': '240 10% 3.9%',\n '--popover-foreground': '0 0% 98%',\n '--card': '240 10% 3.9%',\n '--card-foreground': '0 0% 98%',\n '--border': '240 3.7% 15.9%',\n '--input': '240 3.7% 15.9%',\n '--primary': toShadCn(color),\n '--primary-foreground': toShadCn(getForegroundColor(color)),\n '--secondary': '240 3.7% 15.9%',\n '--secondary-foreground': '0 0% 98%',\n '--accent': '240 3.7% 15.9%',\n '--accent-foreground': '0 0% 98%',\n '--destructive': '0 62.8% 30.6%',\n '--destructive-foreground': '0 0% 98%',\n '--ring': '240 4.9% 83.9%',\n '--radius': `${radiusRem}rem`,\n },\n lightVars: {\n '--background': '0 0% 100%',\n '--foreground': '20 14.3% 4.1%',\n '--muted': '60 4.8% 95.9%',\n '--muted-foreground': '25 5.3% 44.7%',\n '--popover': '0 0% 100%',\n '--popover-foreground': '20 14.3% 4.1%',\n '--card': '0 0% 100%',\n '--card-foreground': '20 14.3% 4.1%',\n '--border': '20 5.9% 90%',\n '--input': '20 5.9% 90%',\n '--primary': toShadCn(color),\n '--primary-foreground': toShadCn(getForegroundColor(color)),\n '--secondary': '60 4.8% 95.9%',\n '--secondary-foreground': '24 9.8% 10%',\n '--accent': '60 4.8% 95.9%',\n '--accent-foreground': '24 9.8% 10%',\n '--destructive': '0 84.2% 60.2%',\n '--destructive-foreground': '60 9.1% 97.8%',\n '--ring': '20 14.3% 4.1%',\n '--radius': `${radiusRem}rem`,\n },\n });\n};\n","import type Color from 'colorjs.io';\n\nconst WCAG_THRESHOLD = 2.3;\n\n/**\n * @returns a color that contrasts well with the background.\n *\n * @param background - the background color\n * @param _light - an optional light color to use instead of the default\n * @param _dark - an optional dark color to use instead of the default\n *\n * if you don't provide a light or dark color, the function will calculate\n * one automatically by mixing the background with white / black (recommended)\n */\nexport const getForegroundColor = (\n background: Color,\n _light?: Color,\n _dark?: Color,\n) => {\n const lightColor =\n _light ??\n background.mix('white', 0.97, {\n space: 'oklch',\n outputSpace: 'oklch',\n });\n\n const darkColor =\n _dark ??\n background.mix('black', 0.7, {\n space: 'oklch',\n outputSpace: 'oklch',\n });\n\n // prefer light unless not enough contrast\n const contrast = background.contrast(lightColor, 'WCAG21');\n\n if (contrast > WCAG_THRESHOLD) {\n return lightColor;\n }\n\n return darkColor;\n};\n\n/**\n * @returns a string like `20 14.3% 4.1%`, which is the arguments you'd pass to `hsl()` .\n * `@shadcn/ui` uses this format for colors.\n */\nexport function toShadCn(color: Color) {\n // there must be a better way to do this\n const [hueStr, saturationPercentStr, lightnessPercentStr] = color\n .to('hsl')\n .toString()\n .replace('hsl(', '')\n .replace(')', '')\n .split(' ');\n\n const [hue, saturation, lightness] = [\n parseFloat(hueStr),\n parseFloat(saturationPercentStr.replace('%', '')),\n parseFloat(lightnessPercentStr.replace('%', '')),\n ];\n\n return `${Math.round(hue)} ${Math.round(saturation)}% ${Math.round(lightness)}%`;\n}\n","import { Type, type Static } from '@sinclair/typebox';\nimport { Value } from '@sinclair/typebox/value';\nimport Color from 'colorjs.io';\n\nexport const ThemeJsonSchema = Type.Object({\n primary: Type.String(),\n variant: Type.Union([\n Type.Literal('professional'),\n Type.Literal('tint'),\n Type.Literal('vibrant'),\n ]),\n appearance: Type.Union([\n Type.Literal('light'),\n Type.Literal('dark'),\n Type.Literal('system'),\n ]),\n radius: Type.Number(),\n});\n\nexport type Theme = Static<typeof ThemeJsonSchema>;\n\nexport const safeParseThemeJson = (content: string): Theme | null => {\n try {\n const parsed = JSON.parse(content);\n const result = Value.Parse(ThemeJsonSchema, parsed);\n\n // throws if invalid\n new Color(result.primary);\n\n return result;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n\n return null;\n }\n};\n\n/**\n * these are the variables that @shadcn/ui uses.\n * `createTheme` needs to return an object like this.\n * the values are the inner values you'd pass to `hsl()`.\n */\nexport type CssVars = {\n '--background': string;\n '--foreground': string;\n '--muted': string;\n '--muted-foreground': string;\n '--popover': string;\n '--popover-foreground': string;\n '--card': string;\n '--card-foreground': string;\n '--border': string;\n '--input': string;\n '--primary': string;\n '--primary-foreground': string;\n '--secondary': string;\n '--secondary-foreground': string;\n '--accent': string;\n '--accent-foreground': string;\n '--destructive': string;\n '--destructive-foreground': string;\n '--ring': string;\n '--radius': string;\n};\n"],"mappings":"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","names":["Color"]}