@maizzle/framework 6.0.0-rc.9 → 6.0.1

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 (624) hide show
  1. package/README.md +3 -3
  2. package/bin/maizzle.mjs +1 -1
  3. package/dist/build.d.ts +38 -0
  4. package/dist/build.d.ts.map +1 -0
  5. package/dist/build.js +234 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/components/Body.vue +32 -3
  8. package/dist/components/Button.vue +91 -62
  9. package/dist/components/CodeBlock.vue +6 -4
  10. package/dist/components/CodeInline.vue +77 -6
  11. package/dist/components/Column.vue +67 -31
  12. package/dist/components/Container.vue +73 -12
  13. package/dist/components/Font.vue +96 -0
  14. package/dist/components/Head.vue +1 -1
  15. package/dist/components/Heading.vue +1 -1
  16. package/dist/components/Hr.vue +33 -0
  17. package/dist/components/Html.vue +36 -3
  18. package/dist/components/Img.vue +332 -0
  19. package/dist/components/Layout.vue +73 -21
  20. package/dist/components/Link.vue +1 -1
  21. package/dist/components/Markdown.vue +51 -24
  22. package/dist/components/MarkdownLayout.vue +39 -0
  23. package/dist/components/NotPlaintext.vue +14 -0
  24. package/dist/components/Outlook.vue +38 -11
  25. package/dist/components/OutlookBg.vue +241 -0
  26. package/dist/components/Plaintext.vue +14 -0
  27. package/dist/components/Preheader.vue +35 -10
  28. package/dist/components/QrCode.vue +157 -0
  29. package/dist/components/Raw.vue +28 -0
  30. package/dist/components/Row.vue +115 -22
  31. package/dist/components/Section.vue +65 -26
  32. package/dist/components/Spacer.vue +35 -29
  33. package/dist/components/Tailwind.vue +45 -0
  34. package/dist/components/Text.vue +3 -3
  35. package/dist/components/Vml.vue +207 -94
  36. package/dist/components/utils.d.ts +53 -0
  37. package/dist/components/utils.d.ts.map +1 -0
  38. package/dist/components/utils.js +80 -0
  39. package/dist/components/utils.js.map +1 -0
  40. package/dist/components/utils.ts +102 -0
  41. package/dist/composables/defineConfig.d.ts +13 -0
  42. package/dist/composables/defineConfig.d.ts.map +1 -0
  43. package/dist/composables/{defineConfig.mjs → defineConfig.js} +7 -9
  44. package/dist/composables/defineConfig.js.map +1 -0
  45. package/dist/composables/renderContext.d.ts +37 -0
  46. package/dist/composables/renderContext.d.ts.map +1 -0
  47. package/dist/composables/renderContext.js +6 -0
  48. package/dist/composables/renderContext.js.map +1 -0
  49. package/dist/composables/useBaseUrl.d.ts +19 -0
  50. package/dist/composables/useBaseUrl.d.ts.map +1 -0
  51. package/dist/composables/useBaseUrl.js +26 -0
  52. package/dist/composables/useBaseUrl.js.map +1 -0
  53. package/dist/composables/useConfig.d.ts +16 -0
  54. package/dist/composables/useConfig.d.ts.map +1 -0
  55. package/dist/composables/useConfig.js +19 -0
  56. package/dist/composables/useConfig.js.map +1 -0
  57. package/dist/composables/useCurrentTemplate.d.ts +31 -0
  58. package/dist/composables/useCurrentTemplate.d.ts.map +1 -0
  59. package/dist/composables/useCurrentTemplate.js +42 -0
  60. package/dist/composables/useCurrentTemplate.js.map +1 -0
  61. package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
  62. package/dist/composables/useDoctype.d.ts.map +1 -0
  63. package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
  64. package/dist/composables/useDoctype.js.map +1 -0
  65. package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +3 -3
  66. package/dist/composables/useEvent.d.ts.map +1 -0
  67. package/dist/composables/{useEvent.mjs → useEvent.js} +4 -5
  68. package/dist/composables/useEvent.js.map +1 -0
  69. package/dist/composables/useFont.d.ts +50 -0
  70. package/dist/composables/useFont.d.ts.map +1 -0
  71. package/dist/composables/useFont.js +92 -0
  72. package/dist/composables/useFont.js.map +1 -0
  73. package/dist/composables/useOutlookFallback.d.ts +21 -0
  74. package/dist/composables/useOutlookFallback.d.ts.map +1 -0
  75. package/dist/composables/useOutlookFallback.js +29 -0
  76. package/dist/composables/useOutlookFallback.js.map +1 -0
  77. package/dist/composables/useOutputPath.d.ts +17 -0
  78. package/dist/composables/useOutputPath.d.ts.map +1 -0
  79. package/dist/composables/useOutputPath.js +23 -0
  80. package/dist/composables/useOutputPath.js.map +1 -0
  81. package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
  82. package/dist/composables/usePlaintext.d.ts.map +1 -0
  83. package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
  84. package/dist/composables/usePlaintext.js.map +1 -0
  85. package/dist/composables/usePreheader.d.ts +25 -0
  86. package/dist/composables/usePreheader.d.ts.map +1 -0
  87. package/dist/composables/usePreheader.js +28 -0
  88. package/dist/composables/usePreheader.js.map +1 -0
  89. package/dist/composables/useTransformers.d.ts +34 -0
  90. package/dist/composables/useTransformers.d.ts.map +1 -0
  91. package/dist/composables/useTransformers.js +48 -0
  92. package/dist/composables/useTransformers.js.map +1 -0
  93. package/dist/composables/useUrlQuery.d.ts +19 -0
  94. package/dist/composables/useUrlQuery.d.ts.map +1 -0
  95. package/dist/composables/useUrlQuery.js +26 -0
  96. package/dist/composables/useUrlQuery.js.map +1 -0
  97. package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
  98. package/dist/config/defaults.d.ts.map +1 -0
  99. package/dist/config/{defaults.mjs → defaults.js} +10 -6
  100. package/dist/config/defaults.js.map +1 -0
  101. package/dist/config/index.d.ts +33 -0
  102. package/dist/config/index.d.ts.map +1 -0
  103. package/dist/config/index.js +136 -0
  104. package/dist/config/index.js.map +1 -0
  105. package/dist/events/{index.d.mts → index.d.ts} +35 -12
  106. package/dist/events/index.d.ts.map +1 -0
  107. package/dist/events/{index.mjs → index.js} +31 -13
  108. package/dist/events/index.js.map +1 -0
  109. package/dist/index.d.ts +41 -0
  110. package/dist/index.js +40 -0
  111. package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
  112. package/dist/plaintext.d.ts.map +1 -0
  113. package/dist/{plaintext.mjs → plaintext.js} +4 -5
  114. package/dist/plaintext.js.map +1 -0
  115. package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
  116. package/dist/plugin.d.ts.map +1 -0
  117. package/dist/{plugin.mjs → plugin.js} +8 -9
  118. package/dist/plugin.js.map +1 -0
  119. package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
  120. package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
  121. package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
  122. package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
  123. package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
  124. package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
  125. package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
  126. package/dist/plugins/postcss/pruneVars.js.map +1 -0
  127. package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
  128. package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
  129. package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
  130. package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
  131. package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
  132. package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
  133. package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
  134. package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
  135. package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
  136. package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
  137. package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
  138. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
  139. package/dist/plugins/postcss/resolveProps.d.ts +8 -0
  140. package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
  141. package/dist/plugins/postcss/resolveProps.js +155 -0
  142. package/dist/plugins/postcss/resolveProps.js.map +1 -0
  143. package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
  144. package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
  145. package/dist/plugins/postcss/{tailwindCleanup.mjs → tailwindCleanup.js} +5 -3
  146. package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
  147. package/dist/prepare.d.ts +17 -0
  148. package/dist/prepare.d.ts.map +1 -0
  149. package/dist/prepare.js +44 -0
  150. package/dist/prepare.js.map +1 -0
  151. package/dist/render/active.d.ts +8 -0
  152. package/dist/render/active.d.ts.map +1 -0
  153. package/dist/render/active.js +12 -0
  154. package/dist/render/active.js.map +1 -0
  155. package/dist/render/buildTemplate.d.ts +49 -0
  156. package/dist/render/buildTemplate.d.ts.map +1 -0
  157. package/dist/render/buildTemplate.js +141 -0
  158. package/dist/render/buildTemplate.js.map +1 -0
  159. package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +14 -6
  160. package/dist/render/createRenderer.d.ts.map +1 -0
  161. package/dist/render/createRenderer.js +468 -0
  162. package/dist/render/createRenderer.js.map +1 -0
  163. package/dist/render/index.d.ts +18 -0
  164. package/dist/render/index.d.ts.map +1 -0
  165. package/dist/render/index.js +59 -0
  166. package/dist/render/index.js.map +1 -0
  167. package/dist/render/injectFonts.d.ts +15 -0
  168. package/dist/render/injectFonts.d.ts.map +1 -0
  169. package/dist/render/injectFonts.js +45 -0
  170. package/dist/render/injectFonts.js.map +1 -0
  171. package/dist/render/parallel/buildWorker.d.ts +31 -0
  172. package/dist/render/parallel/buildWorker.d.ts.map +1 -0
  173. package/dist/render/parallel/buildWorker.js +66 -0
  174. package/dist/render/parallel/buildWorker.js.map +1 -0
  175. package/dist/render/parallel/worker.mjs +28 -0
  176. package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
  177. package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
  178. package/dist/render/plugins/codeBlockExtract.js +38 -0
  179. package/dist/render/plugins/codeBlockExtract.js.map +1 -0
  180. package/dist/render/plugins/markdownExtract.d.ts +12 -0
  181. package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
  182. package/dist/render/plugins/markdownExtract.js +49 -0
  183. package/dist/render/plugins/markdownExtract.js.map +1 -0
  184. package/dist/render/plugins/rawExtract.d.ts +14 -0
  185. package/dist/render/plugins/rawExtract.d.ts.map +1 -0
  186. package/dist/render/plugins/rawExtract.js +34 -0
  187. package/dist/render/plugins/rawExtract.js.map +1 -0
  188. package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
  189. package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
  190. package/dist/render/plugins/rowSourceLocation.js +45 -0
  191. package/dist/render/plugins/rowSourceLocation.js.map +1 -0
  192. package/dist/{serve.d.mts → serve.d.ts} +5 -3
  193. package/dist/serve.d.ts.map +1 -0
  194. package/dist/{serve.mjs → serve.js} +248 -119
  195. package/dist/serve.js.map +1 -0
  196. package/dist/server/compatibility.d.ts +59 -0
  197. package/dist/server/compatibility.d.ts.map +1 -0
  198. package/dist/server/compatibility.js +959 -0
  199. package/dist/server/compatibility.js.map +1 -0
  200. package/dist/server/{email.d.mts → email.d.ts} +2 -2
  201. package/dist/server/email.d.ts.map +1 -0
  202. package/dist/server/{email.mjs → email.js} +2 -3
  203. package/dist/server/email.js.map +1 -0
  204. package/dist/server/linter.d.ts +20 -0
  205. package/dist/server/linter.d.ts.map +1 -0
  206. package/dist/server/linter.js +345 -0
  207. package/dist/server/linter.js.map +1 -0
  208. package/dist/server/sfc-utils.d.ts +21 -0
  209. package/dist/server/sfc-utils.d.ts.map +1 -0
  210. package/dist/server/sfc-utils.js +198 -0
  211. package/dist/server/sfc-utils.js.map +1 -0
  212. package/dist/server/ui/.vite/deps/@lucide_vue.js +44967 -0
  213. package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -0
  214. package/dist/server/ui/.vite/deps/@vueuse_core.js +8155 -0
  215. package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -0
  216. package/dist/server/ui/.vite/deps/@vueuse_shared.js +1859 -0
  217. package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -0
  218. package/dist/server/ui/.vite/deps/_metadata.json +78 -0
  219. package/dist/server/ui/.vite/deps/chunk-EAsCxrDo.js +14 -0
  220. package/dist/server/ui/.vite/deps/class-variance-authority.js +57 -0
  221. package/dist/server/ui/.vite/deps/class-variance-authority.js.map +1 -0
  222. package/dist/server/ui/.vite/deps/clsx.js +18 -0
  223. package/dist/server/ui/.vite/deps/clsx.js.map +1 -0
  224. package/dist/server/ui/.vite/deps/culori.js +4312 -0
  225. package/dist/server/ui/.vite/deps/culori.js.map +1 -0
  226. package/dist/server/ui/.vite/deps/package.json +3 -0
  227. package/dist/server/ui/.vite/deps/reka-ui.js +44464 -0
  228. package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -0
  229. package/dist/server/ui/.vite/deps/tailwind-merge.js +3458 -0
  230. package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -0
  231. package/dist/server/ui/.vite/deps/vue-router.js +6383 -0
  232. package/dist/server/ui/.vite/deps/vue-router.js.map +1 -0
  233. package/dist/server/ui/.vite/deps/vue.js +2 -0
  234. package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js +8800 -0
  235. package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js.map +1 -0
  236. package/dist/server/ui/App.vue +106 -66
  237. package/dist/server/ui/components/SidebarClose.vue +12 -0
  238. package/dist/server/ui/components/ui/checkbox/Checkbox.vue +1 -1
  239. package/dist/server/ui/components/ui/command/Command.vue +5 -1
  240. package/dist/server/ui/components/ui/command/CommandInput.vue +2 -2
  241. package/dist/server/ui/components/ui/dialog/DialogContent.vue +1 -1
  242. package/dist/server/ui/components/ui/dialog/DialogScrollContent.vue +1 -1
  243. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -1
  244. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -1
  245. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -1
  246. package/dist/server/ui/components/ui/input/Input.vue +1 -1
  247. package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
  248. package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +2 -2
  249. package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +1 -1
  250. package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +1 -1
  251. package/dist/server/ui/lib/emulated-dark-mode.ts +146 -0
  252. package/dist/server/ui/main.css +25 -0
  253. package/dist/server/ui/pages/Home.vue +1 -1
  254. package/dist/server/ui/pages/Preview.vue +377 -186
  255. package/dist/server/ui/vite-env.d.ts +1 -0
  256. package/dist/tests/render/_helpers.d.ts +6 -0
  257. package/dist/tests/render/_helpers.d.ts.map +1 -0
  258. package/dist/tests/render/_helpers.js +16 -0
  259. package/dist/tests/render/_helpers.js.map +1 -0
  260. package/dist/transformers/addAttributes.d.ts +42 -0
  261. package/dist/transformers/addAttributes.d.ts.map +1 -0
  262. package/dist/transformers/{addAttributes.mjs → addAttributes.js} +40 -24
  263. package/dist/transformers/addAttributes.js.map +1 -0
  264. package/dist/transformers/attributeToStyle.d.ts +38 -0
  265. package/dist/transformers/attributeToStyle.d.ts.map +1 -0
  266. package/dist/transformers/attributeToStyle.js +94 -0
  267. package/dist/transformers/attributeToStyle.js.map +1 -0
  268. package/dist/transformers/base.d.ts +71 -0
  269. package/dist/transformers/base.d.ts.map +1 -0
  270. package/dist/transformers/{base.mjs → base.js} +65 -40
  271. package/dist/transformers/base.js.map +1 -0
  272. package/dist/transformers/columnWidth.d.ts +31 -0
  273. package/dist/transformers/columnWidth.d.ts.map +1 -0
  274. package/dist/transformers/columnWidth.js +527 -0
  275. package/dist/transformers/columnWidth.js.map +1 -0
  276. package/dist/transformers/entities.d.ts +37 -0
  277. package/dist/transformers/entities.d.ts.map +1 -0
  278. package/dist/transformers/entities.js +74 -0
  279. package/dist/transformers/entities.js.map +1 -0
  280. package/dist/transformers/filters/{defaults.d.mts → defaults.d.ts} +1 -1
  281. package/dist/transformers/filters/defaults.d.ts.map +1 -0
  282. package/dist/transformers/filters/{defaults.mjs → defaults.js} +2 -2
  283. package/dist/transformers/filters/defaults.js.map +1 -0
  284. package/dist/transformers/filters/index.d.ts +43 -0
  285. package/dist/transformers/filters/index.d.ts.map +1 -0
  286. package/dist/transformers/filters/index.js +89 -0
  287. package/dist/transformers/filters/index.js.map +1 -0
  288. package/dist/transformers/format.d.ts +22 -0
  289. package/dist/transformers/format.d.ts.map +1 -0
  290. package/dist/transformers/format.js +30 -0
  291. package/dist/transformers/format.js.map +1 -0
  292. package/dist/transformers/imgWidth.d.ts +20 -0
  293. package/dist/transformers/imgWidth.d.ts.map +1 -0
  294. package/dist/transformers/imgWidth.js +76 -0
  295. package/dist/transformers/imgWidth.js.map +1 -0
  296. package/dist/transformers/{index.d.mts → index.d.ts} +4 -3
  297. package/dist/transformers/index.d.ts.map +1 -0
  298. package/dist/transformers/index.js +163 -0
  299. package/dist/transformers/index.js.map +1 -0
  300. package/dist/transformers/inlineCss.d.ts +85 -0
  301. package/dist/transformers/inlineCss.d.ts.map +1 -0
  302. package/dist/transformers/inlineCss.js +112 -0
  303. package/dist/transformers/inlineCss.js.map +1 -0
  304. package/dist/transformers/inlineLink.d.ts +35 -0
  305. package/dist/transformers/inlineLink.d.ts.map +1 -0
  306. package/dist/transformers/{inlineLink.mjs → inlineLink.js} +35 -11
  307. package/dist/transformers/inlineLink.js.map +1 -0
  308. package/dist/transformers/minify.d.ts +21 -0
  309. package/dist/transformers/minify.d.ts.map +1 -0
  310. package/dist/transformers/minify.js +25 -0
  311. package/dist/transformers/minify.js.map +1 -0
  312. package/dist/transformers/minifyCodeInline.d.ts +29 -0
  313. package/dist/transformers/minifyCodeInline.d.ts.map +1 -0
  314. package/dist/transformers/minifyCodeInline.js +36 -0
  315. package/dist/transformers/minifyCodeInline.js.map +1 -0
  316. package/dist/transformers/msoPlaceholders.d.ts +33 -0
  317. package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
  318. package/dist/transformers/msoPlaceholders.js +114 -0
  319. package/dist/transformers/msoPlaceholders.js.map +1 -0
  320. package/dist/transformers/purgeCss.d.ts +43 -0
  321. package/dist/transformers/purgeCss.d.ts.map +1 -0
  322. package/dist/transformers/purgeCss.js +207 -0
  323. package/dist/transformers/purgeCss.js.map +1 -0
  324. package/dist/transformers/removeAttributes.d.ts +54 -0
  325. package/dist/transformers/removeAttributes.d.ts.map +1 -0
  326. package/dist/transformers/removeAttributes.js +72 -0
  327. package/dist/transformers/removeAttributes.js.map +1 -0
  328. package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
  329. package/dist/transformers/replaceStrings.d.ts.map +1 -0
  330. package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
  331. package/dist/transformers/replaceStrings.js.map +1 -0
  332. package/dist/transformers/safeSelectors.d.ts +37 -0
  333. package/dist/transformers/safeSelectors.d.ts.map +1 -0
  334. package/dist/transformers/{safeClassNames.mjs → safeSelectors.js} +40 -10
  335. package/dist/transformers/safeSelectors.js.map +1 -0
  336. package/dist/transformers/shorthandCss.d.ts +47 -0
  337. package/dist/transformers/shorthandCss.d.ts.map +1 -0
  338. package/dist/transformers/shorthandCss.js +92 -0
  339. package/dist/transformers/shorthandCss.js.map +1 -0
  340. package/dist/transformers/sixHex.d.ts +25 -0
  341. package/dist/transformers/sixHex.d.ts.map +1 -0
  342. package/dist/transformers/sixHex.js +42 -0
  343. package/dist/transformers/sixHex.js.map +1 -0
  344. package/dist/transformers/tailwindComponent.d.ts +16 -0
  345. package/dist/transformers/tailwindComponent.d.ts.map +1 -0
  346. package/dist/transformers/tailwindComponent.js +101 -0
  347. package/dist/transformers/tailwindComponent.js.map +1 -0
  348. package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +2 -2
  349. package/dist/transformers/tailwindcss.d.ts.map +1 -0
  350. package/dist/transformers/{tailwindcss.mjs → tailwindcss.js} +33 -74
  351. package/dist/transformers/tailwindcss.js.map +1 -0
  352. package/dist/transformers/urlQuery.d.ts +36 -0
  353. package/dist/transformers/urlQuery.d.ts.map +1 -0
  354. package/dist/transformers/urlQuery.js +77 -0
  355. package/dist/transformers/urlQuery.js.map +1 -0
  356. package/dist/types/{config.d.mts → config.d.ts} +231 -46
  357. package/dist/types/config.d.ts.map +1 -0
  358. package/dist/types/config.js +1 -0
  359. package/dist/types/index.d.ts +2 -0
  360. package/dist/types/index.js +1 -0
  361. package/dist/utils/ast/index.d.ts +4 -0
  362. package/dist/utils/ast/index.js +4 -0
  363. package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
  364. package/dist/utils/ast/parser.d.ts.map +1 -0
  365. package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
  366. package/dist/utils/ast/parser.js.map +1 -0
  367. package/dist/utils/ast/{serializer.d.mts → serializer.d.ts} +1 -1
  368. package/dist/utils/ast/serializer.d.ts.map +1 -0
  369. package/dist/utils/ast/serializer.js +46 -0
  370. package/dist/utils/ast/serializer.js.map +1 -0
  371. package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
  372. package/dist/utils/ast/walker.d.ts.map +1 -0
  373. package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
  374. package/dist/utils/ast/walker.js.map +1 -0
  375. package/dist/utils/cloneConfig.d.ts +13 -0
  376. package/dist/utils/cloneConfig.d.ts.map +1 -0
  377. package/dist/utils/cloneConfig.js +21 -0
  378. package/dist/utils/cloneConfig.js.map +1 -0
  379. package/dist/utils/compileTailwindCss.d.ts +16 -0
  380. package/dist/utils/compileTailwindCss.d.ts.map +1 -0
  381. package/dist/utils/compileTailwindCss.js +55 -0
  382. package/dist/utils/compileTailwindCss.js.map +1 -0
  383. package/dist/utils/componentSources.d.ts +50 -0
  384. package/dist/utils/componentSources.d.ts.map +1 -0
  385. package/dist/utils/componentSources.js +50 -0
  386. package/dist/utils/componentSources.js.map +1 -0
  387. package/dist/utils/cssBox.d.ts +42 -0
  388. package/dist/utils/cssBox.d.ts.map +1 -0
  389. package/dist/utils/cssBox.js +151 -0
  390. package/dist/utils/cssBox.js.map +1 -0
  391. package/dist/utils/decodeStyleEntities.d.ts +15 -0
  392. package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
  393. package/dist/utils/decodeStyleEntities.js +18 -0
  394. package/dist/utils/decodeStyleEntities.js.map +1 -0
  395. package/dist/utils/{detect.d.mts → detect.d.ts} +1 -1
  396. package/dist/utils/detect.d.ts.map +1 -0
  397. package/dist/utils/{detect.mjs → detect.js} +2 -3
  398. package/dist/utils/detect.js.map +1 -0
  399. package/dist/utils/output-markers.d.ts +29 -0
  400. package/dist/utils/output-markers.d.ts.map +1 -0
  401. package/dist/utils/output-markers.js +68 -0
  402. package/dist/utils/output-markers.js.map +1 -0
  403. package/dist/utils/{url.d.mts → url.d.ts} +1 -1
  404. package/dist/utils/url.d.ts.map +1 -0
  405. package/dist/utils/{url.mjs → url.js} +2 -3
  406. package/dist/utils/url.js.map +1 -0
  407. package/dist/utils/watchPaths.d.ts +11 -0
  408. package/dist/utils/watchPaths.d.ts.map +1 -0
  409. package/dist/utils/watchPaths.js +19 -0
  410. package/dist/utils/watchPaths.js.map +1 -0
  411. package/node_modules/@clack/core/CHANGELOG.md +44 -0
  412. package/node_modules/@clack/core/dist/index.d.mts +125 -5
  413. package/node_modules/@clack/core/dist/index.mjs +972 -11
  414. package/node_modules/@clack/core/package.json +6 -2
  415. package/node_modules/@clack/prompts/CHANGELOG.md +70 -0
  416. package/node_modules/@clack/prompts/README.md +129 -3
  417. package/node_modules/@clack/prompts/dist/index.d.mts +567 -33
  418. package/node_modules/@clack/prompts/dist/index.mjs +1378 -133
  419. package/node_modules/@clack/prompts/package.json +7 -4
  420. package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
  421. package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
  422. package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
  423. package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
  424. package/node_modules/fast-string-truncated-width/package.json +1 -1
  425. package/node_modules/fast-string-truncated-width/readme.md +2 -3
  426. package/node_modules/fast-string-width/package.json +2 -2
  427. package/node_modules/fast-string-width/readme.md +0 -3
  428. package/node_modules/fast-wrap-ansi/lib/main.js +4 -2
  429. package/node_modules/fast-wrap-ansi/package.json +11 -11
  430. package/node_modules/maizzle/README.md +24 -0
  431. package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
  432. package/node_modules/maizzle/dist/commands/make/config.mjs +8 -7
  433. package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
  434. package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
  435. package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
  436. package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
  437. package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
  438. package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
  439. package/node_modules/maizzle/dist/commands/new.mjs +46 -135
  440. package/node_modules/maizzle/dist/index.d.mts +1 -0
  441. package/node_modules/maizzle/dist/index.mjs +30 -7
  442. package/node_modules/maizzle/package.json +5 -4
  443. package/node_modules/nypm/dist/cli.mjs +28 -5
  444. package/node_modules/nypm/dist/index.d.mts +0 -8
  445. package/node_modules/nypm/dist/index.mjs +27 -4
  446. package/node_modules/nypm/package.json +12 -12
  447. package/node_modules/tinyexec/README.md +9 -1
  448. package/node_modules/tinyexec/dist/main.d.mts +22 -7
  449. package/node_modules/tinyexec/dist/main.mjs +189 -491
  450. package/node_modules/tinyexec/package.json +14 -16
  451. package/package.json +38 -31
  452. package/dist/_virtual/_rolldown/runtime.mjs +0 -32
  453. package/dist/build.d.mts +0 -19
  454. package/dist/build.d.mts.map +0 -1
  455. package/dist/build.mjs +0 -141
  456. package/dist/build.mjs.map +0 -1
  457. package/dist/components/Divider.vue +0 -133
  458. package/dist/components/Image.vue +0 -70
  459. package/dist/components/Overlap.vue +0 -80
  460. package/dist/components/utils.d.mts +0 -5
  461. package/dist/components/utils.d.mts.map +0 -1
  462. package/dist/components/utils.mjs +0 -9
  463. package/dist/components/utils.mjs.map +0 -1
  464. package/dist/composables/defineConfig.d.mts +0 -14
  465. package/dist/composables/defineConfig.d.mts.map +0 -1
  466. package/dist/composables/defineConfig.mjs.map +0 -1
  467. package/dist/composables/renderContext.d.mts +0 -24
  468. package/dist/composables/renderContext.d.mts.map +0 -1
  469. package/dist/composables/renderContext.mjs +0 -6
  470. package/dist/composables/renderContext.mjs.map +0 -1
  471. package/dist/composables/useConfig.d.mts +0 -9
  472. package/dist/composables/useConfig.d.mts.map +0 -1
  473. package/dist/composables/useConfig.mjs +0 -13
  474. package/dist/composables/useConfig.mjs.map +0 -1
  475. package/dist/composables/useDoctype.d.mts.map +0 -1
  476. package/dist/composables/useDoctype.mjs.map +0 -1
  477. package/dist/composables/useEvent.d.mts.map +0 -1
  478. package/dist/composables/useEvent.mjs.map +0 -1
  479. package/dist/composables/usePlaintext.d.mts.map +0 -1
  480. package/dist/composables/usePlaintext.mjs.map +0 -1
  481. package/dist/composables/usePreviewText.d.mts +0 -24
  482. package/dist/composables/usePreviewText.d.mts.map +0 -1
  483. package/dist/composables/usePreviewText.mjs +0 -29
  484. package/dist/composables/usePreviewText.mjs.map +0 -1
  485. package/dist/config/defaults.d.mts.map +0 -1
  486. package/dist/config/defaults.mjs.map +0 -1
  487. package/dist/config/index.d.mts +0 -15
  488. package/dist/config/index.d.mts.map +0 -1
  489. package/dist/config/index.mjs +0 -71
  490. package/dist/config/index.mjs.map +0 -1
  491. package/dist/events/index.d.mts.map +0 -1
  492. package/dist/events/index.mjs.map +0 -1
  493. package/dist/index.d.mts +0 -31
  494. package/dist/index.mjs +0 -31
  495. package/dist/node_modules/picomatch/index.mjs +0 -13
  496. package/dist/node_modules/picomatch/index.mjs.map +0 -1
  497. package/dist/node_modules/picomatch/lib/constants.mjs +0 -174
  498. package/dist/node_modules/picomatch/lib/constants.mjs.map +0 -1
  499. package/dist/node_modules/picomatch/lib/parse.mjs +0 -1067
  500. package/dist/node_modules/picomatch/lib/parse.mjs.map +0 -1
  501. package/dist/node_modules/picomatch/lib/picomatch.mjs +0 -304
  502. package/dist/node_modules/picomatch/lib/picomatch.mjs.map +0 -1
  503. package/dist/node_modules/picomatch/lib/scan.mjs +0 -296
  504. package/dist/node_modules/picomatch/lib/scan.mjs.map +0 -1
  505. package/dist/node_modules/picomatch/lib/utils.mjs +0 -53
  506. package/dist/node_modules/picomatch/lib/utils.mjs.map +0 -1
  507. package/dist/plaintext.d.mts.map +0 -1
  508. package/dist/plaintext.mjs.map +0 -1
  509. package/dist/plugin.d.mts.map +0 -1
  510. package/dist/plugin.mjs.map +0 -1
  511. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  512. package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
  513. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  514. package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
  515. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  516. package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
  517. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  518. package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
  519. package/dist/render/createRenderer.d.mts.map +0 -1
  520. package/dist/render/createRenderer.mjs +0 -286
  521. package/dist/render/createRenderer.mjs.map +0 -1
  522. package/dist/render/index.d.mts +0 -26
  523. package/dist/render/index.d.mts.map +0 -1
  524. package/dist/render/index.mjs +0 -46
  525. package/dist/render/index.mjs.map +0 -1
  526. package/dist/serve.d.mts.map +0 -1
  527. package/dist/serve.mjs.map +0 -1
  528. package/dist/server/compatibility.d.mts +0 -5
  529. package/dist/server/compatibility.d.mts.map +0 -1
  530. package/dist/server/compatibility.mjs +0 -97
  531. package/dist/server/compatibility.mjs.map +0 -1
  532. package/dist/server/email.d.mts.map +0 -1
  533. package/dist/server/email.mjs.map +0 -1
  534. package/dist/server/linter.d.mts +0 -5
  535. package/dist/server/linter.d.mts.map +0 -1
  536. package/dist/server/linter.mjs +0 -189
  537. package/dist/server/linter.mjs.map +0 -1
  538. package/dist/transformers/addAttributes.d.mts +0 -32
  539. package/dist/transformers/addAttributes.d.mts.map +0 -1
  540. package/dist/transformers/addAttributes.mjs.map +0 -1
  541. package/dist/transformers/attributeToStyle.d.mts +0 -25
  542. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  543. package/dist/transformers/attributeToStyle.mjs +0 -80
  544. package/dist/transformers/attributeToStyle.mjs.map +0 -1
  545. package/dist/transformers/base.d.mts +0 -8
  546. package/dist/transformers/base.d.mts.map +0 -1
  547. package/dist/transformers/base.mjs.map +0 -1
  548. package/dist/transformers/entities.d.mts +0 -8
  549. package/dist/transformers/entities.d.mts.map +0 -1
  550. package/dist/transformers/entities.mjs +0 -41
  551. package/dist/transformers/entities.mjs.map +0 -1
  552. package/dist/transformers/filters/defaults.d.mts.map +0 -1
  553. package/dist/transformers/filters/defaults.mjs.map +0 -1
  554. package/dist/transformers/filters/index.d.mts +0 -22
  555. package/dist/transformers/filters/index.d.mts.map +0 -1
  556. package/dist/transformers/filters/index.mjs +0 -67
  557. package/dist/transformers/filters/index.mjs.map +0 -1
  558. package/dist/transformers/format.d.mts +0 -15
  559. package/dist/transformers/format.d.mts.map +0 -1
  560. package/dist/transformers/format.mjs +0 -26
  561. package/dist/transformers/format.mjs.map +0 -1
  562. package/dist/transformers/index.d.mts.map +0 -1
  563. package/dist/transformers/index.mjs +0 -81
  564. package/dist/transformers/index.mjs.map +0 -1
  565. package/dist/transformers/inlineCSS.d.mts +0 -17
  566. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  567. package/dist/transformers/inlineCSS.mjs +0 -70
  568. package/dist/transformers/inlineCSS.mjs.map +0 -1
  569. package/dist/transformers/inlineLink.d.mts +0 -14
  570. package/dist/transformers/inlineLink.d.mts.map +0 -1
  571. package/dist/transformers/inlineLink.mjs.map +0 -1
  572. package/dist/transformers/minify.d.mts +0 -17
  573. package/dist/transformers/minify.d.mts.map +0 -1
  574. package/dist/transformers/minify.mjs +0 -24
  575. package/dist/transformers/minify.mjs.map +0 -1
  576. package/dist/transformers/purgeCSS.d.mts +0 -23
  577. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  578. package/dist/transformers/purgeCSS.mjs +0 -132
  579. package/dist/transformers/purgeCSS.mjs.map +0 -1
  580. package/dist/transformers/removeAttributes.d.mts +0 -31
  581. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  582. package/dist/transformers/removeAttributes.mjs +0 -63
  583. package/dist/transformers/removeAttributes.mjs.map +0 -1
  584. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  585. package/dist/transformers/replaceStrings.mjs.map +0 -1
  586. package/dist/transformers/safeClassNames.d.mts +0 -22
  587. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  588. package/dist/transformers/safeClassNames.mjs.map +0 -1
  589. package/dist/transformers/shorthandCSS.d.mts +0 -24
  590. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  591. package/dist/transformers/shorthandCSS.mjs +0 -48
  592. package/dist/transformers/shorthandCSS.mjs.map +0 -1
  593. package/dist/transformers/sixHex.d.mts +0 -16
  594. package/dist/transformers/sixHex.d.mts.map +0 -1
  595. package/dist/transformers/sixHex.mjs +0 -30
  596. package/dist/transformers/sixHex.mjs.map +0 -1
  597. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  598. package/dist/transformers/tailwindcss.mjs.map +0 -1
  599. package/dist/transformers/urlQuery.d.mts +0 -24
  600. package/dist/transformers/urlQuery.d.mts.map +0 -1
  601. package/dist/transformers/urlQuery.mjs +0 -65
  602. package/dist/transformers/urlQuery.mjs.map +0 -1
  603. package/dist/types/config.d.mts.map +0 -1
  604. package/dist/types/config.mjs +0 -1
  605. package/dist/types/index.d.mts +0 -2
  606. package/dist/types/index.mjs +0 -1
  607. package/dist/utils/ast/index.d.mts +0 -4
  608. package/dist/utils/ast/index.mjs +0 -5
  609. package/dist/utils/ast/parser.d.mts.map +0 -1
  610. package/dist/utils/ast/parser.mjs.map +0 -1
  611. package/dist/utils/ast/serializer.d.mts.map +0 -1
  612. package/dist/utils/ast/serializer.mjs +0 -37
  613. package/dist/utils/ast/serializer.mjs.map +0 -1
  614. package/dist/utils/ast/walker.d.mts.map +0 -1
  615. package/dist/utils/ast/walker.mjs.map +0 -1
  616. package/dist/utils/detect.d.mts.map +0 -1
  617. package/dist/utils/detect.mjs.map +0 -1
  618. package/dist/utils/url.d.mts.map +0 -1
  619. package/dist/utils/url.mjs.map +0 -1
  620. package/node_modules/@clack/core/dist/index.mjs.map +0 -1
  621. package/node_modules/@clack/prompts/dist/index.mjs.map +0 -1
  622. package/node_modules/fast-wrap-ansi/lib/main.js.map +0 -1
  623. package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
  624. package/node_modules/tinyexec/dist/LICENSES.txt +0 -83
@@ -1,28 +1,49 @@
1
- import { __toESM } from "./_virtual/_rolldown/runtime.mjs";
2
- import { resolveConfig } from "./config/index.mjs";
3
- import { runTransformers } from "./transformers/index.mjs";
4
- import { createRenderer } from "./render/createRenderer.mjs";
5
- import { createPlaintext } from "./plaintext.mjs";
6
- import { require_picomatch } from "./node_modules/picomatch/index.mjs";
7
- import { serveCompatibility } from "./server/compatibility.mjs";
8
- import { serveLint } from "./server/linter.mjs";
9
- import { sendEmail } from "./server/email.mjs";
1
+ import { resolveConfig } from "./config/index.js";
2
+ import { EventManager } from "./events/index.js";
3
+ import { normalizeComponentSources } from "./utils/componentSources.js";
4
+ import { createRenderer } from "./render/createRenderer.js";
5
+ import { runTransformers } from "./transformers/index.js";
6
+ import { createPlaintext } from "./plaintext.js";
7
+ import { stripForHtml, stripForPlaintext } from "./utils/output-markers.js";
8
+ import { _setCurrentTemplate } from "./composables/useCurrentTemplate.js";
9
+ import { cloneConfig } from "./utils/cloneConfig.js";
10
+ import { setActiveRenderer } from "./render/active.js";
11
+ import { serveLint } from "./server/linter.js";
12
+ import { serveCompatibility } from "./server/compatibility.js";
13
+ import { sendEmail } from "./server/email.js";
14
+ import { createWatchedFileMatcher } from "./utils/watchPaths.js";
10
15
  import { createRequire } from "node:module";
11
16
  import { readFileSync } from "node:fs";
12
- import { basename, dirname, resolve } from "node:path";
13
- import { glob } from "tinyglobby";
17
+ import { basename, dirname, parse, resolve } from "node:path";
14
18
  import { fileURLToPath } from "node:url";
19
+ import { glob } from "tinyglobby";
15
20
  import { createLogger, createServer } from "vite";
16
21
  import vue from "@vitejs/plugin-vue";
22
+ import { renderUnicodeCompact } from "uqr";
17
23
  import tailwindcss from "@tailwindcss/vite";
18
24
  import { createHighlighter } from "shiki";
19
-
20
25
  //#region src/serve.ts
21
- var import_picomatch = /* @__PURE__ */ __toESM(require_picomatch(), 1);
22
26
  const devUIDir = resolve(dirname(fileURLToPath(import.meta.url)), "server/ui");
23
27
  const require = createRequire(import.meta.url);
24
- const frameworkNodeModules = resolve(dirname(require.resolve("vue/package.json")), "..");
25
- const vuePkgDir = dirname(require.resolve("vue/package.json"));
28
+ const pkg = (name) => {
29
+ const resolved = require.resolve(name).replace(/\\/g, "/");
30
+ const marker = `node_modules/${name}`;
31
+ const idx = resolved.lastIndexOf(marker);
32
+ return resolved.slice(0, idx + marker.length);
33
+ };
34
+ /**
35
+ * Resolve a package's ESM entry via its `exports` map. Aliasing to the
36
+ * package directory bypasses `exports` (it only keys off the bare name),
37
+ * so directory resolution can fall back to a UMD/CJS bundle — which Vite 8
38
+ * flags `needsInterop` and then default-imports, breaking ESM-only deps
39
+ * like culori (named exports, no default). Point the alias at the real
40
+ * ESM entry instead.
41
+ */
42
+ const pkgEsmEntry = (name) => {
43
+ const dir = pkg(name);
44
+ const pj = JSON.parse(readFileSync(resolve(dir, "package.json"), "utf-8"));
45
+ return resolve(dir, pj.exports?.["."]?.import ?? pj.module ?? pj.main);
46
+ };
26
47
  /**
27
48
  * Start the Maizzle dev server.
28
49
  *
@@ -35,20 +56,29 @@ const vuePkgDir = dirname(require.resolve("vue/package.json"));
35
56
  async function serve(options = {}) {
36
57
  const start = performance.now();
37
58
  let config = await resolveConfig(options.config);
38
- const port = config.server?.port ?? 3e3;
59
+ const port = options.port ?? config.server?.port ?? 3e3;
39
60
  let renderer = await createRenderer({
40
61
  dts: true,
41
62
  markdown: config.markdown,
42
63
  root: config.root,
43
- componentDirs: [config.components?.source ?? []].flat(),
64
+ componentDirs: normalizeComponentSources(config.components?.source, process.cwd()),
44
65
  vite: config.vite
45
66
  });
67
+ /**
68
+ * Register so user-land render() calls reuse this renderer instead of
69
+ * spinning up another Vite SSR server (which collides when the host
70
+ * app is itself a Vite dev process — e.g. TanStack Start).
71
+ */
72
+ setActiveRenderer(renderer);
73
+ const events = new EventManager();
74
+ events.registerConfig(config);
75
+ await events.fireBeforeCreate({ config });
46
76
  const server = await createServer({
47
77
  configFile: false,
48
78
  plugins: [
49
79
  vue(),
50
80
  tailwindcss(),
51
- maizzleDevPlugin(config, renderer, options.config)
81
+ maizzleDevPlugin(config, renderer, events, options.config)
52
82
  ],
53
83
  resolve: {
54
84
  dedupe: ["vue"],
@@ -59,40 +89,25 @@ async function serve(options = {}) {
59
89
  },
60
90
  {
61
91
  find: "vue",
62
- replacement: resolve(vuePkgDir, "dist/vue.runtime.esm-bundler.js")
63
- },
64
- {
65
- find: "vue-router",
66
- replacement: resolve(frameworkNodeModules, "vue-router")
67
- },
68
- {
69
- find: "reka-ui",
70
- replacement: resolve(frameworkNodeModules, "reka-ui")
71
- },
72
- {
73
- find: "@vueuse/core",
74
- replacement: resolve(frameworkNodeModules, "@vueuse/core")
92
+ replacement: resolve(pkg("vue"), "dist/vue.runtime.esm-bundler.js")
75
93
  },
76
94
  {
77
- find: "@vueuse/shared",
78
- replacement: resolve(frameworkNodeModules, "@vueuse/shared")
95
+ find: "culori",
96
+ replacement: pkgEsmEntry("culori")
79
97
  },
80
- {
81
- find: "lucide-vue-next",
82
- replacement: resolve(frameworkNodeModules, "lucide-vue-next")
83
- },
84
- {
85
- find: "class-variance-authority",
86
- replacement: resolve(frameworkNodeModules, "class-variance-authority")
87
- },
88
- {
89
- find: "clsx",
90
- replacement: resolve(frameworkNodeModules, "clsx")
91
- },
92
- {
93
- find: "tailwind-merge",
94
- replacement: resolve(frameworkNodeModules, "tailwind-merge")
95
- }
98
+ ...[
99
+ "vue-router",
100
+ "reka-ui",
101
+ "@vueuse/core",
102
+ "@vueuse/shared",
103
+ "@lucide/vue",
104
+ "class-variance-authority",
105
+ "clsx",
106
+ "tailwind-merge"
107
+ ].map((name) => ({
108
+ find: name,
109
+ replacement: pkg(name)
110
+ }))
96
111
  ]
97
112
  },
98
113
  cacheDir: resolve(devUIDir, ".vite"),
@@ -101,13 +116,14 @@ async function serve(options = {}) {
101
116
  include: [
102
117
  "vue",
103
118
  "vue-router",
104
- "lucide-vue-next",
119
+ "@lucide/vue",
105
120
  "@vueuse/core",
106
121
  "@vueuse/shared",
107
122
  "reka-ui",
108
123
  "class-variance-authority",
109
124
  "clsx",
110
- "tailwind-merge"
125
+ "tailwind-merge",
126
+ "culori"
111
127
  ]
112
128
  },
113
129
  server: {
@@ -117,13 +133,25 @@ async function serve(options = {}) {
117
133
  process.cwd(),
118
134
  config.root ?? process.cwd(),
119
135
  devUIDir,
120
- frameworkNodeModules
136
+ ...[
137
+ "vue",
138
+ "vue-router",
139
+ "reka-ui",
140
+ "@vueuse/core",
141
+ "@vueuse/shared",
142
+ "@lucide/vue",
143
+ "class-variance-authority",
144
+ "clsx",
145
+ "tailwind-merge",
146
+ "culori"
147
+ ].map(pkg)
121
148
  ] }
122
149
  },
123
150
  customLogger: customLogger()
124
151
  });
125
152
  const originalClose = server.close.bind(server);
126
153
  server.close = async () => {
154
+ setActiveRenderer(null);
127
155
  await renderer.close();
128
156
  return originalClose();
129
157
  };
@@ -136,13 +164,18 @@ async function serve(options = {}) {
136
164
  /**
137
165
  * Internal Vite plugin that adds Maizzle middleware and file watching to the dev UI server.
138
166
  */
139
- function maizzleDevPlugin(config, renderer, configInput) {
167
+ function maizzleDevPlugin(config, renderer, events, configInput) {
140
168
  return {
141
169
  name: "maizzle:dev",
142
170
  enforce: "pre",
143
171
  hotUpdate: {
144
172
  order: "pre",
145
173
  handler({ file }) {
174
+ /**
175
+ * Prevent Tailwind/Vue from triggering a full reload for email template
176
+ * files. Maizzle handles these via custom HMR events in the
177
+ * watcher below.
178
+ */
146
179
  if (isTemplateFile(file)) return [];
147
180
  }
148
181
  },
@@ -156,62 +189,96 @@ function maizzleDevPlugin(config, renderer, configInput) {
156
189
  ];
157
190
  const userWatchPaths = config.server?.watch ?? [];
158
191
  const watchPaths = [...defaultWatchPaths, ...userWatchPaths];
159
- const isWatchedFile = (0, import_picomatch.default)(watchPaths);
192
+ const isWatchedFile = createWatchedFileMatcher(watchPaths, process.cwd());
160
193
  for (const watchPath of watchPaths) server.watcher.add(watchPath);
161
- server.watcher.on("add", async (file) => {
194
+ /**
195
+ * Serialize watcher work onto one chain. The change handler closes and
196
+ * recreates the renderer across awaits; without serialization a second
197
+ * event firing mid-reload closes a stale renderer and leaks the new one.
198
+ * Errors are caught so one failed task doesn't break the chain.
199
+ */
200
+ let watcherChain = Promise.resolve();
201
+ const enqueue = (task) => {
202
+ watcherChain = watcherChain.then(task).catch((err) => {
203
+ console.error("[maizzle] watcher task failed:", err);
204
+ });
205
+ return watcherChain;
206
+ };
207
+ server.watcher.on("add", (file) => enqueue(async () => {
162
208
  if (isTemplateFile(file)) {
163
209
  await renderer.invalidateAll();
210
+ bumpGeneration();
164
211
  server.ws.send({
165
212
  type: "custom",
166
213
  event: "maizzle:templates-changed"
167
214
  });
168
215
  }
169
- });
170
- server.watcher.on("unlink", async (file) => {
216
+ }));
217
+ server.watcher.on("unlink", (file) => enqueue(async () => {
171
218
  if (isTemplateFile(file)) {
172
219
  await renderer.invalidateAll();
220
+ bumpGeneration();
173
221
  server.ws.send({
174
222
  type: "custom",
175
223
  event: "maizzle:templates-changed"
176
224
  });
177
225
  }
178
- });
179
- server.watcher.on("change", async (file) => {
226
+ }));
227
+ server.watcher.on("change", (file) => enqueue(async () => {
180
228
  if (isWatchedFile(file)) {
181
229
  config = await resolveConfig(configInput);
230
+ events.clear();
231
+ events.registerConfig(config);
182
232
  await renderer.close();
183
233
  renderer = await createRenderer({
184
234
  dts: true,
185
235
  markdown: config.markdown,
186
236
  root: config.root,
187
- componentDirs: [config.components?.source ?? []].flat(),
237
+ componentDirs: normalizeComponentSources(config.components?.source, process.cwd()),
188
238
  vite: config.vite
189
239
  });
240
+ setActiveRenderer(renderer);
241
+ /**
242
+ * Push UI-relevant config bits so the dev UI reacts to live edits
243
+ * without a page reload. Uses the same shape as the initial
244
+ * inject.
245
+ */
246
+ server.ws.send({
247
+ type: "custom",
248
+ event: "maizzle:config-updated",
249
+ data: buildUiConfig(config)
250
+ });
190
251
  }
252
+ /**
253
+ * Invalidate all renderer modules so component and config changes
254
+ * are picked up on the next render (Tailwind recompiles with
255
+ * fresh content).
256
+ */
191
257
  await renderer.invalidateAll();
258
+ bumpGeneration();
192
259
  if (isTemplateFile(file) || isWatchedFile(file)) server.ws.send({
193
260
  type: "custom",
194
261
  event: "maizzle:template-updated",
195
262
  data: { file }
196
263
  });
197
- });
264
+ }));
198
265
  server.middlewares.use(async (req, res, next) => {
199
266
  const url = req.url || "/";
200
267
  if (url === "/__maizzle/templates") return serveTemplateList(config, res);
201
- if (url.startsWith("/__maizzle/render/")) return await serveRenderedTemplate(url, config, renderer, res);
202
- if (url.startsWith("/__maizzle/source/")) return await serveHighlightedSource(url, config, renderer, res);
203
- if (url === "/__maizzle/compatibility" && req.method === "POST") return await serveCompatibility(req, res);
204
- if (url.startsWith("/__maizzle/lint/")) return serveLint(url, res);
268
+ if (url.startsWith("/__maizzle/render/")) return await serveRenderedTemplate(url, config, renderer, events, res);
269
+ if (url.startsWith("/__maizzle/source/")) return await serveHighlightedSource(url, config, renderer, events, res);
270
+ if (url.startsWith("/__maizzle/compatibility/")) return await serveCompatibility(url, res, config, normalizeComponentSources(config.components?.source, process.cwd()));
271
+ if (url.startsWith("/__maizzle/lint/")) return await serveLint(url, res, config, normalizeComponentSources(config.components?.source, process.cwd()));
205
272
  if (url.startsWith("/__maizzle/vue-source/")) return await serveVueSource(url, config, res);
206
- if (url.startsWith("/__maizzle/plaintext/")) return await servePlaintext(url, config, renderer, res);
207
- if (url.startsWith("/__maizzle/stats/")) return await serveStats(url, config, renderer, res);
208
- if (url.startsWith("/__maizzle/email/") && req.method === "POST") return await serveEmailEndpoint(url, req, res, config, renderer);
273
+ if (url.startsWith("/__maizzle/plaintext/")) return await servePlaintext(url, config, renderer, events, res);
274
+ if (url.startsWith("/__maizzle/stats/")) return await serveStats(url, config, renderer, events, res);
275
+ if (url.startsWith("/__maizzle/email/") && req.method === "POST") return await serveEmailEndpoint(url, req, res, config, renderer, events);
209
276
  if (url === "/__maizzle/email-config") return serveEmailConfig(config, res);
210
277
  next();
211
278
  });
212
279
  return () => {
213
280
  server.middlewares.use(async (req, res, next) => {
214
- if (isNavigationRequest(req)) return await serveDevUI(server, res, req.url || "/");
281
+ if (isNavigationRequest(req)) return await serveDevUI(server, res, req.url || "/", config);
215
282
  next();
216
283
  });
217
284
  };
@@ -225,10 +292,20 @@ function isNavigationRequest(req) {
225
292
  const accept = req.headers?.accept || "";
226
293
  return req.method === "GET" && accept.includes("text/html");
227
294
  }
228
- async function serveDevUI(server, res, url) {
295
+ /**
296
+ * Shape exposed to the dev UI both at initial HTML load (as
297
+ * `window.__MAIZZLE_CONFIG__`) and on the `maizzle:config-updated` HMR event.
298
+ * Add UI-visible config bits here; consumers on both ends pick up automatically.
299
+ */
300
+ function buildUiConfig(config) {
301
+ return { checks: config.server?.checks ?? true };
302
+ }
303
+ async function serveDevUI(server, res, url, config) {
229
304
  let indexHtml = readFileSync(resolve(devUIDir, "index.html"), "utf-8");
230
305
  indexHtml = indexHtml.replace("./main.ts", `/@fs/${resolve(devUIDir, "main.ts")}`);
231
306
  indexHtml = indexHtml.replace("./favicon.svg", `/@fs/${resolve(devUIDir, "favicon.svg")}`);
307
+ const configScript = `<script>window.__MAIZZLE_CONFIG__ = ${JSON.stringify(buildUiConfig(config))};<\/script>`;
308
+ indexHtml = indexHtml.replace("</head>", `${configScript}</head>`);
232
309
  const transformed = await server.transformIndexHtml(url, indexHtml);
233
310
  res.setHeader("Content-Type", "text/html");
234
311
  res.end(transformed);
@@ -243,9 +320,77 @@ async function serveTemplateList(config, res) {
243
320
  res.end(JSON.stringify(data));
244
321
  }
245
322
  /**
323
+ * Render-result memo for the dev server. A single template save makes the
324
+ * browser fire several endpoint requests in parallel (render, source, stats,
325
+ * plaintext, email) that each need the same SSR render + transformer output.
326
+ * Keying the in-flight Promise by `${generation}:${path}` collapses those into
327
+ * one render and dedupes concurrent requests. The watcher bumps the generation
328
+ * (and clears the cache) on every file/config change, so results never go
329
+ * stale. Each endpoint applies its own tail step (doctype prepend, strip,
330
+ * highlight, …) on top of `rawHtml`, keeping output byte-identical.
331
+ */
332
+ let renderGeneration = 0;
333
+ const renderCache = /* @__PURE__ */ new Map();
334
+ function bumpGeneration() {
335
+ renderGeneration++;
336
+ renderCache.clear();
337
+ }
338
+ function getRendered(absolutePath, config, renderer, events) {
339
+ const key = `${renderGeneration}:${absolutePath}`;
340
+ let promise = renderCache.get(key);
341
+ if (!promise) {
342
+ promise = (async () => {
343
+ _setCurrentTemplate(parse(absolutePath));
344
+ try {
345
+ /**
346
+ * Mirror the build's per-template event pipeline (see buildTemplate)
347
+ * so dev preview fires the same beforeRender / afterRender /
348
+ * afterTransform hooks and matches production output. Clone config so
349
+ * beforeRender mutations stay scoped to this render.
350
+ */
351
+ const renderConfig = cloneConfig(config);
352
+ const template = {
353
+ source: readFileSync(absolutePath, "utf-8"),
354
+ path: parse(absolutePath)
355
+ };
356
+ const originalSource = template.source;
357
+ await events.fireBeforeRender({
358
+ config: renderConfig,
359
+ template
360
+ });
361
+ const rendered = await renderer.render(absolutePath, renderConfig, template.source !== originalSource ? { source: template.source } : void 0);
362
+ for (const { name, handler } of rendered.sfcEventHandlers) events.on(name, handler);
363
+ const templateConfig = rendered.templateConfig;
364
+ let html = await events.fireAfterRender({
365
+ config: templateConfig,
366
+ template,
367
+ html: rendered.html
368
+ });
369
+ const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
370
+ if (templateConfig.useTransformers !== false) html = await runTransformers(html, templateConfig, absolutePath, doctype, rendered.tailwindBlocks);
371
+ return {
372
+ rawHtml: await events.fireAfterTransform({
373
+ config: templateConfig,
374
+ template,
375
+ html
376
+ }),
377
+ doctype,
378
+ templateConfig,
379
+ rendered
380
+ };
381
+ } finally {
382
+ _setCurrentTemplate(void 0);
383
+ events.clearSfcHandlers();
384
+ }
385
+ })();
386
+ renderCache.set(key, promise);
387
+ }
388
+ return promise;
389
+ }
390
+ /**
246
391
  * SSR render a .vue template using the Renderer (not the dev UI server).
247
392
  */
248
- async function serveRenderedTemplate(url, config, renderer, res) {
393
+ async function serveRenderedTemplate(url, config, renderer, events, res) {
249
394
  const templateSlug = url.replace("/__maizzle/render/", "").replace(/\?.*$/, "");
250
395
  const match = (await glob(config.content ?? ["emails/**/*.vue"])).find((t) => t.replace(/\.(vue|md)$/, "") === templateSlug);
251
396
  if (!match) {
@@ -253,17 +398,13 @@ async function serveRenderedTemplate(url, config, renderer, res) {
253
398
  res.end("Template not found");
254
399
  return;
255
400
  }
401
+ const absolutePath = resolve(match);
256
402
  try {
257
- const absolutePath = resolve(match);
258
- await renderer.invalidateAll();
259
- const rendered = await renderer.render(absolutePath, config);
260
- let html = rendered.html;
261
- const templateConfig = rendered.templateConfig;
262
- const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
263
- html = await runTransformers(html, templateConfig, absolutePath, doctype);
264
- html = `${doctype}\n${html}`;
403
+ const { rawHtml, doctype } = await getRendered(absolutePath, config, renderer, events);
404
+ let html = rawHtml;
405
+ if (doctype) html = `${doctype}\n${html}`;
265
406
  res.setHeader("Content-Type", "text/html");
266
- res.end(html);
407
+ res.end(stripForHtml(html));
267
408
  } catch (error) {
268
409
  res.statusCode = 500;
269
410
  res.end(`<pre>${error.stack || error.message}</pre>`);
@@ -277,7 +418,7 @@ async function getHighlighter() {
277
418
  });
278
419
  return highlighter;
279
420
  }
280
- async function serveHighlightedSource(url, config, renderer, res) {
421
+ async function serveHighlightedSource(url, config, renderer, events, res) {
281
422
  const templateSlug = url.replace("/__maizzle/source/", "").replace(/\?.*$/, "");
282
423
  const match = (await glob(config.content ?? ["emails/**/*.vue"])).find((t) => t.replace(/\.(vue|md)$/, "") === templateSlug);
283
424
  if (!match) {
@@ -285,15 +426,10 @@ async function serveHighlightedSource(url, config, renderer, res) {
285
426
  res.end("Template not found");
286
427
  return;
287
428
  }
429
+ const absolutePath = resolve(match);
288
430
  try {
289
- const absolutePath = resolve(match);
290
- await renderer.invalidateAll();
291
- const rendered = await renderer.render(absolutePath, config);
292
- let html = rendered.html;
293
- const templateConfig = rendered.templateConfig;
294
- const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
295
- html = await runTransformers(html, templateConfig, absolutePath, doctype);
296
- html = `${doctype}\n${html}`;
431
+ const { rawHtml, doctype } = await getRendered(absolutePath, config, renderer, events);
432
+ const html = stripForHtml(doctype ? `${doctype}\n${rawHtml}` : rawHtml);
297
433
  const highlighted = (await getHighlighter()).codeToHtml(html, {
298
434
  lang: "html",
299
435
  theme: "laserwave",
@@ -333,7 +469,7 @@ async function serveVueSource(url, config, res) {
333
469
  res.end(`<pre>${error.stack || error.message}</pre>`);
334
470
  }
335
471
  }
336
- async function servePlaintext(url, config, renderer, res) {
472
+ async function servePlaintext(url, config, renderer, events, res) {
337
473
  const templateSlug = url.replace("/__maizzle/plaintext/", "").replace(/\?.*$/, "");
338
474
  const match = (await glob(config.content ?? ["emails/**/*.vue"])).find((t) => t.replace(/\.(vue|md)$/, "") === templateSlug);
339
475
  if (!match) {
@@ -341,15 +477,10 @@ async function servePlaintext(url, config, renderer, res) {
341
477
  res.end("Template not found");
342
478
  return;
343
479
  }
480
+ const absolutePath = resolve(match);
344
481
  try {
345
- const absolutePath = resolve(match);
346
- await renderer.invalidateAll();
347
- const rendered = await renderer.render(absolutePath, config);
348
- let html = rendered.html;
349
- const templateConfig = rendered.templateConfig;
350
- const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
351
- html = await runTransformers(html, templateConfig, absolutePath, doctype);
352
- const plaintext = createPlaintext(html);
482
+ const { rawHtml } = await getRendered(absolutePath, config, renderer, events);
483
+ const plaintext = createPlaintext(stripForPlaintext(rawHtml));
353
484
  res.setHeader("Content-Type", "text/plain");
354
485
  res.end(plaintext);
355
486
  } catch (error) {
@@ -378,7 +509,7 @@ function humanFileSize(bytes, si = false, dp = 2) {
378
509
  } while (Math.round(Math.abs(bytes) * r) / r >= threshold && u < units.length - 1);
379
510
  return bytes.toFixed(dp) + " " + units[u];
380
511
  }
381
- async function serveStats(url, config, renderer, res) {
512
+ async function serveStats(url, config, renderer, events, res) {
382
513
  const templateSlug = url.replace("/__maizzle/stats/", "").replace(/\?.*$/, "");
383
514
  const match = (await glob(config.content ?? ["emails/**/*.vue"])).find((t) => t.replace(/\.(vue|md)$/, "") === templateSlug);
384
515
  if (!match) {
@@ -386,15 +517,11 @@ async function serveStats(url, config, renderer, res) {
386
517
  res.end(JSON.stringify({ error: "Template not found" }));
387
518
  return;
388
519
  }
520
+ const absolutePath = resolve(match);
389
521
  try {
390
- const absolutePath = resolve(match);
391
- await renderer.invalidateAll();
392
- const rendered = await renderer.render(absolutePath, config);
393
- let html = rendered.html;
394
- const templateConfig = rendered.templateConfig;
395
- const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
396
- html = await runTransformers(html, templateConfig, absolutePath, doctype);
397
- const sizeBytes = Buffer.byteLength(html, "utf-8");
522
+ const { rawHtml } = await getRendered(absolutePath, config, renderer, events);
523
+ const html = stripForHtml(rawHtml);
524
+ const sizeBytes = new TextEncoder().encode(html).length;
398
525
  const totalImages = (html.match(/<img\b[^>]*>/gi) || []).length + (html.match(/url\s*\([^)]+\)/gi) || []).length;
399
526
  const links = (html.match(/<a\b[^>]*href\s*=/gi) || []).length;
400
527
  res.setHeader("Content-Type", "application/json");
@@ -411,7 +538,7 @@ async function serveStats(url, config, renderer, res) {
411
538
  res.end(JSON.stringify({ error: error.message }));
412
539
  }
413
540
  }
414
- async function serveEmailEndpoint(url, req, res, config, renderer) {
541
+ async function serveEmailEndpoint(url, req, res, config, renderer, events) {
415
542
  const templateSlug = url.replace("/__maizzle/email/", "").replace(/\?.*$/, "");
416
543
  const match = (await glob(config.content ?? ["emails/**/*.vue"])).find((t) => t.replace(/\.(vue|md)$/, "") === templateSlug);
417
544
  if (!match) {
@@ -443,16 +570,12 @@ async function serveEmailEndpoint(url, req, res, config, renderer) {
443
570
  }));
444
571
  return;
445
572
  }
573
+ const absolutePath = resolve(match);
446
574
  try {
447
- const absolutePath = resolve(match);
448
- await renderer.invalidateAll();
449
- const rendered = await renderer.render(absolutePath, config);
450
- let html = rendered.html;
451
- const templateConfig = rendered.templateConfig;
452
- const doctype = rendered.doctype ?? templateConfig.doctype ?? "<!DOCTYPE html>";
453
- html = await runTransformers(html, templateConfig, absolutePath, doctype);
454
- html = `${doctype}\n${html}`;
455
- const text = createPlaintext(html);
575
+ const { rawHtml, doctype, templateConfig } = await getRendered(absolutePath, config, renderer, events);
576
+ let html = doctype ? `${doctype}\n${rawHtml}` : rawHtml;
577
+ const text = createPlaintext(stripForPlaintext(html));
578
+ html = stripForHtml(html);
456
579
  const result = await sendEmail({
457
580
  to: payload.to,
458
581
  subject: payload.subject,
@@ -482,6 +605,12 @@ function serveEmailConfig(config, res) {
482
605
  function printBanner(server, startupTime) {
483
606
  const info = server.config.logger.info;
484
607
  const time = startupTime ?? server._maizzleStartupTime;
608
+ const networkUrl = server.resolvedUrls?.network[0];
609
+ if (networkUrl) {
610
+ const qr = renderUnicodeCompact(networkUrl, { border: 1 });
611
+ info("");
612
+ info(qr.split("\n").map((line) => ` ${line}`).join("\n"));
613
+ }
485
614
  info("");
486
615
  info(` \x1b[32m\x1b[1mMAIZZLE\x1b[0m\x1b[32m v6.0.0\x1b[0m \x1b[2mready in\x1b[0m \x1b[1m${time}\x1b[0m ms`);
487
616
  info("");
@@ -497,7 +626,7 @@ function customLogger() {
497
626
  };
498
627
  return logger;
499
628
  }
500
-
501
629
  //#endregion
502
630
  export { printBanner, serve };
503
- //# sourceMappingURL=serve.mjs.map
631
+
632
+ //# sourceMappingURL=serve.js.map