@jasonshimmy/custom-elements-runtime 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/{css-utils-Cg4o1MqY.js → css-utils-CC43BbEy.js} +20 -21
  2. package/dist/css-utils-CC43BbEy.js.map +1 -0
  3. package/dist/{css-utils-RqkyBWft.cjs → css-utils-mgjmH8qX.cjs} +5 -4
  4. package/dist/css-utils-mgjmH8qX.cjs.map +1 -0
  5. package/dist/custom-elements-runtime.cjs.js +4 -3
  6. package/dist/custom-elements-runtime.cjs.js.map +1 -1
  7. package/dist/custom-elements-runtime.colors.cjs.js +3 -2
  8. package/dist/custom-elements-runtime.colors.cjs.js.map +1 -1
  9. package/dist/custom-elements-runtime.colors.es.js +3 -2
  10. package/dist/custom-elements-runtime.colors.es.js.map +1 -1
  11. package/dist/custom-elements-runtime.directive-enhancements.cjs.js +3 -2
  12. package/dist/custom-elements-runtime.directive-enhancements.cjs.js.map +1 -1
  13. package/dist/custom-elements-runtime.directive-enhancements.es.js +86 -100
  14. package/dist/custom-elements-runtime.directive-enhancements.es.js.map +1 -1
  15. package/dist/custom-elements-runtime.directives.cjs.js +3 -2
  16. package/dist/custom-elements-runtime.directives.cjs.js.map +1 -1
  17. package/dist/custom-elements-runtime.directives.es.js +40 -43
  18. package/dist/custom-elements-runtime.directives.es.js.map +1 -1
  19. package/dist/custom-elements-runtime.dom-jit-css.cjs.js +7 -6
  20. package/dist/custom-elements-runtime.dom-jit-css.cjs.js.map +1 -1
  21. package/dist/custom-elements-runtime.dom-jit-css.es.js +58 -76
  22. package/dist/custom-elements-runtime.dom-jit-css.es.js.map +1 -1
  23. package/dist/custom-elements-runtime.es.js +162 -186
  24. package/dist/custom-elements-runtime.es.js.map +1 -1
  25. package/dist/custom-elements-runtime.event-bus.cjs.js +3 -2
  26. package/dist/custom-elements-runtime.event-bus.cjs.js.map +1 -1
  27. package/dist/custom-elements-runtime.event-bus.es.js +48 -103
  28. package/dist/custom-elements-runtime.event-bus.es.js.map +1 -1
  29. package/dist/custom-elements-runtime.jit-css.cjs.js +3 -2
  30. package/dist/custom-elements-runtime.jit-css.cjs.js.map +1 -1
  31. package/dist/custom-elements-runtime.jit-css.es.js +29 -30
  32. package/dist/custom-elements-runtime.jit-css.es.js.map +1 -1
  33. package/dist/custom-elements-runtime.router.cjs.js +20 -19
  34. package/dist/custom-elements-runtime.router.cjs.js.map +1 -1
  35. package/dist/custom-elements-runtime.router.es.js +579 -582
  36. package/dist/custom-elements-runtime.router.es.js.map +1 -1
  37. package/dist/custom-elements-runtime.ssr-middleware.cjs.js +5 -4
  38. package/dist/custom-elements-runtime.ssr-middleware.cjs.js.map +1 -1
  39. package/dist/custom-elements-runtime.ssr-middleware.es.js +44 -37
  40. package/dist/custom-elements-runtime.ssr-middleware.es.js.map +1 -1
  41. package/dist/custom-elements-runtime.ssr.cjs.js +1 -4
  42. package/dist/custom-elements-runtime.ssr.es.js +11 -176
  43. package/dist/custom-elements-runtime.store.cjs.js +3 -2
  44. package/dist/custom-elements-runtime.store.cjs.js.map +1 -1
  45. package/dist/custom-elements-runtime.store.es.js +17 -11
  46. package/dist/custom-elements-runtime.store.es.js.map +1 -1
  47. package/dist/custom-elements-runtime.transitions.cjs.js +3 -2
  48. package/dist/custom-elements-runtime.transitions.cjs.js.map +1 -1
  49. package/dist/custom-elements-runtime.transitions.es.js +55 -120
  50. package/dist/custom-elements-runtime.transitions.es.js.map +1 -1
  51. package/dist/custom-elements-runtime.vite-plugin.cjs.js +3 -2
  52. package/dist/custom-elements-runtime.vite-plugin.cjs.js.map +1 -1
  53. package/dist/custom-elements-runtime.vite-plugin.es.js +54 -75
  54. package/dist/custom-elements-runtime.vite-plugin.es.js.map +1 -1
  55. package/dist/hooks-_3xP4G2N.js +1189 -0
  56. package/dist/hooks-_3xP4G2N.js.map +1 -0
  57. package/dist/hooks-fYQgZk2g.cjs +7 -0
  58. package/dist/hooks-fYQgZk2g.cjs.map +1 -0
  59. package/dist/logger-BYIN7ysT.cjs +3 -0
  60. package/dist/logger-BYIN7ysT.cjs.map +1 -0
  61. package/dist/logger-L25axmB-.js +41 -0
  62. package/dist/logger-L25axmB-.js.map +1 -0
  63. package/dist/namespace-helpers-Bf7rm9JV.cjs +3 -0
  64. package/dist/namespace-helpers-Bf7rm9JV.cjs.map +1 -0
  65. package/dist/namespace-helpers-BucDdgz_.js +61 -0
  66. package/dist/namespace-helpers-BucDdgz_.js.map +1 -0
  67. package/dist/reset.css +1 -1
  68. package/dist/ssr-B3lxl1vr.js +165 -0
  69. package/dist/ssr-B3lxl1vr.js.map +1 -0
  70. package/dist/ssr-DtD9e5iA.cjs +5 -0
  71. package/dist/ssr-DtD9e5iA.cjs.map +1 -0
  72. package/dist/style-Bjn8zDiZ.cjs +56 -0
  73. package/dist/style-Bjn8zDiZ.cjs.map +1 -0
  74. package/dist/{style-BmyOIMcU.js → style-DuDoj_xK.js} +724 -876
  75. package/dist/style-DuDoj_xK.js.map +1 -0
  76. package/dist/style.css +1 -1
  77. package/dist/template-compiler-BB4JJdqk.cjs +23 -0
  78. package/dist/template-compiler-BB4JJdqk.cjs.map +1 -0
  79. package/dist/template-compiler-Cs5axmn4.js +3236 -0
  80. package/dist/template-compiler-Cs5axmn4.js.map +1 -0
  81. package/dist/variables.css +1 -1
  82. package/package.json +7 -7
  83. package/dist/css-utils-Cg4o1MqY.js.map +0 -1
  84. package/dist/css-utils-RqkyBWft.cjs.map +0 -1
  85. package/dist/custom-elements-runtime.ssr.cjs.js.map +0 -1
  86. package/dist/custom-elements-runtime.ssr.es.js.map +0 -1
  87. package/dist/hooks-BH-CpUun.js +0 -1474
  88. package/dist/hooks-BH-CpUun.js.map +0 -1
  89. package/dist/hooks-NOFG9QRQ.cjs +0 -6
  90. package/dist/hooks-NOFG9QRQ.cjs.map +0 -1
  91. package/dist/logger-BvkEbVM4.js +0 -48
  92. package/dist/logger-BvkEbVM4.js.map +0 -1
  93. package/dist/logger-CSALKaYm.cjs +0 -2
  94. package/dist/logger-CSALKaYm.cjs.map +0 -1
  95. package/dist/namespace-helpers-D4wC2-qA.js +0 -61
  96. package/dist/namespace-helpers-D4wC2-qA.js.map +0 -1
  97. package/dist/namespace-helpers-ckeEOxpR.cjs +0 -2
  98. package/dist/namespace-helpers-ckeEOxpR.cjs.map +0 -1
  99. package/dist/style-BmyOIMcU.js.map +0 -1
  100. package/dist/style-D40DsIqJ.cjs +0 -55
  101. package/dist/style-D40DsIqJ.cjs.map +0 -1
  102. package/dist/template-compiler-CDvhsHia.cjs +0 -22
  103. package/dist/template-compiler-CDvhsHia.cjs.map +0 -1
  104. package/dist/template-compiler-DiE69FLO.js +0 -3724
  105. package/dist/template-compiler-DiE69FLO.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"custom-elements-runtime.vite-plugin.cjs.js","sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["/**\n * Vite plugins for build-time JIT CSS generation and SSR configuration.\n *\n * Two plugins are exported:\n *\n * - **`cerJITCSS`** — Scans source files for utility class names and emits\n * pre-generated CSS, eliminating all runtime parsing cost for projects with\n * static class lists.\n *\n * - **`cerPlugin`** — All-in-one plugin combining `cerJITCSS` with SSR\n * configuration. Exposes a `virtual:cer-ssr-config` module containing the\n * resolved SSR render options so server entry files can import and use them\n * without duplication.\n *\n * @example cerJITCSS only\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerJITCSS } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerJITCSS({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * output: 'src/generated-jit.css',\n * extendedColors: true,\n * }),\n * ],\n * });\n * ```\n *\n * @example cerPlugin with SSR\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerPlugin } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * ssr: {\n * dsd: true,\n * jit: { extendedColors: true },\n * },\n * }),\n * ],\n * });\n * ```\n *\n * Then in your server entry:\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n\nimport type { Plugin } from 'vite';\nimport { readFileSync, writeFileSync, mkdirSync, globSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport {\n jitCSS,\n enableJITCSS,\n extractClassesFromHTML,\n type JITCSSOptions,\n} from './runtime/style';\n\n// --- Re-export extractClassesFromHTML for plugin consumers ---\n\n/**\n * Options for the `cerJITCSS` Vite plugin.\n */\nexport interface CerJITCSSPluginOptions extends JITCSSOptions {\n /**\n * Glob patterns (relative to `process.cwd()`) that identify which source\n * files the plugin should scan for utility class names.\n *\n * @example `['./src/**\\/*.{ts,html}', './index.html']`\n */\n content: string[];\n /**\n * File path (relative to `process.cwd()`) where the generated CSS will\n * be written. When omitted the plugin only emits a virtual module.\n */\n output?: string;\n /**\n * Whether to emit a virtual module `virtual:cer-jit-css` that resolves to\n * the generated CSS text. Defaults to `true`.\n */\n virtualModule?: boolean;\n}\n\nconst VIRTUAL_ID = 'virtual:cer-jit-css';\nconst RESOLVED_VIRTUAL_ID = '\\0virtual:cer-jit-css';\n\nfunction generateFromFiles(\n contentPatterns: string[],\n jitOptions: JITCSSOptions,\n): string {\n if (jitOptions && Object.keys(jitOptions).length > 0) {\n enableJITCSS(jitOptions);\n }\n\n const cwd = process.cwd();\n const files: string[] = [];\n\n for (const pattern of contentPatterns) {\n const matches = globSync(pattern, { cwd }).map((f) => resolve(cwd, f));\n files.push(...matches);\n }\n\n // Deduplicate files\n const uniqueFiles = [...new Set(files)];\n\n // Aggregate all class names across all files\n const allClasses = new Set<string>();\n\n for (const file of uniqueFiles) {\n try {\n const content = readFileSync(file, 'utf-8');\n const classes = extractClassesFromHTML(content);\n for (const cls of classes) allClasses.add(cls);\n } catch {\n // Skip unreadable files\n }\n }\n\n if (allClasses.size === 0) return '';\n\n // Build a fake HTML string containing all discovered classes so jitCSS()\n // can process the full set in one pass.\n const fakeHTML = `<div class=\"${[...allClasses].join(' ')}\"></div>`;\n return jitCSS(fakeHTML);\n}\n\n// ---------------------------------------------------------------------------\n// cerPlugin — combined JIT CSS + SSR configuration plugin\n// ---------------------------------------------------------------------------\n\n/**\n * SSR render options exposed via `virtual:cer-ssr-config`.\n */\nexport interface CerSSROptions {\n /**\n * Emit Declarative Shadow DOM output for registered custom elements.\n * @default true\n */\n dsd?: boolean;\n /**\n * Append the DSD polyfill `<script>` for browsers without native support.\n * @default true\n */\n dsdPolyfill?: boolean;\n /**\n * JIT CSS options forwarded to the SSR render pass.\n */\n jit?: JITCSSOptions;\n}\n\n/**\n * Options for the combined {@link cerPlugin}.\n */\nexport interface CerPluginOptions extends Partial<CerJITCSSPluginOptions> {\n /**\n * SSR configuration. When provided, a `virtual:cer-ssr-config` module is\n * registered so server entry files can import the resolved render options:\n *\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n ssr?: CerSSROptions;\n}\n\nconst VIRTUAL_SSR_ID = 'virtual:cer-ssr-config';\nconst RESOLVED_VIRTUAL_SSR_ID = '\\0virtual:cer-ssr-config';\n\n/**\n * All-in-one Vite plugin combining build-time JIT CSS generation with SSR\n * configuration. Returns an array of plugins so it can be spread directly\n * into the `plugins` array without nesting.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,html}'],\n * ssr: { dsd: true, jit: { extendedColors: true } },\n * }),\n * ],\n * });\n * ```\n */\nexport function cerPlugin(options: CerPluginOptions): Plugin[] {\n const plugins: Plugin[] = [];\n\n // JIT CSS plugin — only added when a `content` glob is provided\n if (options.content && options.content.length > 0) {\n plugins.push(\n cerJITCSS({\n content: options.content,\n output: options.output,\n virtualModule: options.virtualModule,\n extendedColors: options.extendedColors,\n customColors: options.customColors,\n disableVariants: options.disableVariants,\n }),\n );\n }\n\n // SSR config virtual module — registered whenever `ssr` is provided\n if (options.ssr) {\n const ssrConfig = options.ssr;\n const resolvedConfig = {\n dsd: ssrConfig.dsd ?? true,\n dsdPolyfill: ssrConfig.dsdPolyfill ?? true,\n ...(ssrConfig.jit ? { jit: ssrConfig.jit } : {}),\n };\n\n plugins.push({\n name: 'cer-ssr-config',\n resolveId(id: string) {\n if (id === VIRTUAL_SSR_ID) return RESOLVED_VIRTUAL_SSR_ID;\n return undefined;\n },\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_SSR_ID) {\n return `export default ${JSON.stringify(resolvedConfig)};`;\n }\n return undefined;\n },\n });\n }\n\n return plugins;\n}\n\n// ---------------------------------------------------------------------------\n// cerJITCSS — build-time JIT CSS plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Vite plugin that performs a build-time scan of source files and emits\n * pre-generated JIT CSS as a file and/or `virtual:cer-jit-css` module.\n */\nexport function cerJITCSS(options: CerJITCSSPluginOptions): Plugin {\n const {\n content,\n output,\n virtualModule = true,\n extendedColors,\n customColors,\n disableVariants,\n } = options;\n\n const jitOptions: JITCSSOptions = {\n extendedColors,\n customColors,\n disableVariants,\n };\n\n let generatedCSS = '';\n // Resolved file set built in buildStart and reused in handleHotUpdate to\n // avoid re-running globSync for every HMR file-change event.\n let watchedFiles: Set<string> | null = null;\n\n return {\n name: 'cer-jit-css',\n\n buildStart() {\n const cwd = process.cwd();\n const resolved = new Set<string>();\n for (const pattern of content) {\n globSync(pattern, { cwd }).forEach((f) => resolved.add(resolve(cwd, f)));\n }\n watchedFiles = resolved;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n },\n\n resolveId(id: string) {\n if (virtualModule && id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export default ${JSON.stringify(generatedCSS)};`;\n }\n return undefined;\n },\n\n handleHotUpdate({ file, server }: { file: string; server: unknown }) {\n // Re-generate when a watched source file changes.\n // Use the cached file set from buildStart to avoid re-globbing.\n const isWatched = watchedFiles?.has(file) ?? false;\n\n if (!isWatched) return;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n\n if (virtualModule) {\n // Invalidate the virtual module so HMR triggers a reload\n const viteServer = server as {\n moduleGraph: { getModuleById: (id: string) => unknown };\n reloadModule: (mod: unknown) => void;\n };\n const mod = viteServer.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);\n if (mod) viteServer.reloadModule(mod);\n }\n },\n };\n}\n"],"names":["VIRTUAL_ID","RESOLVED_VIRTUAL_ID","generateFromFiles","contentPatterns","jitOptions","enableJITCSS","cwd","files","pattern","matches","globSync","f","resolve","uniqueFiles","allClasses","file","content","readFileSync","classes","extractClassesFromHTML","cls","fakeHTML","jitCSS","VIRTUAL_SSR_ID","RESOLVED_VIRTUAL_SSR_ID","cerPlugin","options","plugins","cerJITCSS","ssrConfig","resolvedConfig","id","output","virtualModule","extendedColors","customColors","disableVariants","generatedCSS","watchedFiles","resolved","outputPath","mkdirSync","dirname","writeFileSync","server","viteServer","mod"],"mappings":"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"}
1
+ {"version":3,"file":"custom-elements-runtime.vite-plugin.cjs.js","names":[],"sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["/**\n * Vite plugins for build-time JIT CSS generation and SSR configuration.\n *\n * Two plugins are exported:\n *\n * - **`cerJITCSS`** — Scans source files for utility class names and emits\n * pre-generated CSS, eliminating all runtime parsing cost for projects with\n * static class lists.\n *\n * - **`cerPlugin`** — All-in-one plugin combining `cerJITCSS` with SSR\n * configuration. Exposes a `virtual:cer-ssr-config` module containing the\n * resolved SSR render options so server entry files can import and use them\n * without duplication.\n *\n * @example cerJITCSS only\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerJITCSS } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerJITCSS({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * output: 'src/generated-jit.css',\n * extendedColors: true,\n * }),\n * ],\n * });\n * ```\n *\n * @example cerPlugin with SSR\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerPlugin } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * ssr: {\n * dsd: true,\n * jit: { extendedColors: true },\n * },\n * }),\n * ],\n * });\n * ```\n *\n * Then in your server entry:\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n\nimport type { Plugin } from 'vite';\nimport { readFileSync, writeFileSync, mkdirSync, globSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport {\n jitCSS,\n enableJITCSS,\n extractClassesFromHTML,\n type JITCSSOptions,\n} from './runtime/style';\n\n// --- Re-export extractClassesFromHTML for plugin consumers ---\n\n/**\n * Options for the `cerJITCSS` Vite plugin.\n */\nexport interface CerJITCSSPluginOptions extends JITCSSOptions {\n /**\n * Glob patterns (relative to `process.cwd()`) that identify which source\n * files the plugin should scan for utility class names.\n *\n * @example `['./src/**\\/*.{ts,html}', './index.html']`\n */\n content: string[];\n /**\n * File path (relative to `process.cwd()`) where the generated CSS will\n * be written. When omitted the plugin only emits a virtual module.\n */\n output?: string;\n /**\n * Whether to emit a virtual module `virtual:cer-jit-css` that resolves to\n * the generated CSS text. Defaults to `true`.\n */\n virtualModule?: boolean;\n}\n\nconst VIRTUAL_ID = 'virtual:cer-jit-css';\nconst RESOLVED_VIRTUAL_ID = '\\0virtual:cer-jit-css';\n\nfunction generateFromFiles(\n contentPatterns: string[],\n jitOptions: JITCSSOptions,\n): string {\n if (jitOptions && Object.keys(jitOptions).length > 0) {\n enableJITCSS(jitOptions);\n }\n\n const cwd = process.cwd();\n const files: string[] = [];\n\n for (const pattern of contentPatterns) {\n const matches = globSync(pattern, { cwd }).map((f) => resolve(cwd, f));\n files.push(...matches);\n }\n\n // Deduplicate files\n const uniqueFiles = [...new Set(files)];\n\n // Aggregate all class names across all files\n const allClasses = new Set<string>();\n\n for (const file of uniqueFiles) {\n try {\n const content = readFileSync(file, 'utf-8');\n const classes = extractClassesFromHTML(content);\n for (const cls of classes) allClasses.add(cls);\n } catch {\n // Skip unreadable files\n }\n }\n\n if (allClasses.size === 0) return '';\n\n // Build a fake HTML string containing all discovered classes so jitCSS()\n // can process the full set in one pass.\n const fakeHTML = `<div class=\"${[...allClasses].join(' ')}\"></div>`;\n return jitCSS(fakeHTML);\n}\n\n// ---------------------------------------------------------------------------\n// cerPlugin — combined JIT CSS + SSR configuration plugin\n// ---------------------------------------------------------------------------\n\n/**\n * SSR render options exposed via `virtual:cer-ssr-config`.\n */\nexport interface CerSSROptions {\n /**\n * Emit Declarative Shadow DOM output for registered custom elements.\n * @default true\n */\n dsd?: boolean;\n /**\n * Append the DSD polyfill `<script>` for browsers without native support.\n * @default true\n */\n dsdPolyfill?: boolean;\n /**\n * JIT CSS options forwarded to the SSR render pass.\n */\n jit?: JITCSSOptions;\n}\n\n/**\n * Options for the combined {@link cerPlugin}.\n */\nexport interface CerPluginOptions extends Partial<CerJITCSSPluginOptions> {\n /**\n * SSR configuration. When provided, a `virtual:cer-ssr-config` module is\n * registered so server entry files can import the resolved render options:\n *\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n ssr?: CerSSROptions;\n}\n\nconst VIRTUAL_SSR_ID = 'virtual:cer-ssr-config';\nconst RESOLVED_VIRTUAL_SSR_ID = '\\0virtual:cer-ssr-config';\n\n/**\n * All-in-one Vite plugin combining build-time JIT CSS generation with SSR\n * configuration. Returns an array of plugins so it can be spread directly\n * into the `plugins` array without nesting.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,html}'],\n * ssr: { dsd: true, jit: { extendedColors: true } },\n * }),\n * ],\n * });\n * ```\n */\nexport function cerPlugin(options: CerPluginOptions): Plugin[] {\n const plugins: Plugin[] = [];\n\n // JIT CSS plugin — only added when a `content` glob is provided\n if (options.content && options.content.length > 0) {\n plugins.push(\n cerJITCSS({\n content: options.content,\n output: options.output,\n virtualModule: options.virtualModule,\n extendedColors: options.extendedColors,\n customColors: options.customColors,\n disableVariants: options.disableVariants,\n }),\n );\n }\n\n // SSR config virtual module — registered whenever `ssr` is provided\n if (options.ssr) {\n const ssrConfig = options.ssr;\n const resolvedConfig = {\n dsd: ssrConfig.dsd ?? true,\n dsdPolyfill: ssrConfig.dsdPolyfill ?? true,\n ...(ssrConfig.jit ? { jit: ssrConfig.jit } : {}),\n };\n\n plugins.push({\n name: 'cer-ssr-config',\n resolveId(id: string) {\n if (id === VIRTUAL_SSR_ID) return RESOLVED_VIRTUAL_SSR_ID;\n return undefined;\n },\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_SSR_ID) {\n return `export default ${JSON.stringify(resolvedConfig)};`;\n }\n return undefined;\n },\n });\n }\n\n return plugins;\n}\n\n// ---------------------------------------------------------------------------\n// cerJITCSS — build-time JIT CSS plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Vite plugin that performs a build-time scan of source files and emits\n * pre-generated JIT CSS as a file and/or `virtual:cer-jit-css` module.\n */\nexport function cerJITCSS(options: CerJITCSSPluginOptions): Plugin {\n const {\n content,\n output,\n virtualModule = true,\n extendedColors,\n customColors,\n disableVariants,\n } = options;\n\n const jitOptions: JITCSSOptions = {\n extendedColors,\n customColors,\n disableVariants,\n };\n\n let generatedCSS = '';\n // Resolved file set built in buildStart and reused in handleHotUpdate to\n // avoid re-running globSync for every HMR file-change event.\n let watchedFiles: Set<string> | null = null;\n\n return {\n name: 'cer-jit-css',\n\n buildStart() {\n const cwd = process.cwd();\n const resolved = new Set<string>();\n for (const pattern of content) {\n globSync(pattern, { cwd }).forEach((f) => resolved.add(resolve(cwd, f)));\n }\n watchedFiles = resolved;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n },\n\n resolveId(id: string) {\n if (virtualModule && id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export default ${JSON.stringify(generatedCSS)};`;\n }\n return undefined;\n },\n\n handleHotUpdate({ file, server }: { file: string; server: unknown }) {\n // Re-generate when a watched source file changes.\n // Use the cached file set from buildStart to avoid re-globbing.\n const isWatched = watchedFiles?.has(file) ?? false;\n\n if (!isWatched) return;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n\n if (virtualModule) {\n // Invalidate the virtual module so HMR triggers a reload\n const viteServer = server as {\n moduleGraph: { getModuleById: (id: string) => unknown };\n reloadModule: (mod: unknown) => void;\n };\n const mod = viteServer.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);\n if (mod) viteServer.reloadModule(mod);\n }\n },\n };\n}\n"],"mappings":"2JA8FA,IAAM,EAAa,sBACb,EAAsB,wBAE5B,SAAS,EACP,EACA,EACQ,CACJ,GAAc,OAAO,KAAK,CAAA,EAAY,OAAS,GACjD,EAAA,aAAa,CAAA,EAGf,MAAM,EAAM,QAAQ,IAAA,EACd,EAAkB,CAAA,EAExB,UAAW,KAAW,EAAiB,CACrC,MAAM,KAAA,EAAA,UAAmB,EAAS,CAAE,IAAA,CAAA,CAAK,EAAE,IAAK,MAAA,EAAA,SAAc,EAAK,CAAA,CAAE,EACrE,EAAM,KAAK,GAAG,CAAA,EAIhB,MAAM,EAAc,CAAC,GAAG,IAAI,IAAI,CAAA,CAAM,EAGhC,EAAa,IAAI,IAEvB,UAAW,KAAQ,EACjB,GAAI,CAEF,MAAM,EAAU,EAAA,0BAAA,EAAA,cADa,EAAM,OAAA,CAAQ,EAE3C,UAAW,KAAO,EAAS,EAAW,IAAI,CAAA,OACpC,CAAA,CAKV,OAAI,EAAW,OAAS,EAAU,GAK3B,EAAA,OADU,eAAe,CAAC,GAAG,CAAA,EAAY,KAAK,GAAA,CAAI,UAAC,EA8C5D,IAAM,EAAiB,yBACjB,EAA0B,2BAoBhC,SAAgB,EAAU,EAAqC,CAC7D,MAAM,EAAoB,CAAA,EAiB1B,GAdI,EAAQ,SAAW,EAAQ,QAAQ,OAAS,GAC9C,EAAQ,KACN,EAAU,CACR,QAAS,EAAQ,QACjB,OAAQ,EAAQ,OAChB,cAAe,EAAQ,cACvB,eAAgB,EAAQ,eACxB,aAAc,EAAQ,aACtB,gBAAiB,EAAQ,gBAC1B,CAAC,EAKF,EAAQ,IAAK,CACf,MAAM,EAAY,EAAQ,IACpB,EAAiB,CACrB,IAAK,EAAU,KAAO,GACtB,YAAa,EAAU,aAAe,GACtC,GAAI,EAAU,IAAM,CAAE,IAAK,EAAU,GAAA,EAAQ,CAAA,GAG/C,EAAQ,KAAK,CACX,KAAM,iBACN,UAAU,EAAY,CACpB,GAAI,IAAO,EAAgB,OAAO,GAGpC,KAAK,EAAY,CACf,GAAI,IAAO,EACT,MAAO,kBAAkB,KAAK,UAAU,CAAA,CAAe,KAI5D,EAGH,OAAO,EAWT,SAAgB,EAAU,EAAyC,CACjE,KAAM,CACJ,QAAA,EACA,OAAA,EACA,cAAA,EAAgB,GAChB,eAAA,EACA,aAAA,EACA,gBAAA,CAAA,EACE,EAEE,EAA4B,CAChC,eAAA,EACA,aAAA,EACA,gBAAA,GAGF,IAAI,EAAe,GAGf,EAAmC,KAEvC,MAAO,CACL,KAAM,cAEN,YAAa,CACX,MAAM,EAAM,QAAQ,IAAA,EACd,EAAW,IAAI,IACrB,UAAW,KAAW,KACpB,EAAA,UAAS,EAAS,CAAE,IAAA,CAAA,CAAK,EAAE,QAAS,GAAM,EAAS,OAAA,EAAA,SAAY,EAAK,CAAA,CAAE,CAAC,EAMzE,GAJA,EAAe,EAEf,EAAe,EAAkB,EAAS,CAAA,EAEtC,EAAQ,CACV,MAAM,KAAA,EAAA,SAAqB,QAAQ,IAAA,EAAO,CAAA,KAC1C,EAAA,cAAA,EAAA,SAAkB,CAAA,EAAa,CAAE,UAAW,EAAA,CAAM,KAClD,EAAA,eAAc,EAAY,EAAc,OAAA,IAI5C,UAAU,EAAY,CACpB,GAAI,GAAiB,IAAO,EAC1B,OAAO,GAKX,KAAK,EAAY,CACf,GAAI,IAAO,EACT,MAAO,kBAAkB,KAAK,UAAU,CAAA,CAAa,KAKzD,gBAAgB,CAAE,KAAA,EAAM,OAAA,CAAA,EAA6C,CAKnE,IAFkB,GAAc,IAAI,CAAA,GAAS,MAI7C,EAAe,EAAkB,EAAS,CAAA,EAEtC,MAEF,EAAA,kBAAA,EAAA,SAD2B,QAAQ,IAAA,EAAO,CAAA,EAChB,EAAc,OAAA,EAGtC,GAAe,CAEjB,MAAM,EAAa,EAIb,EAAM,EAAW,YAAY,cAAc,CAAA,EAC7C,GAAK,EAAW,aAAa,CAAA"}
@@ -1,105 +1,84 @@
1
- import { globSync as I, mkdirSync as w, writeFileSync as g, readFileSync as y } from "node:fs";
2
- import { resolve as S, dirname as j } from "node:path";
3
- import { e as V, b, j as L } from "./style-BmyOIMcU.js";
4
- const R = "virtual:cer-jit-css", m = "\0virtual:cer-jit-css";
5
- function p(t, r) {
6
- r && Object.keys(r).length > 0 && V(r);
7
- const e = process.cwd(), n = [];
8
- for (const i of t) {
9
- const o = I(i, { cwd: e }).map((l) => S(e, l));
10
- n.push(...o);
1
+ import { a as I, i as w, l as y } from "./style-DuDoj_xK.js";
2
+ import { globSync as p, mkdirSync as V, readFileSync as j, writeFileSync as g } from "node:fs";
3
+ import { dirname as R, resolve as S } from "node:path";
4
+ var _ = "virtual:cer-jit-css", v = "\0virtual:cer-jit-css";
5
+ function C(e, r) {
6
+ r && Object.keys(r).length > 0 && w(r);
7
+ const t = process.cwd(), n = [];
8
+ for (const u of e) {
9
+ const i = p(u, { cwd: t }).map((s) => S(t, s));
10
+ n.push(...i);
11
11
  }
12
- const c = [...new Set(n)], d = /* @__PURE__ */ new Set();
13
- for (const i of c)
14
- try {
15
- const o = y(i, "utf-8"), l = b(o);
16
- for (const s of l) d.add(s);
17
- } catch {
18
- }
19
- if (d.size === 0) return "";
20
- const v = `<div class="${[...d].join(" ")}"></div>`;
21
- return L(v);
12
+ const c = [...new Set(n)], a = /* @__PURE__ */ new Set();
13
+ for (const u of c) try {
14
+ const i = I(j(u, "utf-8"));
15
+ for (const s of i) a.add(s);
16
+ } catch {
17
+ }
18
+ return a.size === 0 ? "" : y(`<div class="${[...a].join(" ")}"></div>`);
22
19
  }
23
- const T = "virtual:cer-ssr-config", C = "\0virtual:cer-ssr-config";
24
- function D(t) {
20
+ var b = "virtual:cer-ssr-config", h = "\0virtual:cer-ssr-config";
21
+ function D(e) {
25
22
  const r = [];
26
- if (t.content && t.content.length > 0 && r.push(
27
- _({
28
- content: t.content,
29
- output: t.output,
30
- virtualModule: t.virtualModule,
31
- extendedColors: t.extendedColors,
32
- customColors: t.customColors,
33
- disableVariants: t.disableVariants
34
- })
35
- ), t.ssr) {
36
- const e = t.ssr, n = {
37
- dsd: e.dsd ?? !0,
38
- dsdPolyfill: e.dsdPolyfill ?? !0,
39
- ...e.jit ? { jit: e.jit } : {}
23
+ if (e.content && e.content.length > 0 && r.push(x({
24
+ content: e.content,
25
+ output: e.output,
26
+ virtualModule: e.virtualModule,
27
+ extendedColors: e.extendedColors,
28
+ customColors: e.customColors,
29
+ disableVariants: e.disableVariants
30
+ })), e.ssr) {
31
+ const t = e.ssr, n = {
32
+ dsd: t.dsd ?? !0,
33
+ dsdPolyfill: t.dsdPolyfill ?? !0,
34
+ ...t.jit ? { jit: t.jit } : {}
40
35
  };
41
36
  r.push({
42
37
  name: "cer-ssr-config",
43
38
  resolveId(c) {
44
- if (c === T) return C;
39
+ if (c === b) return h;
45
40
  },
46
41
  load(c) {
47
- if (c === C)
48
- return `export default ${JSON.stringify(n)};`;
42
+ if (c === h) return `export default ${JSON.stringify(n)};`;
49
43
  }
50
44
  });
51
45
  }
52
46
  return r;
53
47
  }
54
- function _(t) {
55
- const {
56
- content: r,
57
- output: e,
58
- virtualModule: n = !0,
59
- extendedColors: c,
60
- customColors: d,
61
- disableVariants: v
62
- } = t, i = {
48
+ function x(e) {
49
+ const { content: r, output: t, virtualModule: n = !0, extendedColors: c, customColors: a, disableVariants: u } = e, i = {
63
50
  extendedColors: c,
64
- customColors: d,
65
- disableVariants: v
51
+ customColors: a,
52
+ disableVariants: u
66
53
  };
67
- let o = "", l = null;
54
+ let s = "", m = null;
68
55
  return {
69
56
  name: "cer-jit-css",
70
57
  buildStart() {
71
- const s = process.cwd(), f = /* @__PURE__ */ new Set();
72
- for (const a of r)
73
- I(a, { cwd: s }).forEach((u) => f.add(S(s, u)));
74
- if (l = f, o = p(r, i), e) {
75
- const a = S(process.cwd(), e);
76
- w(j(a), { recursive: !0 }), g(a, o, "utf-8");
58
+ const o = process.cwd(), d = /* @__PURE__ */ new Set();
59
+ for (const l of r) p(l, { cwd: o }).forEach((f) => d.add(S(o, f)));
60
+ if (m = d, s = C(r, i), t) {
61
+ const l = S(process.cwd(), t);
62
+ V(R(l), { recursive: !0 }), g(l, s, "utf-8");
77
63
  }
78
64
  },
79
- resolveId(s) {
80
- if (n && s === R)
81
- return m;
65
+ resolveId(o) {
66
+ if (n && o === _) return v;
82
67
  },
83
- load(s) {
84
- if (s === m)
85
- return `export default ${JSON.stringify(o)};`;
68
+ load(o) {
69
+ if (o === v) return `export default ${JSON.stringify(s)};`;
86
70
  },
87
- handleHotUpdate({ file: s, server: f }) {
88
- if (l?.has(s) ?? !1) {
89
- if (o = p(r, i), e) {
90
- const u = S(process.cwd(), e);
91
- g(u, o, "utf-8");
92
- }
93
- if (n) {
94
- const u = f, h = u.moduleGraph.getModuleById(m);
95
- h && u.reloadModule(h);
96
- }
71
+ handleHotUpdate({ file: o, server: d }) {
72
+ if ((m?.has(o) ?? !1) && (s = C(r, i), t && g(S(process.cwd(), t), s, "utf-8"), n)) {
73
+ const l = d, f = l.moduleGraph.getModuleById(v);
74
+ f && l.reloadModule(f);
97
75
  }
98
76
  }
99
77
  };
100
78
  }
101
79
  export {
102
- _ as cerJITCSS,
80
+ x as cerJITCSS,
103
81
  D as cerPlugin
104
82
  };
105
- //# sourceMappingURL=custom-elements-runtime.vite-plugin.es.js.map
83
+
84
+ //# sourceMappingURL=custom-elements-runtime.vite-plugin.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-elements-runtime.vite-plugin.es.js","sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["/**\n * Vite plugins for build-time JIT CSS generation and SSR configuration.\n *\n * Two plugins are exported:\n *\n * - **`cerJITCSS`** — Scans source files for utility class names and emits\n * pre-generated CSS, eliminating all runtime parsing cost for projects with\n * static class lists.\n *\n * - **`cerPlugin`** — All-in-one plugin combining `cerJITCSS` with SSR\n * configuration. Exposes a `virtual:cer-ssr-config` module containing the\n * resolved SSR render options so server entry files can import and use them\n * without duplication.\n *\n * @example cerJITCSS only\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerJITCSS } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerJITCSS({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * output: 'src/generated-jit.css',\n * extendedColors: true,\n * }),\n * ],\n * });\n * ```\n *\n * @example cerPlugin with SSR\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerPlugin } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * ssr: {\n * dsd: true,\n * jit: { extendedColors: true },\n * },\n * }),\n * ],\n * });\n * ```\n *\n * Then in your server entry:\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n\nimport type { Plugin } from 'vite';\nimport { readFileSync, writeFileSync, mkdirSync, globSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport {\n jitCSS,\n enableJITCSS,\n extractClassesFromHTML,\n type JITCSSOptions,\n} from './runtime/style';\n\n// --- Re-export extractClassesFromHTML for plugin consumers ---\n\n/**\n * Options for the `cerJITCSS` Vite plugin.\n */\nexport interface CerJITCSSPluginOptions extends JITCSSOptions {\n /**\n * Glob patterns (relative to `process.cwd()`) that identify which source\n * files the plugin should scan for utility class names.\n *\n * @example `['./src/**\\/*.{ts,html}', './index.html']`\n */\n content: string[];\n /**\n * File path (relative to `process.cwd()`) where the generated CSS will\n * be written. When omitted the plugin only emits a virtual module.\n */\n output?: string;\n /**\n * Whether to emit a virtual module `virtual:cer-jit-css` that resolves to\n * the generated CSS text. Defaults to `true`.\n */\n virtualModule?: boolean;\n}\n\nconst VIRTUAL_ID = 'virtual:cer-jit-css';\nconst RESOLVED_VIRTUAL_ID = '\\0virtual:cer-jit-css';\n\nfunction generateFromFiles(\n contentPatterns: string[],\n jitOptions: JITCSSOptions,\n): string {\n if (jitOptions && Object.keys(jitOptions).length > 0) {\n enableJITCSS(jitOptions);\n }\n\n const cwd = process.cwd();\n const files: string[] = [];\n\n for (const pattern of contentPatterns) {\n const matches = globSync(pattern, { cwd }).map((f) => resolve(cwd, f));\n files.push(...matches);\n }\n\n // Deduplicate files\n const uniqueFiles = [...new Set(files)];\n\n // Aggregate all class names across all files\n const allClasses = new Set<string>();\n\n for (const file of uniqueFiles) {\n try {\n const content = readFileSync(file, 'utf-8');\n const classes = extractClassesFromHTML(content);\n for (const cls of classes) allClasses.add(cls);\n } catch {\n // Skip unreadable files\n }\n }\n\n if (allClasses.size === 0) return '';\n\n // Build a fake HTML string containing all discovered classes so jitCSS()\n // can process the full set in one pass.\n const fakeHTML = `<div class=\"${[...allClasses].join(' ')}\"></div>`;\n return jitCSS(fakeHTML);\n}\n\n// ---------------------------------------------------------------------------\n// cerPlugin — combined JIT CSS + SSR configuration plugin\n// ---------------------------------------------------------------------------\n\n/**\n * SSR render options exposed via `virtual:cer-ssr-config`.\n */\nexport interface CerSSROptions {\n /**\n * Emit Declarative Shadow DOM output for registered custom elements.\n * @default true\n */\n dsd?: boolean;\n /**\n * Append the DSD polyfill `<script>` for browsers without native support.\n * @default true\n */\n dsdPolyfill?: boolean;\n /**\n * JIT CSS options forwarded to the SSR render pass.\n */\n jit?: JITCSSOptions;\n}\n\n/**\n * Options for the combined {@link cerPlugin}.\n */\nexport interface CerPluginOptions extends Partial<CerJITCSSPluginOptions> {\n /**\n * SSR configuration. When provided, a `virtual:cer-ssr-config` module is\n * registered so server entry files can import the resolved render options:\n *\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n ssr?: CerSSROptions;\n}\n\nconst VIRTUAL_SSR_ID = 'virtual:cer-ssr-config';\nconst RESOLVED_VIRTUAL_SSR_ID = '\\0virtual:cer-ssr-config';\n\n/**\n * All-in-one Vite plugin combining build-time JIT CSS generation with SSR\n * configuration. Returns an array of plugins so it can be spread directly\n * into the `plugins` array without nesting.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,html}'],\n * ssr: { dsd: true, jit: { extendedColors: true } },\n * }),\n * ],\n * });\n * ```\n */\nexport function cerPlugin(options: CerPluginOptions): Plugin[] {\n const plugins: Plugin[] = [];\n\n // JIT CSS plugin — only added when a `content` glob is provided\n if (options.content && options.content.length > 0) {\n plugins.push(\n cerJITCSS({\n content: options.content,\n output: options.output,\n virtualModule: options.virtualModule,\n extendedColors: options.extendedColors,\n customColors: options.customColors,\n disableVariants: options.disableVariants,\n }),\n );\n }\n\n // SSR config virtual module — registered whenever `ssr` is provided\n if (options.ssr) {\n const ssrConfig = options.ssr;\n const resolvedConfig = {\n dsd: ssrConfig.dsd ?? true,\n dsdPolyfill: ssrConfig.dsdPolyfill ?? true,\n ...(ssrConfig.jit ? { jit: ssrConfig.jit } : {}),\n };\n\n plugins.push({\n name: 'cer-ssr-config',\n resolveId(id: string) {\n if (id === VIRTUAL_SSR_ID) return RESOLVED_VIRTUAL_SSR_ID;\n return undefined;\n },\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_SSR_ID) {\n return `export default ${JSON.stringify(resolvedConfig)};`;\n }\n return undefined;\n },\n });\n }\n\n return plugins;\n}\n\n// ---------------------------------------------------------------------------\n// cerJITCSS — build-time JIT CSS plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Vite plugin that performs a build-time scan of source files and emits\n * pre-generated JIT CSS as a file and/or `virtual:cer-jit-css` module.\n */\nexport function cerJITCSS(options: CerJITCSSPluginOptions): Plugin {\n const {\n content,\n output,\n virtualModule = true,\n extendedColors,\n customColors,\n disableVariants,\n } = options;\n\n const jitOptions: JITCSSOptions = {\n extendedColors,\n customColors,\n disableVariants,\n };\n\n let generatedCSS = '';\n // Resolved file set built in buildStart and reused in handleHotUpdate to\n // avoid re-running globSync for every HMR file-change event.\n let watchedFiles: Set<string> | null = null;\n\n return {\n name: 'cer-jit-css',\n\n buildStart() {\n const cwd = process.cwd();\n const resolved = new Set<string>();\n for (const pattern of content) {\n globSync(pattern, { cwd }).forEach((f) => resolved.add(resolve(cwd, f)));\n }\n watchedFiles = resolved;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n },\n\n resolveId(id: string) {\n if (virtualModule && id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export default ${JSON.stringify(generatedCSS)};`;\n }\n return undefined;\n },\n\n handleHotUpdate({ file, server }: { file: string; server: unknown }) {\n // Re-generate when a watched source file changes.\n // Use the cached file set from buildStart to avoid re-globbing.\n const isWatched = watchedFiles?.has(file) ?? false;\n\n if (!isWatched) return;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n\n if (virtualModule) {\n // Invalidate the virtual module so HMR triggers a reload\n const viteServer = server as {\n moduleGraph: { getModuleById: (id: string) => unknown };\n reloadModule: (mod: unknown) => void;\n };\n const mod = viteServer.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);\n if (mod) viteServer.reloadModule(mod);\n }\n },\n };\n}\n"],"names":["VIRTUAL_ID","RESOLVED_VIRTUAL_ID","generateFromFiles","contentPatterns","jitOptions","enableJITCSS","cwd","files","pattern","matches","globSync","f","resolve","uniqueFiles","allClasses","file","content","readFileSync","classes","extractClassesFromHTML","cls","fakeHTML","jitCSS","VIRTUAL_SSR_ID","RESOLVED_VIRTUAL_SSR_ID","cerPlugin","options","plugins","cerJITCSS","ssrConfig","resolvedConfig","id","output","virtualModule","extendedColors","customColors","disableVariants","generatedCSS","watchedFiles","resolved","outputPath","mkdirSync","dirname","writeFileSync","server","viteServer","mod"],"mappings":"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"}
1
+ {"version":3,"file":"custom-elements-runtime.vite-plugin.es.js","names":[],"sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["/**\n * Vite plugins for build-time JIT CSS generation and SSR configuration.\n *\n * Two plugins are exported:\n *\n * - **`cerJITCSS`** — Scans source files for utility class names and emits\n * pre-generated CSS, eliminating all runtime parsing cost for projects with\n * static class lists.\n *\n * - **`cerPlugin`** — All-in-one plugin combining `cerJITCSS` with SSR\n * configuration. Exposes a `virtual:cer-ssr-config` module containing the\n * resolved SSR render options so server entry files can import and use them\n * without duplication.\n *\n * @example cerJITCSS only\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerJITCSS } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerJITCSS({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * output: 'src/generated-jit.css',\n * extendedColors: true,\n * }),\n * ],\n * });\n * ```\n *\n * @example cerPlugin with SSR\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { cerPlugin } from '@jasonshimmy/custom-elements-runtime/vite-plugin';\n *\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,tsx,html}'],\n * ssr: {\n * dsd: true,\n * jit: { extendedColors: true },\n * },\n * }),\n * ],\n * });\n * ```\n *\n * Then in your server entry:\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n\nimport type { Plugin } from 'vite';\nimport { readFileSync, writeFileSync, mkdirSync, globSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport {\n jitCSS,\n enableJITCSS,\n extractClassesFromHTML,\n type JITCSSOptions,\n} from './runtime/style';\n\n// --- Re-export extractClassesFromHTML for plugin consumers ---\n\n/**\n * Options for the `cerJITCSS` Vite plugin.\n */\nexport interface CerJITCSSPluginOptions extends JITCSSOptions {\n /**\n * Glob patterns (relative to `process.cwd()`) that identify which source\n * files the plugin should scan for utility class names.\n *\n * @example `['./src/**\\/*.{ts,html}', './index.html']`\n */\n content: string[];\n /**\n * File path (relative to `process.cwd()`) where the generated CSS will\n * be written. When omitted the plugin only emits a virtual module.\n */\n output?: string;\n /**\n * Whether to emit a virtual module `virtual:cer-jit-css` that resolves to\n * the generated CSS text. Defaults to `true`.\n */\n virtualModule?: boolean;\n}\n\nconst VIRTUAL_ID = 'virtual:cer-jit-css';\nconst RESOLVED_VIRTUAL_ID = '\\0virtual:cer-jit-css';\n\nfunction generateFromFiles(\n contentPatterns: string[],\n jitOptions: JITCSSOptions,\n): string {\n if (jitOptions && Object.keys(jitOptions).length > 0) {\n enableJITCSS(jitOptions);\n }\n\n const cwd = process.cwd();\n const files: string[] = [];\n\n for (const pattern of contentPatterns) {\n const matches = globSync(pattern, { cwd }).map((f) => resolve(cwd, f));\n files.push(...matches);\n }\n\n // Deduplicate files\n const uniqueFiles = [...new Set(files)];\n\n // Aggregate all class names across all files\n const allClasses = new Set<string>();\n\n for (const file of uniqueFiles) {\n try {\n const content = readFileSync(file, 'utf-8');\n const classes = extractClassesFromHTML(content);\n for (const cls of classes) allClasses.add(cls);\n } catch {\n // Skip unreadable files\n }\n }\n\n if (allClasses.size === 0) return '';\n\n // Build a fake HTML string containing all discovered classes so jitCSS()\n // can process the full set in one pass.\n const fakeHTML = `<div class=\"${[...allClasses].join(' ')}\"></div>`;\n return jitCSS(fakeHTML);\n}\n\n// ---------------------------------------------------------------------------\n// cerPlugin — combined JIT CSS + SSR configuration plugin\n// ---------------------------------------------------------------------------\n\n/**\n * SSR render options exposed via `virtual:cer-ssr-config`.\n */\nexport interface CerSSROptions {\n /**\n * Emit Declarative Shadow DOM output for registered custom elements.\n * @default true\n */\n dsd?: boolean;\n /**\n * Append the DSD polyfill `<script>` for browsers without native support.\n * @default true\n */\n dsdPolyfill?: boolean;\n /**\n * JIT CSS options forwarded to the SSR render pass.\n */\n jit?: JITCSSOptions;\n}\n\n/**\n * Options for the combined {@link cerPlugin}.\n */\nexport interface CerPluginOptions extends Partial<CerJITCSSPluginOptions> {\n /**\n * SSR configuration. When provided, a `virtual:cer-ssr-config` module is\n * registered so server entry files can import the resolved render options:\n *\n * ```ts\n * import ssrConfig from 'virtual:cer-ssr-config';\n * import { renderToStringWithJITCSS } from '@jasonshimmy/custom-elements-runtime/ssr';\n *\n * const { htmlWithStyles } = renderToStringWithJITCSS(appVNode, ssrConfig);\n * ```\n */\n ssr?: CerSSROptions;\n}\n\nconst VIRTUAL_SSR_ID = 'virtual:cer-ssr-config';\nconst RESOLVED_VIRTUAL_SSR_ID = '\\0virtual:cer-ssr-config';\n\n/**\n * All-in-one Vite plugin combining build-time JIT CSS generation with SSR\n * configuration. Returns an array of plugins so it can be spread directly\n * into the `plugins` array without nesting.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * export default defineConfig({\n * plugins: [\n * cerPlugin({\n * content: ['./src/**\\/*.{ts,html}'],\n * ssr: { dsd: true, jit: { extendedColors: true } },\n * }),\n * ],\n * });\n * ```\n */\nexport function cerPlugin(options: CerPluginOptions): Plugin[] {\n const plugins: Plugin[] = [];\n\n // JIT CSS plugin — only added when a `content` glob is provided\n if (options.content && options.content.length > 0) {\n plugins.push(\n cerJITCSS({\n content: options.content,\n output: options.output,\n virtualModule: options.virtualModule,\n extendedColors: options.extendedColors,\n customColors: options.customColors,\n disableVariants: options.disableVariants,\n }),\n );\n }\n\n // SSR config virtual module — registered whenever `ssr` is provided\n if (options.ssr) {\n const ssrConfig = options.ssr;\n const resolvedConfig = {\n dsd: ssrConfig.dsd ?? true,\n dsdPolyfill: ssrConfig.dsdPolyfill ?? true,\n ...(ssrConfig.jit ? { jit: ssrConfig.jit } : {}),\n };\n\n plugins.push({\n name: 'cer-ssr-config',\n resolveId(id: string) {\n if (id === VIRTUAL_SSR_ID) return RESOLVED_VIRTUAL_SSR_ID;\n return undefined;\n },\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_SSR_ID) {\n return `export default ${JSON.stringify(resolvedConfig)};`;\n }\n return undefined;\n },\n });\n }\n\n return plugins;\n}\n\n// ---------------------------------------------------------------------------\n// cerJITCSS — build-time JIT CSS plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Vite plugin that performs a build-time scan of source files and emits\n * pre-generated JIT CSS as a file and/or `virtual:cer-jit-css` module.\n */\nexport function cerJITCSS(options: CerJITCSSPluginOptions): Plugin {\n const {\n content,\n output,\n virtualModule = true,\n extendedColors,\n customColors,\n disableVariants,\n } = options;\n\n const jitOptions: JITCSSOptions = {\n extendedColors,\n customColors,\n disableVariants,\n };\n\n let generatedCSS = '';\n // Resolved file set built in buildStart and reused in handleHotUpdate to\n // avoid re-running globSync for every HMR file-change event.\n let watchedFiles: Set<string> | null = null;\n\n return {\n name: 'cer-jit-css',\n\n buildStart() {\n const cwd = process.cwd();\n const resolved = new Set<string>();\n for (const pattern of content) {\n globSync(pattern, { cwd }).forEach((f) => resolved.add(resolve(cwd, f)));\n }\n watchedFiles = resolved;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n },\n\n resolveId(id: string) {\n if (virtualModule && id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export default ${JSON.stringify(generatedCSS)};`;\n }\n return undefined;\n },\n\n handleHotUpdate({ file, server }: { file: string; server: unknown }) {\n // Re-generate when a watched source file changes.\n // Use the cached file set from buildStart to avoid re-globbing.\n const isWatched = watchedFiles?.has(file) ?? false;\n\n if (!isWatched) return;\n\n generatedCSS = generateFromFiles(content, jitOptions);\n\n if (output) {\n const outputPath = resolve(process.cwd(), output);\n writeFileSync(outputPath, generatedCSS, 'utf-8');\n }\n\n if (virtualModule) {\n // Invalidate the virtual module so HMR triggers a reload\n const viteServer = server as {\n moduleGraph: { getModuleById: (id: string) => unknown };\n reloadModule: (mod: unknown) => void;\n };\n const mod = viteServer.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);\n if (mod) viteServer.reloadModule(mod);\n }\n },\n };\n}\n"],"mappings":"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"}