@maizzle/framework 6.0.0-rc.16 → 6.0.0-rc.17

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 (228) hide show
  1. package/dist/{build.d.mts → build.d.ts} +2 -2
  2. package/dist/build.d.ts.map +1 -0
  3. package/dist/build.mjs +1 -1
  4. package/dist/build.mjs.map +1 -1
  5. package/dist/components/Row.vue +3 -2
  6. package/dist/components/Tailwind.vue +43 -0
  7. package/dist/components/{utils.d.mts → utils.d.ts} +1 -1
  8. package/dist/components/utils.d.ts.map +1 -0
  9. package/dist/composables/{defineConfig.d.mts → defineConfig.d.ts} +2 -2
  10. package/dist/composables/defineConfig.d.ts.map +1 -0
  11. package/dist/composables/{renderContext.d.mts → renderContext.d.ts} +11 -5
  12. package/dist/composables/renderContext.d.ts.map +1 -0
  13. package/dist/composables/renderContext.mjs.map +1 -1
  14. package/dist/composables/{useConfig.d.mts → useConfig.d.ts} +2 -2
  15. package/dist/composables/useConfig.d.ts.map +1 -0
  16. package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
  17. package/dist/composables/useDoctype.d.ts.map +1 -0
  18. package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +2 -2
  19. package/dist/composables/useEvent.d.ts.map +1 -0
  20. package/dist/composables/{useFont.d.mts → useFont.d.ts} +1 -1
  21. package/dist/composables/useFont.d.ts.map +1 -0
  22. package/dist/composables/{useOutlookFallback.d.mts → useOutlookFallback.d.ts} +1 -1
  23. package/dist/composables/useOutlookFallback.d.ts.map +1 -0
  24. package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +1 -1
  25. package/dist/composables/usePlaintext.d.ts.map +1 -0
  26. package/dist/composables/{usePreheader.d.mts → usePreheader.d.ts} +1 -1
  27. package/dist/composables/usePreheader.d.ts.map +1 -0
  28. package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
  29. package/dist/config/defaults.d.ts.map +1 -0
  30. package/dist/config/{index.d.mts → index.d.ts} +4 -4
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/events/{index.d.mts → index.d.ts} +2 -2
  33. package/dist/events/index.d.ts.map +1 -0
  34. package/dist/index.d.ts +34 -0
  35. package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
  36. package/dist/plaintext.d.ts.map +1 -0
  37. package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
  38. package/dist/plugin.d.ts.map +1 -0
  39. package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
  40. package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
  41. package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
  42. package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
  43. package/dist/plugins/postcss/{quoteFontFamilies.d.mts → quoteFontFamilies.d.ts} +1 -1
  44. package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
  45. package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
  46. package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
  47. package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
  48. package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
  49. package/dist/plugins/postcss/resolveMaizzleImports.mjs +40 -0
  50. package/dist/plugins/postcss/resolveMaizzleImports.mjs.map +1 -0
  51. package/dist/plugins/postcss/{resolveProps.d.mts → resolveProps.d.ts} +1 -1
  52. package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
  53. package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
  54. package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
  55. package/dist/{prepare.d.mts → prepare.d.ts} +1 -1
  56. package/dist/prepare.d.ts.map +1 -0
  57. package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +4 -3
  58. package/dist/render/createRenderer.d.ts.map +1 -0
  59. package/dist/render/createRenderer.mjs +2 -1
  60. package/dist/render/createRenderer.mjs.map +1 -1
  61. package/dist/render/index.d.ts +18 -0
  62. package/dist/render/index.d.ts.map +1 -0
  63. package/dist/render/index.mjs +13 -14
  64. package/dist/render/index.mjs.map +1 -1
  65. package/dist/render/{injectFonts.d.mts → injectFonts.d.ts} +2 -2
  66. package/dist/render/injectFonts.d.ts.map +1 -0
  67. package/dist/render/plugins/{codeBlockExtract.d.mts → codeBlockExtract.d.ts} +1 -1
  68. package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
  69. package/dist/render/plugins/{markdownExtract.d.mts → markdownExtract.d.ts} +1 -1
  70. package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
  71. package/dist/render/plugins/{rawExtract.d.mts → rawExtract.d.ts} +1 -1
  72. package/dist/render/plugins/rawExtract.d.ts.map +1 -0
  73. package/dist/render/plugins/{rowSourceLocation.d.mts → rowSourceLocation.d.ts} +1 -1
  74. package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
  75. package/dist/{serve.d.mts → serve.d.ts} +2 -2
  76. package/dist/serve.d.ts.map +1 -0
  77. package/dist/serve.mjs +15 -6
  78. package/dist/serve.mjs.map +1 -1
  79. package/dist/server/{compatibility.d.mts → compatibility.d.ts} +2 -2
  80. package/dist/server/compatibility.d.ts.map +1 -0
  81. package/dist/server/{email.d.mts → email.d.ts} +2 -2
  82. package/dist/server/email.d.ts.map +1 -0
  83. package/dist/server/{linter.d.mts → linter.d.ts} +2 -2
  84. package/dist/server/linter.d.ts.map +1 -0
  85. package/dist/server/{sfc-utils.d.mts → sfc-utils.d.ts} +1 -1
  86. package/dist/server/sfc-utils.d.ts.map +1 -0
  87. package/dist/server/ui/pages/Preview.vue +78 -19
  88. package/dist/transformers/{addAttributes.d.mts → addAttributes.d.ts} +2 -2
  89. package/dist/transformers/addAttributes.d.ts.map +1 -0
  90. package/dist/transformers/{attributeToStyle.d.mts → attributeToStyle.d.ts} +2 -2
  91. package/dist/transformers/attributeToStyle.d.ts.map +1 -0
  92. package/dist/transformers/{base.d.mts → base.d.ts} +2 -2
  93. package/dist/transformers/base.d.ts.map +1 -0
  94. package/dist/transformers/{columnWidth.d.mts → columnWidth.d.ts} +1 -1
  95. package/dist/transformers/columnWidth.d.ts.map +1 -0
  96. package/dist/transformers/{entities.d.mts → entities.d.ts} +2 -2
  97. package/dist/transformers/entities.d.ts.map +1 -0
  98. package/dist/transformers/filters/{defaults.d.mts → defaults.d.ts} +1 -1
  99. package/dist/transformers/filters/defaults.d.ts.map +1 -0
  100. package/dist/transformers/filters/{index.d.mts → index.d.ts} +2 -2
  101. package/dist/transformers/filters/index.d.ts.map +1 -0
  102. package/dist/transformers/{format.d.mts → format.d.ts} +2 -2
  103. package/dist/transformers/format.d.ts.map +1 -0
  104. package/dist/transformers/{index.d.mts → index.d.ts} +4 -3
  105. package/dist/transformers/index.d.ts.map +1 -0
  106. package/dist/transformers/index.mjs +3 -1
  107. package/dist/transformers/index.mjs.map +1 -1
  108. package/dist/transformers/{inlineCSS.d.mts → inlineCSS.d.ts} +2 -2
  109. package/dist/transformers/inlineCSS.d.ts.map +1 -0
  110. package/dist/transformers/inlineCSS.mjs +7 -1
  111. package/dist/transformers/inlineCSS.mjs.map +1 -1
  112. package/dist/transformers/{inlineLink.d.mts → inlineLink.d.ts} +1 -1
  113. package/dist/transformers/inlineLink.d.ts.map +1 -0
  114. package/dist/transformers/{minify.d.mts → minify.d.ts} +2 -2
  115. package/dist/transformers/minify.d.ts.map +1 -0
  116. package/dist/transformers/{msoWidthFromClass.d.mts → msoWidthFromClass.d.ts} +1 -1
  117. package/dist/transformers/msoWidthFromClass.d.ts.map +1 -0
  118. package/dist/transformers/{purgeCSS.d.mts → purgeCSS.d.ts} +2 -2
  119. package/dist/transformers/purgeCSS.d.ts.map +1 -0
  120. package/dist/transformers/purgeCSS.mjs +44 -2
  121. package/dist/transformers/purgeCSS.mjs.map +1 -1
  122. package/dist/transformers/{removeAttributes.d.mts → removeAttributes.d.ts} +2 -2
  123. package/dist/transformers/removeAttributes.d.ts.map +1 -0
  124. package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
  125. package/dist/transformers/replaceStrings.d.ts.map +1 -0
  126. package/dist/transformers/{safeClassNames.d.mts → safeClassNames.d.ts} +2 -2
  127. package/dist/transformers/safeClassNames.d.ts.map +1 -0
  128. package/dist/transformers/{shorthandCSS.d.mts → shorthandCSS.d.ts} +2 -2
  129. package/dist/transformers/shorthandCSS.d.ts.map +1 -0
  130. package/dist/transformers/{sixHex.d.mts → sixHex.d.ts} +2 -2
  131. package/dist/transformers/sixHex.d.ts.map +1 -0
  132. package/dist/transformers/tailwindComponent.d.ts +16 -0
  133. package/dist/transformers/tailwindComponent.d.ts.map +1 -0
  134. package/dist/transformers/tailwindComponent.mjs +93 -0
  135. package/dist/transformers/tailwindComponent.mjs.map +1 -0
  136. package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +2 -2
  137. package/dist/transformers/tailwindcss.d.ts.map +1 -0
  138. package/dist/transformers/tailwindcss.mjs +2 -54
  139. package/dist/transformers/tailwindcss.mjs.map +1 -1
  140. package/dist/transformers/{urlQuery.d.mts → urlQuery.d.ts} +2 -2
  141. package/dist/transformers/urlQuery.d.ts.map +1 -0
  142. package/dist/types/{config.d.mts → config.d.ts} +2 -2
  143. package/dist/types/config.d.ts.map +1 -0
  144. package/dist/types/{index.d.mts → index.d.ts} +1 -1
  145. package/dist/utils/ast/index.d.ts +4 -0
  146. package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
  147. package/dist/utils/ast/parser.d.ts.map +1 -0
  148. package/dist/utils/ast/{serializer.d.mts → serializer.d.ts} +1 -1
  149. package/dist/utils/ast/serializer.d.ts.map +1 -0
  150. package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
  151. package/dist/utils/ast/walker.d.ts.map +1 -0
  152. package/dist/utils/compileTailwindCss.d.ts +16 -0
  153. package/dist/utils/compileTailwindCss.d.ts.map +1 -0
  154. package/dist/utils/compileTailwindCss.mjs +55 -0
  155. package/dist/utils/compileTailwindCss.mjs.map +1 -0
  156. package/dist/utils/{decodeStyleEntities.d.mts → decodeStyleEntities.d.ts} +1 -1
  157. package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
  158. package/dist/utils/{detect.d.mts → detect.d.ts} +1 -1
  159. package/dist/utils/detect.d.ts.map +1 -0
  160. package/dist/utils/{url.d.mts → url.d.ts} +1 -1
  161. package/dist/utils/url.d.ts.map +1 -0
  162. package/package.json +13 -6
  163. package/dist/build.d.mts.map +0 -1
  164. package/dist/components/utils.d.mts.map +0 -1
  165. package/dist/composables/defineConfig.d.mts.map +0 -1
  166. package/dist/composables/renderContext.d.mts.map +0 -1
  167. package/dist/composables/useConfig.d.mts.map +0 -1
  168. package/dist/composables/useDoctype.d.mts.map +0 -1
  169. package/dist/composables/useEvent.d.mts.map +0 -1
  170. package/dist/composables/useFont.d.mts.map +0 -1
  171. package/dist/composables/useOutlookFallback.d.mts.map +0 -1
  172. package/dist/composables/usePlaintext.d.mts.map +0 -1
  173. package/dist/composables/usePreheader.d.mts.map +0 -1
  174. package/dist/config/defaults.d.mts.map +0 -1
  175. package/dist/config/index.d.mts.map +0 -1
  176. package/dist/events/index.d.mts.map +0 -1
  177. package/dist/index.d.mts +0 -34
  178. package/dist/plaintext.d.mts.map +0 -1
  179. package/dist/plugin.d.mts.map +0 -1
  180. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  181. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  182. package/dist/plugins/postcss/quoteFontFamilies.d.mts.map +0 -1
  183. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  184. package/dist/plugins/postcss/resolveProps.d.mts.map +0 -1
  185. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  186. package/dist/prepare.d.mts.map +0 -1
  187. package/dist/render/createRenderer.d.mts.map +0 -1
  188. package/dist/render/index.d.mts +0 -26
  189. package/dist/render/index.d.mts.map +0 -1
  190. package/dist/render/injectFonts.d.mts.map +0 -1
  191. package/dist/render/plugins/codeBlockExtract.d.mts.map +0 -1
  192. package/dist/render/plugins/markdownExtract.d.mts.map +0 -1
  193. package/dist/render/plugins/rawExtract.d.mts.map +0 -1
  194. package/dist/render/plugins/rowSourceLocation.d.mts.map +0 -1
  195. package/dist/serve.d.mts.map +0 -1
  196. package/dist/server/compatibility.d.mts.map +0 -1
  197. package/dist/server/email.d.mts.map +0 -1
  198. package/dist/server/linter.d.mts.map +0 -1
  199. package/dist/server/sfc-utils.d.mts.map +0 -1
  200. package/dist/transformers/addAttributes.d.mts.map +0 -1
  201. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  202. package/dist/transformers/base.d.mts.map +0 -1
  203. package/dist/transformers/columnWidth.d.mts.map +0 -1
  204. package/dist/transformers/entities.d.mts.map +0 -1
  205. package/dist/transformers/filters/defaults.d.mts.map +0 -1
  206. package/dist/transformers/filters/index.d.mts.map +0 -1
  207. package/dist/transformers/format.d.mts.map +0 -1
  208. package/dist/transformers/index.d.mts.map +0 -1
  209. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  210. package/dist/transformers/inlineLink.d.mts.map +0 -1
  211. package/dist/transformers/minify.d.mts.map +0 -1
  212. package/dist/transformers/msoWidthFromClass.d.mts.map +0 -1
  213. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  214. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  215. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  216. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  217. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  218. package/dist/transformers/sixHex.d.mts.map +0 -1
  219. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  220. package/dist/transformers/urlQuery.d.mts.map +0 -1
  221. package/dist/types/config.d.mts.map +0 -1
  222. package/dist/utils/ast/index.d.mts +0 -4
  223. package/dist/utils/ast/parser.d.mts.map +0 -1
  224. package/dist/utils/ast/serializer.d.mts.map +0 -1
  225. package/dist/utils/ast/walker.d.mts.map +0 -1
  226. package/dist/utils/decodeStyleEntities.d.mts.map +0 -1
  227. package/dist/utils/detect.d.mts.map +0 -1
  228. package/dist/utils/url.d.mts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "./types/config.mjs";
1
+ import { MaizzleConfig } from "./types/config.js";
2
2
  //#region src/build.d.ts
3
3
  interface BuildOptions {
4
4
  config?: Partial<MaizzleConfig> | string;
@@ -16,4 +16,4 @@ interface BuildResult {
16
16
  declare function build(options?: BuildOptions): Promise<BuildResult>;
17
17
  //#endregion
18
18
  export { BuildOptions, BuildResult, build };
19
- //# sourceMappingURL=build.d.mts.map
19
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","names":[],"sources":["../src/build.ts"],"mappings":";;UAWiB,YAAA;EACf,MAAA,GAAS,OAAA,CAAQ,aAAA;AAAA;AAAA,UAGF,WAAA;EACf,KAAA;EACA,MAAA,EAAQ,aAAA;AAAA;;;;;;AAFV;iBAWsB,KAAA,CAAM,OAAA,GAAS,YAAA,GAAoB,OAAA,CAAQ,WAAA"}
package/dist/build.mjs CHANGED
@@ -64,7 +64,7 @@ async function build(options = {}) {
64
64
  });
65
65
  const templateConfig = rendered.templateConfig;
66
66
  const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
67
- if (templateConfig.useTransformers !== false) html = await runTransformers(html, templateConfig, absolutePath, doctype);
67
+ if (templateConfig.useTransformers !== false) html = await runTransformers(html, templateConfig, absolutePath, doctype, rendered.tailwindBlocks);
68
68
  html = await events.fireAfterTransform({
69
69
  config,
70
70
  template,
@@ -1 +1 @@
1
- {"version":3,"file":"build.mjs","names":[],"sources":["../src/build.ts"],"sourcesContent":["import { readFileSync, writeFileSync, mkdirSync, cpSync, existsSync, rmSync } from 'node:fs'\nimport { resolve, dirname, basename, relative, join } from 'node:path'\nimport { glob } from 'tinyglobby'\nimport ora from 'ora'\nimport { resolveConfig } from './config/index.ts'\nimport { EventManager } from './events/index.ts'\nimport { runTransformers } from './transformers/index.ts'\nimport { createRenderer } from './render/createRenderer.ts'\nimport { createPlaintext } from './plaintext.ts'\nimport type { MaizzleConfig } from './types/index.ts'\n\nexport interface BuildOptions {\n config?: Partial<MaizzleConfig> | string\n}\n\nexport interface BuildResult {\n files: string[]\n config: MaizzleConfig\n}\n\n/**\n * Build all SFC email templates to HTML files.\n *\n * Creates a single Renderer instance, then loops through each template\n * calling render → transformers → write to disk.\n */\nexport async function build(options: BuildOptions = {}): Promise<BuildResult> {\n const start = Date.now()\n const spinner = ora({ text: 'Building templates...', spinner: 'circleHalves' }).start()\n\n const config = await resolveConfig(options.config)\n\n const events = new EventManager()\n events.registerConfig(config)\n await events.fireBeforeCreate({ config })\n\n const outputPath = resolve(config.output?.path ?? 'dist')\n const outputExtension = config.output?.extension ?? 'html'\n\n const contentPatterns = config.content ?? ['emails/**/*.vue']\n const contentBase = computeContentBase(contentPatterns)\n const templateFiles = await glob(contentPatterns)\n\n if (templateFiles.length === 0) {\n spinner.succeed('No templates found')\n return { files: [], config }\n }\n\n // Clear the output directory before writing fresh output\n if (existsSync(outputPath)) {\n rmSync(outputPath, { recursive: true, force: true })\n }\n\n const renderer = await createRenderer({ markdown: config.markdown, root: config.root, componentDirs: [config.components?.source ?? []].flat(), vite: config.vite })\n const outputFiles: string[] = []\n\n try {\n for (const templatePath of templateFiles) {\n const absolutePath = resolve(templatePath)\n let template = readFileSync(absolutePath, 'utf-8')\n\n template = await events.fireBeforeRender({ config, template })\n\n const rendered = await renderer.render(absolutePath, config)\n\n let html = await events.fireAfterRender({ config, template, html: rendered.html })\n\n // Use the per-template merged config (from defineConfig() in the SFC) so that\n // template-level overrides like css.safe: false are respected by transformers.\n const templateConfig = rendered.templateConfig\n\n const doctype = rendered.doctype ?? templateConfig.doctype ?? '<!DOCTYPE html>'\n\n if (templateConfig.useTransformers !== false) {\n html = await runTransformers(html, templateConfig, absolutePath, doctype)\n }\n\n html = await events.fireAfterTransform({ config, template, html })\n html = `${doctype}\\n${html}`\n\n const outputFilePath = resolveOutputPath(templatePath, outputPath, outputExtension, contentBase)\n mkdirSync(dirname(outputFilePath), { recursive: true })\n writeFileSync(outputFilePath, html)\n outputFiles.push(outputFilePath)\n\n // Generate plaintext version if configured\n const globalPlaintext = templateConfig.plaintext\n const sfcPlaintext = rendered.plaintext\n\n if (globalPlaintext || sfcPlaintext) {\n const stripOptions = typeof globalPlaintext === 'object' ? globalPlaintext : {}\n const plaintext = createPlaintext(html, stripOptions)\n const ptExtension = sfcPlaintext?.extension ?? 'txt'\n\n let ptOutputPath: string\n\n if (sfcPlaintext?.destination) {\n const name = basename(templatePath).replace(/\\.(vue|md)$/, '')\n ptOutputPath = join(resolve(sfcPlaintext.destination), `${name}.${ptExtension}`)\n } else if (typeof globalPlaintext === 'string') {\n ptOutputPath = resolveOutputPath(templatePath, resolve(globalPlaintext), ptExtension, contentBase)\n } else {\n ptOutputPath = resolveOutputPath(templatePath, outputPath, ptExtension, contentBase)\n }\n\n mkdirSync(dirname(ptOutputPath), { recursive: true })\n writeFileSync(ptOutputPath, plaintext)\n }\n\n // Register SFC event handlers that were collected during render\n for (const { name, handler } of rendered.sfcEventHandlers) {\n events.on(name, handler)\n }\n\n events.clearSfcHandlers()\n }\n\n await copyStatic(config, outputPath)\n await events.fireAfterBuild({ files: outputFiles, config })\n } finally {\n await renderer.close()\n }\n\n const duration = ((Date.now() - start) / 1000).toFixed(2)\n const count = outputFiles.length\n spinner.stopAndPersist({\n symbol: '✅',\n text: `Built ${count} template${count !== 1 ? 's' : ''} in ${duration}s`,\n })\n\n return { files: outputFiles, config }\n}\n\n/**\n * Extract the static (non-glob) prefix from content patterns.\n *\n * For example, `['/abs/path/emails/**\\/*.vue']` → `'/abs/path/emails'`\n *\n * This is used to strip the content base from template paths\n * so the output preserves only the subdirectory structure.\n */\nfunction computeContentBase(patterns: string[]): string {\n // Use the first non-negated pattern\n const pattern = patterns.find(p => !p.startsWith('!')) ?? patterns[0]\n\n // Split on first glob character (* { ? [) and take the directory part\n const staticPart = pattern.split(/[*{?[]/)[0]\n\n // Ensure we have a clean directory path (not a partial segment)\n return resolve(staticPart.endsWith('/') ? staticPart : dirname(staticPart))\n}\n\nfunction resolveOutputPath(templatePath: string, outputDir: string, extension: string, contentBase: string): string {\n const name = basename(templatePath).replace(/\\.(vue|md)$/, '')\n const absTemplate = resolve(templatePath)\n const rel = relative(contentBase, dirname(absTemplate))\n\n return join(outputDir, rel, `${name}.${extension}`)\n}\n\nasync function copyStatic(config: MaizzleConfig, outputPath: string): Promise<void> {\n const sources = config.static?.source ?? ['public/**/*.*']\n const destination = config.static?.destination ?? 'public'\n\n const files = await glob(sources)\n\n for (const file of files) {\n const destPath = join(outputPath, destination, relative(dirname(sources[0]).replace(/\\*.*$/, ''), file))\n const destDir = dirname(destPath)\n\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true })\n }\n\n cpSync(file, destPath)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA0BA,eAAsB,MAAM,UAAwB,EAAE,EAAwB;CAC5E,MAAM,QAAQ,KAAK,KAAK;CACxB,MAAM,UAAU,IAAI;EAAE,MAAM;EAAyB,SAAS;EAAgB,CAAC,CAAC,OAAO;CAEvF,MAAM,SAAS,MAAM,cAAc,QAAQ,OAAO;CAElD,MAAM,SAAS,IAAI,cAAc;AACjC,QAAO,eAAe,OAAO;AAC7B,OAAM,OAAO,iBAAiB,EAAE,QAAQ,CAAC;CAEzC,MAAM,aAAa,QAAQ,OAAO,QAAQ,QAAQ,OAAO;CACzD,MAAM,kBAAkB,OAAO,QAAQ,aAAa;CAEpD,MAAM,kBAAkB,OAAO,WAAW,CAAC,kBAAkB;CAC7D,MAAM,cAAc,mBAAmB,gBAAgB;CACvD,MAAM,gBAAgB,MAAM,KAAK,gBAAgB;AAEjD,KAAI,cAAc,WAAW,GAAG;AAC9B,UAAQ,QAAQ,qBAAqB;AACrC,SAAO;GAAE,OAAO,EAAE;GAAE;GAAQ;;AAI9B,KAAI,WAAW,WAAW,CACxB,QAAO,YAAY;EAAE,WAAW;EAAM,OAAO;EAAM,CAAC;CAGtD,MAAM,WAAW,MAAM,eAAe;EAAE,UAAU,OAAO;EAAU,MAAM,OAAO;EAAM,eAAe,CAAC,OAAO,YAAY,UAAU,EAAE,CAAC,CAAC,MAAM;EAAE,MAAM,OAAO;EAAM,CAAC;CACnK,MAAM,cAAwB,EAAE;AAEhC,KAAI;AACF,OAAK,MAAM,gBAAgB,eAAe;GACxC,MAAM,eAAe,QAAQ,aAAa;GAC1C,IAAI,WAAW,aAAa,cAAc,QAAQ;AAElD,cAAW,MAAM,OAAO,iBAAiB;IAAE;IAAQ;IAAU,CAAC;GAE9D,MAAM,WAAW,MAAM,SAAS,OAAO,cAAc,OAAO;GAE5D,IAAI,OAAO,MAAM,OAAO,gBAAgB;IAAE;IAAQ;IAAU,MAAM,SAAS;IAAM,CAAC;GAIlF,MAAM,iBAAiB,SAAS;GAEhC,MAAM,UAAU,SAAS,WAAW,eAAe,WAAW;AAE9D,OAAI,eAAe,oBAAoB,MACrC,QAAO,MAAM,gBAAgB,MAAM,gBAAgB,cAAc,QAAQ;AAG3E,UAAO,MAAM,OAAO,mBAAmB;IAAE;IAAQ;IAAU;IAAM,CAAC;AAClE,UAAO,GAAG,QAAQ,IAAI;GAEtB,MAAM,iBAAiB,kBAAkB,cAAc,YAAY,iBAAiB,YAAY;AAChG,aAAU,QAAQ,eAAe,EAAE,EAAE,WAAW,MAAM,CAAC;AACvD,iBAAc,gBAAgB,KAAK;AACnC,eAAY,KAAK,eAAe;GAGhC,MAAM,kBAAkB,eAAe;GACvC,MAAM,eAAe,SAAS;AAE9B,OAAI,mBAAmB,cAAc;IAEnC,MAAM,YAAY,gBAAgB,MADb,OAAO,oBAAoB,WAAW,kBAAkB,EAAE,CAC1B;IACrD,MAAM,cAAc,cAAc,aAAa;IAE/C,IAAI;AAEJ,QAAI,cAAc,aAAa;KAC7B,MAAM,OAAO,SAAS,aAAa,CAAC,QAAQ,eAAe,GAAG;AAC9D,oBAAe,KAAK,QAAQ,aAAa,YAAY,EAAE,GAAG,KAAK,GAAG,cAAc;eACvE,OAAO,oBAAoB,SACpC,gBAAe,kBAAkB,cAAc,QAAQ,gBAAgB,EAAE,aAAa,YAAY;QAElG,gBAAe,kBAAkB,cAAc,YAAY,aAAa,YAAY;AAGtF,cAAU,QAAQ,aAAa,EAAE,EAAE,WAAW,MAAM,CAAC;AACrD,kBAAc,cAAc,UAAU;;AAIxC,QAAK,MAAM,EAAE,MAAM,aAAa,SAAS,iBACvC,QAAO,GAAG,MAAM,QAAQ;AAG1B,UAAO,kBAAkB;;AAG3B,QAAM,WAAW,QAAQ,WAAW;AACpC,QAAM,OAAO,eAAe;GAAE,OAAO;GAAa;GAAQ,CAAC;WACnD;AACR,QAAM,SAAS,OAAO;;CAGxB,MAAM,aAAa,KAAK,KAAK,GAAG,SAAS,KAAM,QAAQ,EAAE;CACzD,MAAM,QAAQ,YAAY;AAC1B,SAAQ,eAAe;EACrB,QAAQ;EACR,MAAM,SAAS,MAAM,WAAW,UAAU,IAAI,MAAM,GAAG,MAAM,SAAS;EACvE,CAAC;AAEF,QAAO;EAAE,OAAO;EAAa;EAAQ;;;;;;;;;;AAWvC,SAAS,mBAAmB,UAA4B;CAKtD,MAAM,cAHU,SAAS,MAAK,MAAK,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,SAAS,IAGxC,MAAM,SAAS,CAAC;AAG3C,QAAO,QAAQ,WAAW,SAAS,IAAI,GAAG,aAAa,QAAQ,WAAW,CAAC;;AAG7E,SAAS,kBAAkB,cAAsB,WAAmB,WAAmB,aAA6B;CAClH,MAAM,OAAO,SAAS,aAAa,CAAC,QAAQ,eAAe,GAAG;AAI9D,QAAO,KAAK,WAFA,SAAS,aAAa,QADd,QAAQ,aAAa,CACa,CAAC,EAE3B,GAAG,KAAK,GAAG,YAAY;;AAGrD,eAAe,WAAW,QAAuB,YAAmC;CAClF,MAAM,UAAU,OAAO,QAAQ,UAAU,CAAC,gBAAgB;CAC1D,MAAM,cAAc,OAAO,QAAQ,eAAe;CAElD,MAAM,QAAQ,MAAM,KAAK,QAAQ;AAEjC,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,KAAK,YAAY,aAAa,SAAS,QAAQ,QAAQ,GAAG,CAAC,QAAQ,SAAS,GAAG,EAAE,KAAK,CAAC;EACxG,MAAM,UAAU,QAAQ,SAAS;AAEjC,MAAI,CAAC,WAAW,QAAQ,CACtB,WAAU,SAAS,EAAE,WAAW,MAAM,CAAC;AAGzC,SAAO,MAAM,SAAS"}
1
+ {"version":3,"file":"build.mjs","names":[],"sources":["../src/build.ts"],"sourcesContent":["import { readFileSync, writeFileSync, mkdirSync, cpSync, existsSync, rmSync } from 'node:fs'\nimport { resolve, dirname, basename, relative, join } from 'node:path'\nimport { glob } from 'tinyglobby'\nimport ora from 'ora'\nimport { resolveConfig } from './config/index.ts'\nimport { EventManager } from './events/index.ts'\nimport { runTransformers } from './transformers/index.ts'\nimport { createRenderer } from './render/createRenderer.ts'\nimport { createPlaintext } from './plaintext.ts'\nimport type { MaizzleConfig } from './types/index.ts'\n\nexport interface BuildOptions {\n config?: Partial<MaizzleConfig> | string\n}\n\nexport interface BuildResult {\n files: string[]\n config: MaizzleConfig\n}\n\n/**\n * Build all SFC email templates to HTML files.\n *\n * Creates a single Renderer instance, then loops through each template\n * calling render → transformers → write to disk.\n */\nexport async function build(options: BuildOptions = {}): Promise<BuildResult> {\n const start = Date.now()\n const spinner = ora({ text: 'Building templates...', spinner: 'circleHalves' }).start()\n\n const config = await resolveConfig(options.config)\n\n const events = new EventManager()\n events.registerConfig(config)\n await events.fireBeforeCreate({ config })\n\n const outputPath = resolve(config.output?.path ?? 'dist')\n const outputExtension = config.output?.extension ?? 'html'\n\n const contentPatterns = config.content ?? ['emails/**/*.vue']\n const contentBase = computeContentBase(contentPatterns)\n const templateFiles = await glob(contentPatterns)\n\n if (templateFiles.length === 0) {\n spinner.succeed('No templates found')\n return { files: [], config }\n }\n\n // Clear the output directory before writing fresh output\n if (existsSync(outputPath)) {\n rmSync(outputPath, { recursive: true, force: true })\n }\n\n const renderer = await createRenderer({ markdown: config.markdown, root: config.root, componentDirs: [config.components?.source ?? []].flat(), vite: config.vite })\n const outputFiles: string[] = []\n\n try {\n for (const templatePath of templateFiles) {\n const absolutePath = resolve(templatePath)\n let template = readFileSync(absolutePath, 'utf-8')\n\n template = await events.fireBeforeRender({ config, template })\n\n const rendered = await renderer.render(absolutePath, config)\n\n let html = await events.fireAfterRender({ config, template, html: rendered.html })\n\n // Use the per-template merged config (from defineConfig() in the SFC) so that\n // template-level overrides like css.safe: false are respected by transformers.\n const templateConfig = rendered.templateConfig\n\n const doctype = rendered.doctype ?? templateConfig.doctype ?? '<!DOCTYPE html>'\n\n if (templateConfig.useTransformers !== false) {\n html = await runTransformers(html, templateConfig, absolutePath, doctype, rendered.tailwindBlocks)\n }\n\n html = await events.fireAfterTransform({ config, template, html })\n html = `${doctype}\\n${html}`\n\n const outputFilePath = resolveOutputPath(templatePath, outputPath, outputExtension, contentBase)\n mkdirSync(dirname(outputFilePath), { recursive: true })\n writeFileSync(outputFilePath, html)\n outputFiles.push(outputFilePath)\n\n // Generate plaintext version if configured\n const globalPlaintext = templateConfig.plaintext\n const sfcPlaintext = rendered.plaintext\n\n if (globalPlaintext || sfcPlaintext) {\n const stripOptions = typeof globalPlaintext === 'object' ? globalPlaintext : {}\n const plaintext = createPlaintext(html, stripOptions)\n const ptExtension = sfcPlaintext?.extension ?? 'txt'\n\n let ptOutputPath: string\n\n if (sfcPlaintext?.destination) {\n const name = basename(templatePath).replace(/\\.(vue|md)$/, '')\n ptOutputPath = join(resolve(sfcPlaintext.destination), `${name}.${ptExtension}`)\n } else if (typeof globalPlaintext === 'string') {\n ptOutputPath = resolveOutputPath(templatePath, resolve(globalPlaintext), ptExtension, contentBase)\n } else {\n ptOutputPath = resolveOutputPath(templatePath, outputPath, ptExtension, contentBase)\n }\n\n mkdirSync(dirname(ptOutputPath), { recursive: true })\n writeFileSync(ptOutputPath, plaintext)\n }\n\n // Register SFC event handlers that were collected during render\n for (const { name, handler } of rendered.sfcEventHandlers) {\n events.on(name, handler)\n }\n\n events.clearSfcHandlers()\n }\n\n await copyStatic(config, outputPath)\n await events.fireAfterBuild({ files: outputFiles, config })\n } finally {\n await renderer.close()\n }\n\n const duration = ((Date.now() - start) / 1000).toFixed(2)\n const count = outputFiles.length\n spinner.stopAndPersist({\n symbol: '✅',\n text: `Built ${count} template${count !== 1 ? 's' : ''} in ${duration}s`,\n })\n\n return { files: outputFiles, config }\n}\n\n/**\n * Extract the static (non-glob) prefix from content patterns.\n *\n * For example, `['/abs/path/emails/**\\/*.vue']` → `'/abs/path/emails'`\n *\n * This is used to strip the content base from template paths\n * so the output preserves only the subdirectory structure.\n */\nfunction computeContentBase(patterns: string[]): string {\n // Use the first non-negated pattern\n const pattern = patterns.find(p => !p.startsWith('!')) ?? patterns[0]\n\n // Split on first glob character (* { ? [) and take the directory part\n const staticPart = pattern.split(/[*{?[]/)[0]\n\n // Ensure we have a clean directory path (not a partial segment)\n return resolve(staticPart.endsWith('/') ? staticPart : dirname(staticPart))\n}\n\nfunction resolveOutputPath(templatePath: string, outputDir: string, extension: string, contentBase: string): string {\n const name = basename(templatePath).replace(/\\.(vue|md)$/, '')\n const absTemplate = resolve(templatePath)\n const rel = relative(contentBase, dirname(absTemplate))\n\n return join(outputDir, rel, `${name}.${extension}`)\n}\n\nasync function copyStatic(config: MaizzleConfig, outputPath: string): Promise<void> {\n const sources = config.static?.source ?? ['public/**/*.*']\n const destination = config.static?.destination ?? 'public'\n\n const files = await glob(sources)\n\n for (const file of files) {\n const destPath = join(outputPath, destination, relative(dirname(sources[0]).replace(/\\*.*$/, ''), file))\n const destDir = dirname(destPath)\n\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true })\n }\n\n cpSync(file, destPath)\n }\n}\n"],"mappings":"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"}
@@ -149,12 +149,13 @@ const MsoAfter = () => createStaticVNode(
149
149
  )
150
150
 
151
151
  const initialChildren = slots.default?.() ?? []
152
- if (outlookFallback && hasMeaningfulContent(initialChildren) && !hasColumnChild(initialChildren)) {
152
+ if (hasMeaningfulContent(initialChildren) && !hasColumnChild(initialChildren)) {
153
153
  const loc = (attrs['data-maizzle-loc'] as string | undefined) ?? '<unknown location>'
154
154
  if (!warnedLocations.has(loc)) {
155
155
  warnedLocations.add(loc)
156
156
  const display = loc.split('/').pop() ?? loc
157
- console.warn(`[maizzle] <Row> in ${display} has no <Column> inside it. Layout will break in Outlook.`)
157
+ const suffix = outlookFallback ? ' Layout will break in Outlook.' : ''
158
+ console.warn(`[maizzle] <Row> in ${display} has no <Column> inside it.${suffix}`)
158
159
  }
159
160
  }
160
161
  </script>
@@ -0,0 +1,43 @@
1
+ <script lang="ts">
2
+ import { defineComponent, createCommentVNode, inject, h, Fragment, type VNode } from 'vue'
3
+ import { RenderContextKey } from '../composables/renderContext'
4
+
5
+ /**
6
+ * Walk a slot's vnode tree and concatenate its text content.
7
+ * Handles plain text children, arrays, and Comment vnodes.
8
+ * Static text in <template #config>...</template> compiles into
9
+ * text vnodes whose `children` is a string — that's our path.
10
+ */
11
+ function vnodeText(input: unknown): string {
12
+ if (input == null || input === false) return ''
13
+ if (typeof input === 'string') return input
14
+ if (typeof input === 'number') return String(input)
15
+ if (Array.isArray(input)) return input.map(vnodeText).join('')
16
+
17
+ const v = input as VNode
18
+ if (typeof v.children === 'string') return v.children
19
+ if (Array.isArray(v.children)) return vnodeText(v.children)
20
+ return ''
21
+ }
22
+
23
+ export default defineComponent({
24
+ name: 'Tailwind',
25
+ setup(_, { slots }) {
26
+ const ctx = inject(RenderContextKey)!
27
+ if (!ctx.tailwindBlocks) ctx.tailwindBlocks = []
28
+ const id = `tw${ctx.tailwindBlocks.length}`
29
+
30
+ // Extract optional `#config` slot content as raw CSS. Evaluated at
31
+ // setup time; the slot is NOT rendered into the document.
32
+ const css = slots.config ? vnodeText(slots.config()).trim() : undefined
33
+
34
+ ctx.tailwindBlocks.push({ id, css: css || undefined })
35
+
36
+ return () => h(Fragment, null, [
37
+ createCommentVNode(`mz-tw:${id}`),
38
+ slots.default?.(),
39
+ createCommentVNode(`/mz-tw:${id}`),
40
+ ])
41
+ },
42
+ })
43
+ </script>
@@ -25,4 +25,4 @@ declare const outlookFallbackProp: {
25
25
  };
26
26
  //#endregion
27
27
  export { hasHeightInStyle, hasHeightUtility, hasWidthInStyle, hasWidthUtility, nextId, normalizeToPixels, outlookFallbackProp };
28
- //# sourceMappingURL=utils.d.mts.map
28
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/components/utils.ts"],"mappings":";iBAAgB,iBAAA,CAAkB,KAAA;AAAlC;;;;;AAiBA;;;AAjBA,iBAiBgB,MAAA,CAAO,MAAA;AAAA,iBAKP,eAAA,CAAgB,QAAA;AAAA,iBAQhB,eAAA,CAAgB,QAAA;AAAA,iBAIhB,gBAAA,CAAiB,QAAA;AAAA,iBAQjB,gBAAA,CAAiB,QAAA;;;AAZjC;;;;cAsBa,mBAAA;EAAA,eAGH,kBAAA;EAAA"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
2
  //#region src/composables/defineConfig.d.ts
3
3
  /**
4
4
  * Define Maizzle config.
@@ -11,4 +11,4 @@ import { MaizzleConfig } from "../types/config.mjs";
11
11
  declare function defineConfig(data?: Partial<MaizzleConfig>): MaizzleConfig;
12
12
  //#endregion
13
13
  export { defineConfig };
14
- //# sourceMappingURL=defineConfig.d.mts.map
14
+ //# sourceMappingURL=defineConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineConfig.d.ts","names":[],"sources":["../../src/composables/defineConfig.ts"],"mappings":";;;;;AAqBA;;;;;iBAAgB,YAAA,CAAa,IAAA,GAAM,OAAA,CAAQ,aAAA,IAAsB,aAAA"}
@@ -1,6 +1,6 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
2
- import { EventMap, EventName } from "../events/index.mjs";
3
- import { UsePlaintextOptions } from "./usePlaintext.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
+ import { EventMap, EventName } from "../events/index.js";
3
+ import { UsePlaintextOptions } from "./usePlaintext.js";
4
4
  import { InjectionKey } from "vue";
5
5
 
6
6
  //#region src/composables/renderContext.d.ts
@@ -10,6 +10,11 @@ interface FontRegistration {
10
10
  declaration: string;
11
11
  url: string;
12
12
  }
13
+ interface TailwindBlock {
14
+ id: string;
15
+ /** Optional raw CSS from the component's `#config` slot. */
16
+ css?: string;
17
+ }
13
18
  interface RenderContext {
14
19
  doctype?: string;
15
20
  preheader?: {
@@ -24,8 +29,9 @@ interface RenderContext {
24
29
  }>;
25
30
  plaintext?: UsePlaintextOptions;
26
31
  fonts?: FontRegistration[];
32
+ tailwindBlocks?: TailwindBlock[];
27
33
  }
28
34
  declare const RenderContextKey: InjectionKey<RenderContext>;
29
35
  //#endregion
30
- export { FontRegistration, RenderContext, RenderContextKey };
31
- //# sourceMappingURL=renderContext.d.mts.map
36
+ export { FontRegistration, RenderContext, RenderContextKey, TailwindBlock };
37
+ //# sourceMappingURL=renderContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderContext.d.ts","names":[],"sources":["../../src/composables/renderContext.ts"],"mappings":";;;;;;UAKiB,gBAAA;EACf,MAAA;EACA,IAAA;EACA,WAAA;EACA,GAAA;AAAA;AAAA,UAGe,aAAA;EACf,EAAA;EANA;EAQA,GAAA;AAAA;AAAA,UAGe,aAAA;EACf,OAAA;EACA,SAAA;IAAc,IAAA;IAAc,WAAA;IAAqB,QAAA;EAAA;EACjD,SAAA,GAAY,aAAA;EACZ,gBAAA,EAAkB,KAAA;IAAQ,IAAA,EAAM,SAAA;IAAW,OAAA,EAAS,QAAA,CAAS,SAAA;EAAA;EAC7D,SAAA,GAAY,mBAAA;EACZ,KAAA,GAAQ,gBAAA;EACR,cAAA,GAAiB,aAAA;AAAA;AAAA,cAGN,gBAAA,EAAkB,YAAA,CAAa,aAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/composables/renderContext.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { MaizzleConfig } from '../types/index.ts'\nimport type { EventName, EventMap } from '../events/index.ts'\nimport type { UsePlaintextOptions } from './usePlaintext.ts'\n\nexport interface FontRegistration {\n family: string\n slug: string\n declaration: string\n url: string\n}\n\nexport interface RenderContext {\n doctype?: string\n preheader?: { text: string; fillerCount: number; shyCount: number }\n sfcConfig?: MaizzleConfig\n sfcEventHandlers: Array<{ name: EventName; handler: EventMap[EventName] }>\n plaintext?: UsePlaintextOptions\n fonts?: FontRegistration[]\n}\n\nexport const RenderContextKey: InjectionKey<RenderContext> = Symbol('RenderContext')\n"],"mappings":";AAqBA,MAAa,mBAAgD,OAAO,gBAAgB"}
1
+ {"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/composables/renderContext.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { MaizzleConfig } from '../types/index.ts'\nimport type { EventName, EventMap } from '../events/index.ts'\nimport type { UsePlaintextOptions } from './usePlaintext.ts'\n\nexport interface FontRegistration {\n family: string\n slug: string\n declaration: string\n url: string\n}\n\nexport interface TailwindBlock {\n id: string\n /** Optional raw CSS from the component's `#config` slot. */\n css?: string\n}\n\nexport interface RenderContext {\n doctype?: string\n preheader?: { text: string; fillerCount: number; shyCount: number }\n sfcConfig?: MaizzleConfig\n sfcEventHandlers: Array<{ name: EventName; handler: EventMap[EventName] }>\n plaintext?: UsePlaintextOptions\n fonts?: FontRegistration[]\n tailwindBlocks?: TailwindBlock[]\n}\n\nexport const RenderContextKey: InjectionKey<RenderContext> = Symbol('RenderContext')\n"],"mappings":";AA4BA,MAAa,mBAAgD,OAAO,gBAAgB"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
2
  import { InjectionKey } from "vue";
3
3
 
4
4
  //#region src/composables/useConfig.d.ts
@@ -6,4 +6,4 @@ declare const MaizzleConfigKey: InjectionKey<MaizzleConfig>;
6
6
  declare function useConfig(): MaizzleConfig;
7
7
  //#endregion
8
8
  export { MaizzleConfigKey, useConfig };
9
- //# sourceMappingURL=useConfig.d.mts.map
9
+ //# sourceMappingURL=useConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfig.d.ts","names":[],"sources":["../../src/composables/useConfig.ts"],"mappings":";;;;cAIa,gBAAA,EAAkB,YAAA,CAAa,aAAA;AAAA,iBAE5B,SAAA,CAAA,GAAa,aAAA"}
@@ -10,4 +10,4 @@
10
10
  declare function useDoctype(doctype: string): void;
11
11
  //#endregion
12
12
  export { useDoctype };
13
- //# sourceMappingURL=useDoctype.d.mts.map
13
+ //# sourceMappingURL=useDoctype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDoctype.d.ts","names":[],"sources":["../../src/composables/useDoctype.ts"],"mappings":";;AAWA;;;;;;;iBAAgB,UAAA,CAAW,OAAA"}
@@ -1,4 +1,4 @@
1
- import { EventMap, EventName } from "../events/index.mjs";
1
+ import { EventMap, EventName } from "../events/index.js";
2
2
 
3
3
  //#region src/composables/useEvent.d.ts
4
4
  /**
@@ -14,4 +14,4 @@ import { EventMap, EventName } from "../events/index.mjs";
14
14
  declare function useEvent<K extends EventName>(name: K, handler: EventMap[K]): void;
15
15
  //#endregion
16
16
  export { useEvent };
17
- //# sourceMappingURL=useEvent.d.mts.map
17
+ //# sourceMappingURL=useEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEvent.d.ts","names":[],"sources":["../../src/composables/useEvent.ts"],"mappings":";;;;;AAcA;;;;;;;;iBAAgB,QAAA,WAAmB,SAAA,CAAA,CAAW,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,QAAA,CAAS,CAAA"}
@@ -47,4 +47,4 @@ interface UseFontOptions {
47
47
  declare function useFont(options: UseFontOptions): void;
48
48
  //#endregion
49
49
  export { FontProvider, UseFontOptions, useFont };
50
- //# sourceMappingURL=useFont.d.mts.map
50
+ //# sourceMappingURL=useFont.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFont.d.ts","names":[],"sources":["../../src/composables/useFont.ts"],"mappings":";KA8CY,YAAA;AAAA,UAEK,cAAA;EAFO;;;;AAExB;;EAOE,MAAA;EAoBc;EAlBd,QAAA;EAAA;;;;;EAMA,QAAA,GAAW,YAAA;EAYX;;;;AA+CF;EArDE,GAAA;;EAEA,OAAA;EAmD6C;EAjD7C,OAAA;;EAEA,MAAA,GAAS,KAAA;AAAA;;;;;;;;;;;;;;;;iBA+CK,OAAA,CAAQ,OAAA,EAAS,cAAA"}
@@ -18,4 +18,4 @@
18
18
  declare function useOutlookFallback(value?: boolean | null): boolean;
19
19
  //#endregion
20
20
  export { useOutlookFallback };
21
- //# sourceMappingURL=useOutlookFallback.d.mts.map
21
+ //# sourceMappingURL=useOutlookFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOutlookFallback.d.ts","names":[],"sources":["../../src/composables/useOutlookFallback.ts"],"mappings":";;AAoBA;;;;;;;;;;;;;;;iBAAgB,kBAAA,CAAmB,KAAA"}
@@ -16,4 +16,4 @@ interface UsePlaintextOptions {
16
16
  declare function usePlaintext(options?: UsePlaintextOptions): void;
17
17
  //#endregion
18
18
  export { UsePlaintextOptions, usePlaintext };
19
- //# sourceMappingURL=usePlaintext.d.mts.map
19
+ //# sourceMappingURL=usePlaintext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePlaintext.d.ts","names":[],"sources":["../../src/composables/usePlaintext.ts"],"mappings":";UAGiB,mBAAA;EACf,SAAA;EACA,WAAA;AAAA;;;AAaF;;;;;;;;iBAAgB,YAAA,CAAa,OAAA,GAAU,mBAAA"}
@@ -21,4 +21,4 @@ interface UsePreheaderOptions {
21
21
  declare function usePreheader(text: string, options?: UsePreheaderOptions): void;
22
22
  //#endregion
23
23
  export { UsePreheaderOptions, usePreheader };
24
- //# sourceMappingURL=usePreheader.d.mts.map
24
+ //# sourceMappingURL=usePreheader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreheader.d.ts","names":[],"sources":["../../src/composables/usePreheader.ts"],"mappings":";UAGiB,mBAAA;EAAA;EAEf,WAAA;;EAEA,QAAA;AAAA;AAgBF;;;;;;;;;;;;;AAAA,iBAAgB,YAAA,CAAa,IAAA,UAAc,OAAA,GAAU,mBAAA"}
@@ -1,6 +1,6 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
2
  //#region src/config/defaults.d.ts
3
3
  declare const defaults: MaizzleConfig;
4
4
  //#endregion
5
5
  export { defaults };
6
- //# sourceMappingURL=defaults.d.mts.map
6
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","names":[],"sources":["../../src/config/defaults.ts"],"mappings":";;cAEa,QAAA,EAAU,aAAA"}
@@ -1,6 +1,6 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
2
- import { defineConfig } from "../composables/defineConfig.mjs";
3
- import { defaults } from "./defaults.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
+ import { defineConfig } from "../composables/defineConfig.js";
3
+ import { defaults } from "./defaults.js";
4
4
 
5
5
  //#region src/config/index.d.ts
6
6
  /**
@@ -12,4 +12,4 @@ import { defaults } from "./defaults.mjs";
12
12
  declare function resolveConfig(config?: Partial<MaizzleConfig> | string, cwd?: string): Promise<MaizzleConfig>;
13
13
  //#endregion
14
14
  export { defaults, defineConfig, resolveConfig };
15
- //# sourceMappingURL=index.d.mts.map
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/config/index.ts"],"mappings":";;;;;;;;AA8BA;;;iBAAsB,aAAA,CACpB,MAAA,GAAS,OAAA,CAAQ,aAAA,YACjB,GAAA,YACC,OAAA,CAAQ,aAAA"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
2
  //#region src/events/index.d.ts
3
3
  type EventName = 'beforeCreate' | 'beforeRender' | 'afterRender' | 'afterTransform' | 'afterBuild';
4
4
  interface EventMap {
@@ -88,4 +88,4 @@ declare class EventManager {
88
88
  }
89
89
  //#endregion
90
90
  export { EventManager, EventMap, EventName };
91
- //# sourceMappingURL=index.d.mts.map
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/events/index.ts"],"mappings":";;KAEY,SAAA;AAAA,UAEK,QAAA;EACf,YAAA,GAAe,MAAA;IAAU,MAAA,EAAQ,aAAA;EAAA,aAA2B,OAAA;EAC5D,YAAA,GAAe,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;EAAA,sBAAuC,OAAA;EACvF,WAAA,GAAc,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;IAAkB,IAAA;EAAA,sBAAmC,OAAA;EACpG,cAAA,GAAiB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;IAAkB,IAAA;EAAA,sBAAmC,OAAA;EACvG,UAAA,GAAa,MAAA;IAAU,KAAA;IAAiB,MAAA,EAAQ,aAAA;EAAA,aAA2B,OAAA;AAAA;;;;;;;;cAUhE,YAAA;EAAA,QACH,QAAA;EAd+E;;;EAmBvF,cAAA,CAAe,MAAA,EAAQ,aAAA;EAlBwB;;;EAgC/C,EAAA,WAAa,SAAA,CAAA,CAAW,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,QAAA,CAAS,CAAA;EA/BnD;;;EA0CM,gBAAA,CAAiB,MAAA;IAAU,MAAA,EAAQ,aAAA;EAAA,IAAe,OAAA;EA1C+C;;;EAqDjG,gBAAA,CAAiB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;EAAA,IAAqB,OAAA;EApDK;;AAUpF;EA6DQ,eAAA,CAAgB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;IAAkB,IAAA;EAAA,IAAiB,OAAA;EAzChD;;;EA4DpC,kBAAA,CAAmB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA;IAAkB,IAAA;EAAA,IAAiB,OAAA;EAAlD;;;EAmBrC,cAAA,CAAe,MAAA;IAAU,KAAA;IAAiB,MAAA,EAAQ,aAAA;EAAA,IAAe,OAAA;EA7FvE;;;EAwGA,gBAAA,CAAA;EA1FG;;;EAsGH,KAAA,CAAA;AAAA"}
@@ -0,0 +1,34 @@
1
+ import { AttributesConfig, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, UrlConfig, UrlQuery, UrlQueryOptions } from "./types/config.js";
2
+ import { build } from "./build.js";
3
+ import { defineConfig } from "./composables/defineConfig.js";
4
+ import { usePlaintext } from "./composables/usePlaintext.js";
5
+ import { useConfig } from "./composables/useConfig.js";
6
+ import { useDoctype } from "./composables/useDoctype.js";
7
+ import { useEvent } from "./composables/useEvent.js";
8
+ import { useFont } from "./composables/useFont.js";
9
+ import { useOutlookFallback } from "./composables/useOutlookFallback.js";
10
+ import { resolveConfig } from "./config/index.js";
11
+ import { maizzle } from "./plugin.js";
12
+ import { CreateRendererOptions, RenderedTemplate, Renderer, createRenderer } from "./render/createRenderer.js";
13
+ import { RenderResult, render } from "./render/index.js";
14
+ import { serve } from "./serve.js";
15
+ import { PrepareOptions, prepare } from "./prepare.js";
16
+ import { createPlaintext } from "./plaintext.js";
17
+ import { inlineLink } from "./transformers/inlineLink.js";
18
+ import { urlQuery } from "./transformers/urlQuery.js";
19
+ import { base } from "./transformers/base.js";
20
+ import { entities } from "./transformers/entities.js";
21
+ import { safeClassNames } from "./transformers/safeClassNames.js";
22
+ import { attributeToStyle } from "./transformers/attributeToStyle.js";
23
+ import { inlineCSS } from "./transformers/inlineCSS.js";
24
+ import { shorthandCSS } from "./transformers/shorthandCSS.js";
25
+ import { sixHex } from "./transformers/sixHex.js";
26
+ import { removeAttributes } from "./transformers/removeAttributes.js";
27
+ import { addAttributes } from "./transformers/addAttributes.js";
28
+ import { purgeCSS } from "./transformers/purgeCSS.js";
29
+ import { filters } from "./transformers/filters/index.js";
30
+ import { replaceStrings } from "./transformers/replaceStrings.js";
31
+ import { format } from "./transformers/format.js";
32
+ import { minify } from "./transformers/minify.js";
33
+ import { useHead } from "@unhead/vue";
34
+ export { type AttributesConfig, type CreateRendererOptions, type CssConfig, type EntitiesConfig, type FilterFunction, type FiltersConfig, type HtmlConfig, type MaizzleConfig, type PrepareOptions, type RenderResult, type RenderedTemplate, type Renderer, type UrlConfig, type UrlQuery, type UrlQueryOptions, addAttributes, attributeToStyle, base, build, createPlaintext, createRenderer, defineConfig, entities, filters, format, inlineCSS, inlineLink, maizzle, minify, prepare, removeAttributes, purgeCSS as removeUnusedCSS, render, replaceStrings, resolveConfig, safeClassNames, serve, shorthandCSS, sixHex, urlQuery, useConfig, useDoctype, useEvent, useFont, useHead, useOutlookFallback, usePlaintext };
@@ -2,4 +2,4 @@
2
2
  declare function createPlaintext(html: string, options?: Record<string, unknown>): string;
3
3
  //#endregion
4
4
  export { createPlaintext };
5
- //# sourceMappingURL=plaintext.d.mts.map
5
+ //# sourceMappingURL=plaintext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaintext.d.ts","names":[],"sources":["../src/plaintext.ts"],"mappings":";iBAUgB,eAAA,CAAgB,IAAA,UAAc,OAAA,GAAU,MAAA"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "./types/config.mjs";
1
+ import { MaizzleConfig } from "./types/config.js";
2
2
  import { Plugin } from "vite";
3
3
 
4
4
  //#region src/plugin.d.ts
@@ -14,4 +14,4 @@ import { Plugin } from "vite";
14
14
  declare function maizzle(configInput?: Partial<MaizzleConfig>): Plugin[];
15
15
  //#endregion
16
16
  export { maizzle };
17
- //# sourceMappingURL=plugin.d.mts.map
17
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","names":[],"sources":["../src/plugin.ts"],"mappings":";;;;;;;AAaA;;;;;;iBAAgB,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,aAAA,IAAiB,MAAA"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "../../types/config.mjs";
1
+ import { MaizzleConfig } from "../../types/config.js";
2
2
  import postcss from "postcss";
3
3
 
4
4
  //#region src/plugins/postcss/mergeMediaQueries.d.ts
@@ -15,4 +15,4 @@ import postcss from "postcss";
15
15
  declare function mergeMediaQueries(config: MaizzleConfig): postcss.Plugin | null;
16
16
  //#endregion
17
17
  export { mergeMediaQueries };
18
- //# sourceMappingURL=mergeMediaQueries.d.mts.map
18
+ //# sourceMappingURL=mergeMediaQueries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeMediaQueries.d.ts","names":[],"sources":["../../../src/plugins/postcss/mergeMediaQueries.ts"],"mappings":";;;;;;AAcA;;;;;;;;iBAAgB,iBAAA,CAAkB,MAAA,EAAQ,aAAA,GAAgB,OAAA,CAAQ,MAAA"}
@@ -5,4 +5,4 @@ declare const _default: () => Plugin;
5
5
  declare const postcss = true;
6
6
  //#endregion
7
7
  export { _default as default, postcss };
8
- //# sourceMappingURL=pruneVars.d.mts.map
8
+ //# sourceMappingURL=pruneVars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pruneVars.d.ts","names":[],"sources":["../../../src/plugins/postcss/pruneVars.ts"],"mappings":";;;cAKyD,QAAA,QAYtC,MAAA;AAAA,cA2DN,OAAA"}
@@ -10,4 +10,4 @@ declare function quoteFontFamilies(): Plugin;
10
10
  declare const postcss = true;
11
11
  //#endregion
12
12
  export { postcss, quoteFontFamilies };
13
- //# sourceMappingURL=quoteFontFamilies.d.mts.map
13
+ //# sourceMappingURL=quoteFontFamilies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quoteFontFamilies.d.ts","names":[],"sources":["../../../src/plugins/postcss/quoteFontFamilies.ts"],"mappings":";;;;;AA+CA;;;iBAAgB,iBAAA,CAAA,GAAqB,MAAA;AAAA,cA6BxB,OAAA"}
@@ -9,4 +9,4 @@ declare const _default: (options: RemoveDeclarationsOptions) => Plugin;
9
9
  declare const postcss = true;
10
10
  //#endregion
11
11
  export { RemoveDeclarationsOptions, RemoveValue, _default as default, postcss };
12
- //# sourceMappingURL=removeDeclarations.d.mts.map
12
+ //# sourceMappingURL=removeDeclarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeDeclarations.d.ts","names":[],"sources":["../../../src/plugins/postcss/removeDeclarations.ts"],"mappings":";;;KA0BY,WAAA,6BAIR,MAAA;AAAA,UAEa,yBAAA;EACf,MAAA,EAAQ,MAAA,SAAe,WAAA;AAAA;AAAA,cACxB,QAAA,GAQe,OAAA,EAAS,yBAAA,KAA4B,MAAA;AAAA,cAyDxC,OAAA"}
@@ -0,0 +1,16 @@
1
+ import { Plugin } from "postcss";
2
+
3
+ //#region src/plugins/postcss/resolveMaizzleImports.d.ts
4
+ /**
5
+ * Rewrite `@import "@maizzle/tailwindcss"` (and subpaths like
6
+ * `@maizzle/tailwindcss/mso`) to absolute file paths so postcss/Tailwind
7
+ * can resolve them regardless of where the user's template lives or how
8
+ * their package manager hoists dependencies.
9
+ *
10
+ * Resolution order: prefer the user's project copy (so explicit installs
11
+ * win), then fall back to the copy bundled with the framework.
12
+ */
13
+ declare function resolveMaizzleImports(userRoot?: string): Plugin;
14
+ //#endregion
15
+ export { resolveMaizzleImports };
16
+ //# sourceMappingURL=resolveMaizzleImports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveMaizzleImports.d.ts","names":[],"sources":["../../../src/plugins/postcss/resolveMaizzleImports.ts"],"mappings":";;;;;AAiBA;;;;;;;iBAAgB,qBAAA,CAAsB,QAAA,YAAmC,MAAA"}
@@ -0,0 +1,40 @@
1
+ import { createRequire } from "node:module";
2
+
3
+ //#region src/plugins/postcss/resolveMaizzleImports.ts
4
+ const SUBPATH_RE = new RegExp(`^@maizzle/tailwindcss(?:/|$)`);
5
+ const requireFromFramework = createRequire(import.meta.url);
6
+ /**
7
+ * Rewrite `@import "@maizzle/tailwindcss"` (and subpaths like
8
+ * `@maizzle/tailwindcss/mso`) to absolute file paths so postcss/Tailwind
9
+ * can resolve them regardless of where the user's template lives or how
10
+ * their package manager hoists dependencies.
11
+ *
12
+ * Resolution order: prefer the user's project copy (so explicit installs
13
+ * win), then fall back to the copy bundled with the framework.
14
+ */
15
+ function resolveMaizzleImports(userRoot = process.cwd()) {
16
+ const requireFromUser = createRequire(`${userRoot}/_maizzle.js`);
17
+ function resolve(spec) {
18
+ try {
19
+ return requireFromUser.resolve(spec);
20
+ } catch {}
21
+ try {
22
+ return requireFromFramework.resolve(spec);
23
+ } catch {}
24
+ }
25
+ return {
26
+ postcssPlugin: "maizzle:resolve-tw-imports",
27
+ AtRule: { import(rule) {
28
+ const m = rule.params.match(/^\s*["']([^"']+)["']/);
29
+ if (!m) return;
30
+ const spec = m[1];
31
+ if (!SUBPATH_RE.test(spec)) return;
32
+ const abs = resolve(spec);
33
+ if (abs) rule.params = rule.params.replace(m[0], `"${abs}"`);
34
+ } }
35
+ };
36
+ }
37
+
38
+ //#endregion
39
+ export { resolveMaizzleImports };
40
+ //# sourceMappingURL=resolveMaizzleImports.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveMaizzleImports.mjs","names":[],"sources":["../../../src/plugins/postcss/resolveMaizzleImports.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport type { Plugin } from 'postcss'\n\nconst PKG = '@maizzle/tailwindcss'\nconst SUBPATH_RE = new RegExp(`^${PKG}(?:/|$)`)\n\nconst requireFromFramework = createRequire(import.meta.url)\n\n/**\n * Rewrite `@import \"@maizzle/tailwindcss\"` (and subpaths like\n * `@maizzle/tailwindcss/mso`) to absolute file paths so postcss/Tailwind\n * can resolve them regardless of where the user's template lives or how\n * their package manager hoists dependencies.\n *\n * Resolution order: prefer the user's project copy (so explicit installs\n * win), then fall back to the copy bundled with the framework.\n */\nexport function resolveMaizzleImports(userRoot: string = process.cwd()): Plugin {\n const requireFromUser = createRequire(`${userRoot}/_maizzle.js`)\n\n function resolve(spec: string): string | undefined {\n try { return requireFromUser.resolve(spec) } catch {}\n try { return requireFromFramework.resolve(spec) } catch {}\n return undefined\n }\n\n return {\n postcssPlugin: 'maizzle:resolve-tw-imports',\n AtRule: {\n import(rule) {\n const m = rule.params.match(/^\\s*[\"']([^\"']+)[\"']/)\n if (!m) return\n const spec = m[1]\n if (!SUBPATH_RE.test(spec)) return\n\n const abs = resolve(spec)\n if (abs) rule.params = rule.params.replace(m[0], `\"${abs}\"`)\n },\n },\n }\n}\n"],"mappings":";;;AAIA,MAAM,aAAa,IAAI,OAAO,+BAAiB;AAE/C,MAAM,uBAAuB,cAAc,OAAO,KAAK,IAAI;;;;;;;;;;AAW3D,SAAgB,sBAAsB,WAAmB,QAAQ,KAAK,EAAU;CAC9E,MAAM,kBAAkB,cAAc,GAAG,SAAS,cAAc;CAEhE,SAAS,QAAQ,MAAkC;AACjD,MAAI;AAAE,UAAO,gBAAgB,QAAQ,KAAK;UAAS;AACnD,MAAI;AAAE,UAAO,qBAAqB,QAAQ,KAAK;UAAS;;AAI1D,QAAO;EACL,eAAe;EACf,QAAQ,EACN,OAAO,MAAM;GACX,MAAM,IAAI,KAAK,OAAO,MAAM,uBAAuB;AACnD,OAAI,CAAC,EAAG;GACR,MAAM,OAAO,EAAE;AACf,OAAI,CAAC,WAAW,KAAK,KAAK,CAAE;GAE5B,MAAM,MAAM,QAAQ,KAAK;AACzB,OAAI,IAAK,MAAK,SAAS,KAAK,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,GAAG;KAE/D;EACF"}
@@ -5,4 +5,4 @@ declare const _default: () => Plugin;
5
5
  declare const postcss = true;
6
6
  //#endregion
7
7
  export { _default as default, postcss };
8
- //# sourceMappingURL=resolveProps.d.mts.map
8
+ //# sourceMappingURL=resolveProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveProps.d.ts","names":[],"sources":["../../../src/plugins/postcss/resolveProps.ts"],"mappings":";;;cAiByD,QAAA,QA6FtC,MAAA;AAAA,cA8IN,OAAA"}
@@ -1,4 +1,4 @@
1
- import { MaizzleConfig } from "../../types/config.mjs";
1
+ import { MaizzleConfig } from "../../types/config.js";
2
2
  import postcss from "postcss";
3
3
 
4
4
  //#region src/plugins/postcss/tailwindCleanup.d.ts
@@ -15,4 +15,4 @@ import postcss from "postcss";
15
15
  declare function tailwindCleanup(config: MaizzleConfig): postcss.Plugin[];
16
16
  //#endregion
17
17
  export { tailwindCleanup };
18
- //# sourceMappingURL=tailwindCleanup.d.mts.map
18
+ //# sourceMappingURL=tailwindCleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwindCleanup.d.ts","names":[],"sources":["../../../src/plugins/postcss/tailwindCleanup.ts"],"mappings":";;;;;;AA0CA;;;;;;;;iBAAgB,eAAA,CAAgB,MAAA,EAAQ,aAAA,GAAgB,OAAA,CAAQ,MAAA"}
@@ -14,4 +14,4 @@ interface PrepareOptions {
14
14
  declare function prepare(options?: PrepareOptions): Promise<void>;
15
15
  //#endregion
16
16
  export { PrepareOptions, prepare };
17
- //# sourceMappingURL=prepare.d.mts.map
17
+ //# sourceMappingURL=prepare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare.d.ts","names":[],"sources":["../src/prepare.ts"],"mappings":";UAMiB,cAAA;EAAA;EAEf,MAAA;AAAA;;;AAWF;;;;;;iBAAsB,OAAA,CAAQ,OAAA,GAAS,cAAA,GAAsB,OAAA"}
@@ -1,5 +1,5 @@
1
- import { MaizzleConfig, MarkdownConfig } from "../types/config.mjs";
2
- import { RenderContext } from "../composables/renderContext.mjs";
1
+ import { MaizzleConfig, MarkdownConfig } from "../types/config.js";
2
+ import { RenderContext } from "../composables/renderContext.js";
3
3
  import { Component } from "vue";
4
4
  import { InlineConfig } from "vite";
5
5
 
@@ -10,6 +10,7 @@ interface RenderedTemplate {
10
10
  templateConfig: MaizzleConfig;
11
11
  sfcEventHandlers: RenderContext['sfcEventHandlers'];
12
12
  plaintext?: RenderContext['plaintext'];
13
+ tailwindBlocks?: RenderContext['tailwindBlocks'];
13
14
  }
14
15
  interface Renderer {
15
16
  render(input: string | Component, config: MaizzleConfig): Promise<RenderedTemplate>;
@@ -38,4 +39,4 @@ interface CreateRendererOptions {
38
39
  declare function createRenderer(options?: CreateRendererOptions): Promise<Renderer>;
39
40
  //#endregion
40
41
  export { CreateRendererOptions, RenderedTemplate, Renderer, createRenderer };
41
- //# sourceMappingURL=createRenderer.d.mts.map
42
+ //# sourceMappingURL=createRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRenderer.d.ts","names":[],"sources":["../../src/render/createRenderer.ts"],"mappings":";;;;;;UAgCiB,gBAAA;EACf,IAAA;EACA,OAAA;EACA,cAAA,EAAgB,aAAA;EAChB,gBAAA,EAAkB,aAAA;EAClB,SAAA,GAAY,aAAA;EACZ,cAAA,GAAiB,aAAA;AAAA;AAAA,UAGF,QAAA;EACf,MAAA,CAAO,KAAA,WAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,GAAgB,OAAA,CAAQ,gBAAA;EAClE,UAAA,CAAW,QAAA,WAAmB,OAAA;EAC9B,aAAA,IAAiB,OAAA;EACjB,KAAA,IAAS,OAAA;AAAA;AAAA,UAGM,qBAAA;EAbC;EAehB,GAAA;EAdkB;EAgBlB,QAAA,GAAW,cAAA;EAfC;EAiBZ,IAAA;EAhBiB;EAkBjB,aAAA;EAlB8B;EAoB9B,IAAA,GAAO,YAAA;AAAA;;;;;;;iBASa,cAAA,CACpB,OAAA,GAAS,qBAAA,GACR,OAAA,CAAQ,QAAA"}