@maizzle/framework 6.0.0-rc.9 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) 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 +71 -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 +24 -0
  102. package/dist/config/index.d.ts.map +1 -0
  103. package/dist/config/{index.mjs → index.js} +45 -14
  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} +201 -107
  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-DaqjATE_.js +8785 -0
  235. package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-DaqjATE_.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 +37 -30
  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.map +0 -1
  490. package/dist/events/index.d.mts.map +0 -1
  491. package/dist/events/index.mjs.map +0 -1
  492. package/dist/index.d.mts +0 -31
  493. package/dist/index.mjs +0 -31
  494. package/dist/node_modules/picomatch/index.mjs +0 -13
  495. package/dist/node_modules/picomatch/index.mjs.map +0 -1
  496. package/dist/node_modules/picomatch/lib/constants.mjs +0 -174
  497. package/dist/node_modules/picomatch/lib/constants.mjs.map +0 -1
  498. package/dist/node_modules/picomatch/lib/parse.mjs +0 -1067
  499. package/dist/node_modules/picomatch/lib/parse.mjs.map +0 -1
  500. package/dist/node_modules/picomatch/lib/picomatch.mjs +0 -304
  501. package/dist/node_modules/picomatch/lib/picomatch.mjs.map +0 -1
  502. package/dist/node_modules/picomatch/lib/scan.mjs +0 -296
  503. package/dist/node_modules/picomatch/lib/scan.mjs.map +0 -1
  504. package/dist/node_modules/picomatch/lib/utils.mjs +0 -53
  505. package/dist/node_modules/picomatch/lib/utils.mjs.map +0 -1
  506. package/dist/plaintext.d.mts.map +0 -1
  507. package/dist/plaintext.mjs.map +0 -1
  508. package/dist/plugin.d.mts.map +0 -1
  509. package/dist/plugin.mjs.map +0 -1
  510. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  511. package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
  512. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  513. package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
  514. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  515. package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
  516. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  517. package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
  518. package/dist/render/createRenderer.d.mts.map +0 -1
  519. package/dist/render/createRenderer.mjs +0 -286
  520. package/dist/render/createRenderer.mjs.map +0 -1
  521. package/dist/render/index.d.mts +0 -26
  522. package/dist/render/index.d.mts.map +0 -1
  523. package/dist/render/index.mjs +0 -46
  524. package/dist/render/index.mjs.map +0 -1
  525. package/dist/serve.d.mts.map +0 -1
  526. package/dist/serve.mjs.map +0 -1
  527. package/dist/server/compatibility.d.mts +0 -5
  528. package/dist/server/compatibility.d.mts.map +0 -1
  529. package/dist/server/compatibility.mjs +0 -97
  530. package/dist/server/compatibility.mjs.map +0 -1
  531. package/dist/server/email.d.mts.map +0 -1
  532. package/dist/server/email.mjs.map +0 -1
  533. package/dist/server/linter.d.mts +0 -5
  534. package/dist/server/linter.d.mts.map +0 -1
  535. package/dist/server/linter.mjs +0 -189
  536. package/dist/server/linter.mjs.map +0 -1
  537. package/dist/transformers/addAttributes.d.mts +0 -32
  538. package/dist/transformers/addAttributes.d.mts.map +0 -1
  539. package/dist/transformers/addAttributes.mjs.map +0 -1
  540. package/dist/transformers/attributeToStyle.d.mts +0 -25
  541. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  542. package/dist/transformers/attributeToStyle.mjs +0 -80
  543. package/dist/transformers/attributeToStyle.mjs.map +0 -1
  544. package/dist/transformers/base.d.mts +0 -8
  545. package/dist/transformers/base.d.mts.map +0 -1
  546. package/dist/transformers/base.mjs.map +0 -1
  547. package/dist/transformers/entities.d.mts +0 -8
  548. package/dist/transformers/entities.d.mts.map +0 -1
  549. package/dist/transformers/entities.mjs +0 -41
  550. package/dist/transformers/entities.mjs.map +0 -1
  551. package/dist/transformers/filters/defaults.d.mts.map +0 -1
  552. package/dist/transformers/filters/defaults.mjs.map +0 -1
  553. package/dist/transformers/filters/index.d.mts +0 -22
  554. package/dist/transformers/filters/index.d.mts.map +0 -1
  555. package/dist/transformers/filters/index.mjs +0 -67
  556. package/dist/transformers/filters/index.mjs.map +0 -1
  557. package/dist/transformers/format.d.mts +0 -15
  558. package/dist/transformers/format.d.mts.map +0 -1
  559. package/dist/transformers/format.mjs +0 -26
  560. package/dist/transformers/format.mjs.map +0 -1
  561. package/dist/transformers/index.d.mts.map +0 -1
  562. package/dist/transformers/index.mjs +0 -81
  563. package/dist/transformers/index.mjs.map +0 -1
  564. package/dist/transformers/inlineCSS.d.mts +0 -17
  565. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  566. package/dist/transformers/inlineCSS.mjs +0 -70
  567. package/dist/transformers/inlineCSS.mjs.map +0 -1
  568. package/dist/transformers/inlineLink.d.mts +0 -14
  569. package/dist/transformers/inlineLink.d.mts.map +0 -1
  570. package/dist/transformers/inlineLink.mjs.map +0 -1
  571. package/dist/transformers/minify.d.mts +0 -17
  572. package/dist/transformers/minify.d.mts.map +0 -1
  573. package/dist/transformers/minify.mjs +0 -24
  574. package/dist/transformers/minify.mjs.map +0 -1
  575. package/dist/transformers/purgeCSS.d.mts +0 -23
  576. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  577. package/dist/transformers/purgeCSS.mjs +0 -132
  578. package/dist/transformers/purgeCSS.mjs.map +0 -1
  579. package/dist/transformers/removeAttributes.d.mts +0 -31
  580. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  581. package/dist/transformers/removeAttributes.mjs +0 -63
  582. package/dist/transformers/removeAttributes.mjs.map +0 -1
  583. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  584. package/dist/transformers/replaceStrings.mjs.map +0 -1
  585. package/dist/transformers/safeClassNames.d.mts +0 -22
  586. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  587. package/dist/transformers/safeClassNames.mjs.map +0 -1
  588. package/dist/transformers/shorthandCSS.d.mts +0 -24
  589. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  590. package/dist/transformers/shorthandCSS.mjs +0 -48
  591. package/dist/transformers/shorthandCSS.mjs.map +0 -1
  592. package/dist/transformers/sixHex.d.mts +0 -16
  593. package/dist/transformers/sixHex.d.mts.map +0 -1
  594. package/dist/transformers/sixHex.mjs +0 -30
  595. package/dist/transformers/sixHex.mjs.map +0 -1
  596. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  597. package/dist/transformers/tailwindcss.mjs.map +0 -1
  598. package/dist/transformers/urlQuery.d.mts +0 -24
  599. package/dist/transformers/urlQuery.d.mts.map +0 -1
  600. package/dist/transformers/urlQuery.mjs +0 -65
  601. package/dist/transformers/urlQuery.mjs.map +0 -1
  602. package/dist/types/config.d.mts.map +0 -1
  603. package/dist/types/config.mjs +0 -1
  604. package/dist/types/index.d.mts +0 -2
  605. package/dist/types/index.mjs +0 -1
  606. package/dist/utils/ast/index.d.mts +0 -4
  607. package/dist/utils/ast/index.mjs +0 -5
  608. package/dist/utils/ast/parser.d.mts.map +0 -1
  609. package/dist/utils/ast/parser.mjs.map +0 -1
  610. package/dist/utils/ast/serializer.d.mts.map +0 -1
  611. package/dist/utils/ast/serializer.mjs +0 -37
  612. package/dist/utils/ast/serializer.mjs.map +0 -1
  613. package/dist/utils/ast/walker.d.mts.map +0 -1
  614. package/dist/utils/ast/walker.mjs.map +0 -1
  615. package/dist/utils/detect.d.mts.map +0 -1
  616. package/dist/utils/detect.mjs.map +0 -1
  617. package/dist/utils/url.d.mts.map +0 -1
  618. package/dist/utils/url.mjs.map +0 -1
  619. package/node_modules/@clack/core/dist/index.mjs.map +0 -1
  620. package/node_modules/@clack/prompts/dist/index.mjs.map +0 -1
  621. package/node_modules/fast-wrap-ansi/lib/main.js.map +0 -1
  622. package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
  623. package/node_modules/tinyexec/dist/LICENSES.txt +0 -83
@@ -0,0 +1,59 @@
1
+ import { resolveConfigObject } from "../config/index.js";
2
+ import { normalizeComponentSources } from "../utils/componentSources.js";
3
+ import { createRenderer } from "./createRenderer.js";
4
+ import { runTransformers } from "../transformers/index.js";
5
+ import { createPlaintext } from "../plaintext.js";
6
+ import { stripForHtml, stripForPlaintext } from "../utils/output-markers.js";
7
+ import { getActiveRenderer } from "./active.js";
8
+ import { extname, resolve } from "pathe";
9
+ import defu from "defu";
10
+ //#region src/render/index.ts
11
+ /**
12
+ * Render a Vue SFC email template to a fully-transformed HTML string.
13
+ * Accepts a file path or a raw SFC source string.
14
+ */
15
+ async function render(template, config) {
16
+ if (template == null) throw new Error(`render() received ${template}. If you used \`import X from './x.vue'\`, Node cannot load .vue files natively — pass the path string instead: render('./x.vue').`);
17
+ if (typeof template !== "string" && typeof template !== "object" && typeof template !== "function") throw new TypeError(`render() expected a file path or SFC source string, got ${typeof template}.`);
18
+ const resolvedConfig = resolveConfigObject(config);
19
+ /**
20
+ * Reuse a renderer started by the Vite plugin when one is active.
21
+ * Spinning up a fresh Vite SSR server inside a host Vite dev process
22
+ * (e.g. TanStack Start) collides on env wiring and throws
23
+ * "outsideEmitter undefined".
24
+ */
25
+ const active = getActiveRenderer();
26
+ const renderer = active ?? await createRenderer({
27
+ markdown: resolvedConfig.markdown,
28
+ root: resolvedConfig.root,
29
+ componentDirs: normalizeComponentSources(resolvedConfig.components?.source, process.cwd()),
30
+ vite: resolvedConfig.vite
31
+ });
32
+ try {
33
+ const isFile = typeof template === "string" && [".vue", ".md"].includes(extname(template)) && !template.includes("\n");
34
+ const rendered = await renderer.render(isFile ? resolve(template) : template, resolvedConfig);
35
+ let html = rendered.html;
36
+ const doctype = rendered.doctype ?? rendered.templateConfig.doctype ?? "<!DOCTYPE html>";
37
+ if (rendered.templateConfig.useTransformers !== false) html = await runTransformers(html, rendered.templateConfig, isFile ? resolve(template) : void 0, doctype, rendered.tailwindBlocks);
38
+ if (doctype) html = `${doctype}\n${html}`;
39
+ const globalPlaintext = rendered.templateConfig.plaintext;
40
+ const sfcPlaintext = rendered.plaintext;
41
+ let plaintextResult;
42
+ if (globalPlaintext || sfcPlaintext) {
43
+ const globalCfg = typeof globalPlaintext === "object" ? globalPlaintext : {};
44
+ const stripOptions = defu(sfcPlaintext?.options, globalCfg.options);
45
+ plaintextResult = createPlaintext(stripForPlaintext(html), stripOptions);
46
+ }
47
+ return {
48
+ html: stripForHtml(html),
49
+ config: rendered.templateConfig,
50
+ plaintext: plaintextResult
51
+ };
52
+ } finally {
53
+ if (!active) await renderer.close();
54
+ }
55
+ }
56
+ //#endregion
57
+ export { createRenderer, render };
58
+
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/render/index.ts"],"sourcesContent":["import { resolve, extname } from 'pathe'\nimport { resolveConfigObject } from '../config/index.ts'\nimport { runTransformers } from '../transformers/index.ts'\nimport { createPlaintext } from '../plaintext.ts'\nimport { stripForHtml, stripForPlaintext } from '../utils/output-markers.ts'\nimport defu from 'defu'\nimport type { Component } from 'vue'\nimport type { MaizzleConfig } from '../types/index.ts'\nimport { createRenderer } from './createRenderer.ts'\nimport { getActiveRenderer } from './active.ts'\nimport { normalizeComponentSources } from '../utils/componentSources.ts'\n\nexport type { Renderer, RenderedTemplate, CreateRendererOptions } from './createRenderer.ts'\nexport { createRenderer } from './createRenderer.ts'\n\nexport interface RenderResult {\n html: string\n config: MaizzleConfig\n plaintext?: string\n}\n\n/**\n * Render a Vue SFC email template to a fully-transformed HTML string.\n * Accepts a file path or a raw SFC source string.\n */\nexport async function render(\n template: string | Component,\n config?: Partial<MaizzleConfig>,\n): Promise<RenderResult> {\n if (template == null) {\n throw new Error(\n `render() received ${template}. If you used \\`import X from './x.vue'\\`, Node cannot load .vue files natively — pass the path string instead: render('./x.vue').`,\n )\n }\n if (typeof template !== 'string' && typeof template !== 'object' && typeof template !== 'function') {\n throw new TypeError(\n `render() expected a file path or SFC source string, got ${typeof template}.`,\n )\n }\n\n const resolvedConfig = resolveConfigObject(config)\n\n /**\n * Reuse a renderer started by the Vite plugin when one is active.\n * Spinning up a fresh Vite SSR server inside a host Vite dev process\n * (e.g. TanStack Start) collides on env wiring and throws\n * \"outsideEmitter undefined\".\n */\n const active = getActiveRenderer()\n const renderer = active ?? await createRenderer({\n markdown: resolvedConfig.markdown,\n root: resolvedConfig.root,\n componentDirs: normalizeComponentSources(resolvedConfig.components?.source, process.cwd()),\n vite: resolvedConfig.vite,\n })\n\n try {\n const isFile = typeof template === 'string'\n && ['.vue', '.md'].includes(extname(template))\n && !template.includes('\\n')\n\n const rendered = await renderer.render(isFile ? resolve(template) : template, resolvedConfig)\n let html = rendered.html\n\n const doctype = rendered.doctype ?? rendered.templateConfig.doctype ?? '<!DOCTYPE html>'\n\n if (rendered.templateConfig.useTransformers !== false) {\n html = await runTransformers(html, rendered.templateConfig, isFile ? resolve(template) : undefined, doctype, rendered.tailwindBlocks)\n }\n if (doctype) html = `${doctype}\\n${html}`\n\n const globalPlaintext = rendered.templateConfig.plaintext\n const sfcPlaintext = rendered.plaintext\n\n let plaintextResult: string | undefined\n\n if (globalPlaintext || sfcPlaintext) {\n const globalCfg = typeof globalPlaintext === 'object' ? globalPlaintext : {}\n const stripOptions = defu(sfcPlaintext?.options, globalCfg.options)\n plaintextResult = createPlaintext(stripForPlaintext(html), stripOptions)\n }\n\n return { html: stripForHtml(html), config: rendered.templateConfig, plaintext: plaintextResult }\n } finally {\n if (!active) await renderer.close()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAyBA,eAAsB,OACpB,UACA,QACuB;CACvB,IAAI,YAAY,MACd,MAAM,IAAI,MACR,qBAAqB,SAAS,mIAChC;CAEF,IAAI,OAAO,aAAa,YAAY,OAAO,aAAa,YAAY,OAAO,aAAa,YACtF,MAAM,IAAI,UACR,2DAA2D,OAAO,SAAS,EAC7E;CAGF,MAAM,iBAAiB,oBAAoB,MAAM;;;;;;;CAQjD,MAAM,SAAS,kBAAkB;CACjC,MAAM,WAAW,UAAU,MAAM,eAAe;EAC9C,UAAU,eAAe;EACzB,MAAM,eAAe;EACrB,eAAe,0BAA0B,eAAe,YAAY,QAAQ,QAAQ,IAAI,CAAC;EACzF,MAAM,eAAe;CACvB,CAAC;CAED,IAAI;EACF,MAAM,SAAS,OAAO,aAAa,YAC9B,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,QAAQ,QAAQ,CAAC,KAC1C,CAAC,SAAS,SAAS,IAAI;EAE5B,MAAM,WAAW,MAAM,SAAS,OAAO,SAAS,QAAQ,QAAQ,IAAI,UAAU,cAAc;EAC5F,IAAI,OAAO,SAAS;EAEpB,MAAM,UAAU,SAAS,WAAW,SAAS,eAAe,WAAW;EAEvE,IAAI,SAAS,eAAe,oBAAoB,OAC9C,OAAO,MAAM,gBAAgB,MAAM,SAAS,gBAAgB,SAAS,QAAQ,QAAQ,IAAI,KAAA,GAAW,SAAS,SAAS,cAAc;EAEtI,IAAI,SAAS,OAAO,GAAG,QAAQ,IAAI;EAEnC,MAAM,kBAAkB,SAAS,eAAe;EAChD,MAAM,eAAe,SAAS;EAE9B,IAAI;EAEJ,IAAI,mBAAmB,cAAc;GACnC,MAAM,YAAY,OAAO,oBAAoB,WAAW,kBAAkB,CAAC;GAC3E,MAAM,eAAe,KAAK,cAAc,SAAS,UAAU,OAAO;GAClE,kBAAkB,gBAAgB,kBAAkB,IAAI,GAAG,YAAY;EACzE;EAEA,OAAO;GAAE,MAAM,aAAa,IAAI;GAAG,QAAQ,SAAS;GAAgB,WAAW;EAAgB;CACjG,UAAU;EACR,IAAI,CAAC,QAAQ,MAAM,SAAS,MAAM;CACpC;AACF"}
@@ -0,0 +1,15 @@
1
+ import { FontRegistration } from "../composables/renderContext.js";
2
+ import { ChildNode } from "domhandler";
3
+
4
+ //#region src/render/injectFonts.d.ts
5
+ /**
6
+ * Inject font `<link>` tags into `<head>` and merge `@theme` declarations
7
+ * into the template's existing Tailwind `<style>` block (so the
8
+ * `font-{slug}` utilities are generated in the same compilation unit
9
+ * as the Tailwind import). Without a Tailwind import, emits plain
10
+ * `.font-{slug}` class rules so the utility still works.
11
+ */
12
+ declare function injectFonts(dom: ChildNode[], fonts: FontRegistration[], parseDom: (html: string) => ChildNode[], walk: (ast: ChildNode[], cb: (n: ChildNode) => void) => void): void;
13
+ //#endregion
14
+ export { injectFonts };
15
+ //# sourceMappingURL=injectFonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectFonts.d.ts","names":[],"sources":["../../src/render/injectFonts.ts"],"mappings":";;;;;;AAoBA;;;;;iBAAgB,WAAA,CACd,GAAA,EAAK,SAAA,IACL,KAAA,EAAO,gBAAA,IACP,QAAA,GAAW,IAAA,aAAiB,SAAA,IAC5B,IAAA,GAAO,GAAA,EAAK,SAAA,IAAa,EAAA,GAAK,CAAA,EAAG,SAAA"}
@@ -0,0 +1,45 @@
1
+ import { decodeStyleEntities } from "../utils/decodeStyleEntities.js";
2
+ //#region src/render/injectFonts.ts
3
+ const TAILWIND_IMPORT_RE = /((@import|@reference)\s+["'](tailwindcss|@maizzle\/tailwindcss)|@tailwind\s)/;
4
+ function getText(el) {
5
+ return (el.children || []).filter((c) => c.type === "text").map((c) => c.data).join("");
6
+ }
7
+ /**
8
+ * Inject font `<link>` tags into `<head>` and merge `@theme` declarations
9
+ * into the template's existing Tailwind `<style>` block (so the
10
+ * `font-{slug}` utilities are generated in the same compilation unit
11
+ * as the Tailwind import). Without a Tailwind import, emits plain
12
+ * `.font-{slug}` class rules so the utility still works.
13
+ */
14
+ function injectFonts(dom, fonts, parseDom, walk) {
15
+ if (!fonts.length) return;
16
+ let head;
17
+ let tailwindStyle;
18
+ walk(dom, (node) => {
19
+ const el = node;
20
+ if (!el.name) return;
21
+ if (el.name === "head" && !head) head = el;
22
+ if (el.name === "style" && !tailwindStyle && TAILWIND_IMPORT_RE.test(decodeStyleEntities(getText(el)))) tailwindStyle = el;
23
+ });
24
+ if (!head) return;
25
+ const linkNodes = parseDom(fonts.map((f) => `<link href="${f.url}" rel="stylesheet" media="screen">`).join(""));
26
+ for (const child of linkNodes) child.parent = head;
27
+ head.children = [...head.children || [], ...linkNodes];
28
+ if (tailwindStyle) {
29
+ const themeDecls = fonts.map((f) => ` --font-${f.slug}: ${f.declaration};`).join("\n");
30
+ const existing = getText(tailwindStyle);
31
+ tailwindStyle.children = [{
32
+ type: "text",
33
+ data: `${existing}\n@theme {\n${themeDecls}\n}\n`,
34
+ parent: tailwindStyle
35
+ }];
36
+ } else {
37
+ const styleNodes = parseDom(`<style>\n${fonts.map((f) => `.font-${f.slug} { font-family: ${f.declaration}; }`).join("\n")}\n</style>`);
38
+ for (const child of styleNodes) child.parent = head;
39
+ head.children = [...head.children || [], ...styleNodes];
40
+ }
41
+ }
42
+ //#endregion
43
+ export { injectFonts };
44
+
45
+ //# sourceMappingURL=injectFonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectFonts.js","names":[],"sources":["../../src/render/injectFonts.ts"],"sourcesContent":["import type { ChildNode, Element } from 'domhandler'\nimport type { FontRegistration } from '../composables/renderContext.ts'\nimport { decodeStyleEntities } from '../utils/decodeStyleEntities.ts'\n\nconst TAILWIND_IMPORT_RE = /((@import|@reference)\\s+[\"'](tailwindcss|@maizzle\\/tailwindcss)|@tailwind\\s)/\n\nfunction getText(el: Element): string {\n return (el.children || [])\n .filter((c: any) => c.type === 'text')\n .map((c: any) => c.data)\n .join('')\n}\n\n/**\n * Inject font `<link>` tags into `<head>` and merge `@theme` declarations\n * into the template's existing Tailwind `<style>` block (so the\n * `font-{slug}` utilities are generated in the same compilation unit\n * as the Tailwind import). Without a Tailwind import, emits plain\n * `.font-{slug}` class rules so the utility still works.\n */\nexport function injectFonts(\n dom: ChildNode[],\n fonts: FontRegistration[],\n parseDom: (html: string) => ChildNode[],\n walk: (ast: ChildNode[], cb: (n: ChildNode) => void) => void,\n): void {\n if (!fonts.length) return\n\n let head: Element | undefined\n let tailwindStyle: Element | undefined\n\n walk(dom, (node) => {\n const el = node as Element\n if (!el.name) return\n if (el.name === 'head' && !head) head = el\n if (el.name === 'style' && !tailwindStyle && TAILWIND_IMPORT_RE.test(decodeStyleEntities(getText(el)))) {\n tailwindStyle = el\n }\n })\n\n if (!head) return\n\n const linkHtml = fonts\n .map(f => `<link href=\"${f.url}\" rel=\"stylesheet\" media=\"screen\">`)\n .join('')\n const linkNodes = parseDom(linkHtml)\n for (const child of linkNodes) {\n (child as any).parent = head\n }\n head.children = [...(head.children || []), ...linkNodes] as any\n\n if (tailwindStyle) {\n const themeDecls = fonts\n .map(f => ` --font-${f.slug}: ${f.declaration};`)\n .join('\\n')\n const existing = getText(tailwindStyle)\n tailwindStyle.children = [{\n type: 'text',\n data: `${existing}\\n@theme {\\n${themeDecls}\\n}\\n`,\n parent: tailwindStyle,\n } as any]\n } else {\n const classRules = fonts\n .map(f => `.font-${f.slug} { font-family: ${f.declaration}; }`)\n .join('\\n')\n const styleNodes = parseDom(`<style>\\n${classRules}\\n</style>`)\n for (const child of styleNodes) {\n (child as any).parent = head\n }\n head.children = [...(head.children || []), ...styleNodes] as any\n }\n}\n"],"mappings":";;AAIA,MAAM,qBAAqB;AAE3B,SAAS,QAAQ,IAAqB;CACpC,QAAQ,GAAG,YAAY,CAAC,EAAA,CACrB,QAAQ,MAAW,EAAE,SAAS,MAAM,CAAC,CACrC,KAAK,MAAW,EAAE,IAAI,CAAC,CACvB,KAAK,EAAE;AACZ;;;;;;;;AASA,SAAgB,YACd,KACA,OACA,UACA,MACM;CACN,IAAI,CAAC,MAAM,QAAQ;CAEnB,IAAI;CACJ,IAAI;CAEJ,KAAK,MAAM,SAAS;EAClB,MAAM,KAAK;EACX,IAAI,CAAC,GAAG,MAAM;EACd,IAAI,GAAG,SAAS,UAAU,CAAC,MAAM,OAAO;EACxC,IAAI,GAAG,SAAS,WAAW,CAAC,iBAAiB,mBAAmB,KAAK,oBAAoB,QAAQ,EAAE,CAAC,CAAC,GACnG,gBAAgB;CAEpB,CAAC;CAED,IAAI,CAAC,MAAM;CAKX,MAAM,YAAY,SAHD,MACd,KAAI,MAAK,eAAe,EAAE,IAAI,mCAAmC,CAAC,CAClE,KAAK,EAC0B,CAAC;CACnC,KAAK,MAAM,SAAS,WAClB,MAAe,SAAS;CAE1B,KAAK,WAAW,CAAC,GAAI,KAAK,YAAY,CAAC,GAAI,GAAG,SAAS;CAEvD,IAAI,eAAe;EACjB,MAAM,aAAa,MAChB,KAAI,MAAK,YAAY,EAAE,KAAK,IAAI,EAAE,YAAY,EAAE,CAAC,CACjD,KAAK,IAAI;EACZ,MAAM,WAAW,QAAQ,aAAa;EACtC,cAAc,WAAW,CAAC;GACxB,MAAM;GACN,MAAM,GAAG,SAAS,cAAc,WAAW;GAC3C,QAAQ;EACV,CAAQ;CACV,OAAO;EAIL,MAAM,aAAa,SAAS,YAHT,MAChB,KAAI,MAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,YAAY,IAAI,CAAC,CAC9D,KAAK,IACyC,EAAE,WAAW;EAC9D,KAAK,MAAM,SAAS,YAClB,MAAe,SAAS;EAE1B,KAAK,WAAW,CAAC,GAAI,KAAK,YAAY,CAAC,GAAI,GAAG,UAAU;CAC1D;AACF"}
@@ -0,0 +1,31 @@
1
+ import { MaizzleConfig } from "../../types/config.js";
2
+ //#region src/render/parallel/buildWorker.d.ts
3
+ interface BuildWorkerData {
4
+ /** Template paths (glob-relative, as produced on the main thread) for this batch. */
5
+ templatePaths: string[];
6
+ /** Config file path to reload (undefined → load maizzle.config from cwd). */
7
+ configPath?: string;
8
+ /** Serialized, post-beforeCreate config data from the main thread. */
9
+ configData: Partial<MaizzleConfig>;
10
+ outputPath: string;
11
+ outputExtension: string;
12
+ contentBase: string;
13
+ }
14
+ interface BuildWorkerResult {
15
+ files: string[];
16
+ sfcAfterBuildCount: number;
17
+ }
18
+ /**
19
+ * Build one batch of templates in a worker thread.
20
+ *
21
+ * Config function hooks (beforeRender/afterRender/afterTransform) can't cross
22
+ * the thread boundary, so the worker reloads the config module to recover them,
23
+ * then overlays the main thread's serialized config DATA on top — so
24
+ * beforeCreate mutations and resolved values win while the reloaded config only
25
+ * backfills the lost functions. beforeCreate/afterBuild are owned by the main
26
+ * thread and never run here.
27
+ */
28
+ declare function run(data: BuildWorkerData): Promise<BuildWorkerResult>;
29
+ //#endregion
30
+ export { BuildWorkerData, BuildWorkerResult, run };
31
+ //# sourceMappingURL=buildWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildWorker.d.ts","names":[],"sources":["../../../src/render/parallel/buildWorker.ts"],"mappings":";;UAQiB,eAAA;;EAEf,aAAA;EAFe;EAIf,UAAA;;EAEA,UAAA,EAAY,OAAO,CAAC,aAAA;EACpB,UAAA;EACA,eAAA;EACA,WAAA;AAAA;AAAA,UAGe,iBAAA;EACf,KAAA;EACA,kBAAkB;AAAA;;AALP;AAGb;;;;AAEoB;AAyBpB;;;iBAAsB,GAAA,CAAI,IAAA,EAAM,eAAA,GAAkB,OAAA,CAAQ,iBAAA"}
@@ -0,0 +1,66 @@
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 "../createRenderer.js";
5
+ import { buildTemplate } from "../buildTemplate.js";
6
+ import { createDefu } from "defu";
7
+ //#region src/render/parallel/buildWorker.ts
8
+ /**
9
+ * Overlay config data with array-replace (not defu's default concat) so the
10
+ * main thread's arrays — content globs, plugin/source lists — fully replace the
11
+ * reloaded config's instead of duplicating every entry.
12
+ */
13
+ const mergeConfig = createDefu((obj, key, value) => {
14
+ if (Array.isArray(value)) {
15
+ if (!(key in obj)) obj[key] = value;
16
+ return true;
17
+ }
18
+ });
19
+ /**
20
+ * Build one batch of templates in a worker thread.
21
+ *
22
+ * Config function hooks (beforeRender/afterRender/afterTransform) can't cross
23
+ * the thread boundary, so the worker reloads the config module to recover them,
24
+ * then overlays the main thread's serialized config DATA on top — so
25
+ * beforeCreate mutations and resolved values win while the reloaded config only
26
+ * backfills the lost functions. beforeCreate/afterBuild are owned by the main
27
+ * thread and never run here.
28
+ */
29
+ async function run(data) {
30
+ const { templatePaths, configPath, configData, outputPath, outputExtension, contentBase } = data;
31
+ const config = mergeConfig(configData, await resolveConfig(configPath));
32
+ const events = new EventManager();
33
+ events.registerConfig(config);
34
+ const renderer = await createRenderer({
35
+ markdown: config.markdown,
36
+ root: config.root,
37
+ componentDirs: normalizeComponentSources(config.components?.source, process.cwd()),
38
+ vite: config.vite
39
+ });
40
+ const files = [];
41
+ let sfcAfterBuildCount = 0;
42
+ try {
43
+ for (const templatePath of templatePaths) {
44
+ const result = await buildTemplate(templatePath, {
45
+ config,
46
+ renderer,
47
+ events,
48
+ outputPath,
49
+ outputExtension,
50
+ contentBase
51
+ });
52
+ files.push(...result.files);
53
+ sfcAfterBuildCount += result.sfcAfterBuildCount;
54
+ }
55
+ } finally {
56
+ await renderer.close();
57
+ }
58
+ return {
59
+ files,
60
+ sfcAfterBuildCount
61
+ };
62
+ }
63
+ //#endregion
64
+ export { run };
65
+
66
+ //# sourceMappingURL=buildWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildWorker.js","names":[],"sources":["../../../src/render/parallel/buildWorker.ts"],"sourcesContent":["import { createDefu } from 'defu'\nimport { resolveConfig } from '../../config/index.ts'\nimport { createRenderer } from '../createRenderer.ts'\nimport { EventManager } from '../../events/index.ts'\nimport { normalizeComponentSources } from '../../utils/componentSources.ts'\nimport { buildTemplate } from '../buildTemplate.ts'\nimport type { MaizzleConfig } from '../../types/index.ts'\n\nexport interface BuildWorkerData {\n /** Template paths (glob-relative, as produced on the main thread) for this batch. */\n templatePaths: string[]\n /** Config file path to reload (undefined → load maizzle.config from cwd). */\n configPath?: string\n /** Serialized, post-beforeCreate config data from the main thread. */\n configData: Partial<MaizzleConfig>\n outputPath: string\n outputExtension: string\n contentBase: string\n}\n\nexport interface BuildWorkerResult {\n files: string[]\n sfcAfterBuildCount: number\n}\n\n/**\n * Overlay config data with array-replace (not defu's default concat) so the\n * main thread's arrays — content globs, plugin/source lists — fully replace the\n * reloaded config's instead of duplicating every entry.\n */\nconst mergeConfig = createDefu((obj, key, value) => {\n if (Array.isArray(value)) {\n if (!(key in obj)) obj[key as keyof typeof obj] = value\n return true\n }\n})\n\n/**\n * Build one batch of templates in a worker thread.\n *\n * Config function hooks (beforeRender/afterRender/afterTransform) can't cross\n * the thread boundary, so the worker reloads the config module to recover them,\n * then overlays the main thread's serialized config DATA on top — so\n * beforeCreate mutations and resolved values win while the reloaded config only\n * backfills the lost functions. beforeCreate/afterBuild are owned by the main\n * thread and never run here.\n */\nexport async function run(data: BuildWorkerData): Promise<BuildWorkerResult> {\n const { templatePaths, configPath, configData, outputPath, outputExtension, contentBase } = data\n\n const reloaded = await resolveConfig(configPath)\n const config = mergeConfig(configData, reloaded) as MaizzleConfig\n\n const events = new EventManager()\n events.registerConfig(config)\n\n const renderer = await createRenderer({\n markdown: config.markdown,\n root: config.root,\n componentDirs: normalizeComponentSources(config.components?.source, process.cwd()),\n vite: config.vite,\n })\n\n const files: string[] = []\n let sfcAfterBuildCount = 0\n\n try {\n for (const templatePath of templatePaths) {\n const result = await buildTemplate(templatePath, {\n config,\n renderer,\n events,\n outputPath,\n outputExtension,\n contentBase,\n })\n files.push(...result.files)\n sfcAfterBuildCount += result.sfcAfterBuildCount\n }\n } finally {\n await renderer.close()\n }\n\n return { files, sfcAfterBuildCount }\n}\n"],"mappings":";;;;;;;;;;;;AA8BA,MAAM,cAAc,YAAY,KAAK,KAAK,UAAU;CAClD,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,IAAI,EAAE,OAAO,MAAM,IAAI,OAA2B;EAClD,OAAO;CACT;AACF,CAAC;;;;;;;;;;;AAYD,eAAsB,IAAI,MAAmD;CAC3E,MAAM,EAAE,eAAe,YAAY,YAAY,YAAY,iBAAiB,gBAAgB;CAG5F,MAAM,SAAS,YAAY,YAAY,MADhB,cAAc,UAAU,CACA;CAE/C,MAAM,SAAS,IAAI,aAAa;CAChC,OAAO,eAAe,MAAM;CAE5B,MAAM,WAAW,MAAM,eAAe;EACpC,UAAU,OAAO;EACjB,MAAM,OAAO;EACb,eAAe,0BAA0B,OAAO,YAAY,QAAQ,QAAQ,IAAI,CAAC;EACjF,MAAM,OAAO;CACf,CAAC;CAED,MAAM,QAAkB,CAAC;CACzB,IAAI,qBAAqB;CAEzB,IAAI;EACF,KAAK,MAAM,gBAAgB,eAAe;GACxC,MAAM,SAAS,MAAM,cAAc,cAAc;IAC/C;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;GACD,MAAM,KAAK,GAAG,OAAO,KAAK;GAC1B,sBAAsB,OAAO;EAC/B;CACF,UAAU;EACR,MAAM,SAAS,MAAM;CACvB;CAEA,OAAO;EAAE;EAAO;CAAmB;AACrC"}
@@ -0,0 +1,28 @@
1
+ // Tinypool worker entry. Plain JS so it loads in a raw worker thread without a
2
+ // TS toolchain. In the published dist the implementation is already compiled to
3
+ // `.js` and is imported natively (fast); during dev/tests only the `.ts` source
4
+ // exists and is loaded through jiti.
5
+ import { fileURLToPath, pathToFileURL } from 'node:url'
6
+ import { existsSync } from 'node:fs'
7
+
8
+ let implPromise
9
+
10
+ function loadImpl() {
11
+ if (!implPromise) {
12
+ const jsPath = fileURLToPath(new URL('./buildWorker.js', import.meta.url))
13
+ if (existsSync(jsPath)) {
14
+ implPromise = import(pathToFileURL(jsPath).href)
15
+ } else {
16
+ const tsPath = fileURLToPath(new URL('./buildWorker.ts', import.meta.url))
17
+ implPromise = import('jiti').then(({ createJiti }) =>
18
+ createJiti(fileURLToPath(import.meta.url)).import(tsPath),
19
+ )
20
+ }
21
+ }
22
+ return implPromise
23
+ }
24
+
25
+ export default async function buildWorker(data) {
26
+ const impl = await loadImpl()
27
+ return impl.run(data)
28
+ }
@@ -0,0 +1,14 @@
1
+ import { Plugin } from "vite";
2
+
3
+ //#region src/render/plugins/codeBlockExtract.d.ts
4
+ /**
5
+ * Vite plugin that extracts raw slot content from <CodeBlock> tags
6
+ * and passes it as a :code prop before Vue compiles the template.
7
+ *
8
+ * This lets users write HTML naturally inside CodeBlock slots without
9
+ * Vue attempting to compile it as template syntax.
10
+ */
11
+ declare function codeBlockExtract(): Plugin;
12
+ //#endregion
13
+ export { codeBlockExtract };
14
+ //# sourceMappingURL=codeBlockExtract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeBlockExtract.d.ts","names":[],"sources":["../../../src/render/plugins/codeBlockExtract.ts"],"mappings":";;;;;AASA;;;;AAA0C;iBAA1B,gBAAA,IAAoB,MAAM"}
@@ -0,0 +1,38 @@
1
+ //#region src/render/plugins/codeBlockExtract.ts
2
+ /**
3
+ * Vite plugin that extracts raw slot content from <CodeBlock> tags
4
+ * and passes it as a :code prop before Vue compiles the template.
5
+ *
6
+ * This lets users write HTML naturally inside CodeBlock slots without
7
+ * Vue attempting to compile it as template syntax.
8
+ */
9
+ function codeBlockExtract() {
10
+ const re = /<(CodeBlock|code-block)((?:\s[^>]*?)?)>([\s\S]*?)<\/\1>/g;
11
+ return {
12
+ name: "maizzle:code-block-extract",
13
+ enforce: "pre",
14
+ transform(code, id) {
15
+ if (!id.endsWith(".vue") && !id.endsWith(".md")) return;
16
+ if (!code.includes("CodeBlock") && !code.includes("code-block")) return;
17
+ const transformed = code.replace(re, (_match, tag, attrs, content) => {
18
+ if (/(?:^|\s):code\b/.test(attrs) || /v-bind:code\b/.test(attrs)) return _match;
19
+ /**
20
+ * Strip leading/trailing blank lines, then dedent based on
21
+ * the minimum indent of non-empty lines (à la min-indent).
22
+ */
23
+ const stripped = content.replace(/^\n+/, "").replace(/\s+$/, "");
24
+ if (!stripped) return _match;
25
+ const minIndent = stripped.match(/^[ \t]*(?=\S)/gm)?.reduce((min, ws) => Math.min(min, ws.length), Infinity) ?? 0;
26
+ return `<${tag}${attrs} code="${(minIndent > 0 ? stripped.replace(new RegExp(`^[ \\t]{${minIndent}}`, "gm"), "") : stripped).replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}" />`;
27
+ });
28
+ if (transformed !== code) return {
29
+ code: transformed,
30
+ map: null
31
+ };
32
+ }
33
+ };
34
+ }
35
+ //#endregion
36
+ export { codeBlockExtract };
37
+
38
+ //# sourceMappingURL=codeBlockExtract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeBlockExtract.js","names":[],"sources":["../../../src/render/plugins/codeBlockExtract.ts"],"sourcesContent":["import type { Plugin } from 'vite'\n\n/**\n * Vite plugin that extracts raw slot content from <CodeBlock> tags\n * and passes it as a :code prop before Vue compiles the template.\n *\n * This lets users write HTML naturally inside CodeBlock slots without\n * Vue attempting to compile it as template syntax.\n */\nexport function codeBlockExtract(): Plugin {\n // Matches <CodeBlock ...>content</CodeBlock> (and kebab-case <code-block>)\n const re = /<(CodeBlock|code-block)((?:\\s[^>]*?)?)>([\\s\\S]*?)<\\/\\1>/g\n\n return {\n name: 'maizzle:code-block-extract',\n enforce: 'pre',\n transform(code: string, id: string) {\n if (!id.endsWith('.vue') && !id.endsWith('.md')) return\n if (!code.includes('CodeBlock') && !code.includes('code-block')) return\n\n const transformed = code.replace(re, (_match, tag, attrs, content) => {\n // Skip if already has a :code or v-bind:code prop\n if (/(?:^|\\s):code\\b/.test(attrs) || /v-bind:code\\b/.test(attrs)) return _match\n\n /**\n * Strip leading/trailing blank lines, then dedent based on\n * the minimum indent of non-empty lines (à la min-indent).\n */\n const stripped = content.replace(/^\\n+/, '').replace(/\\s+$/, '')\n if (!stripped) return _match\n\n const minIndent = stripped.match(/^[ \\t]*(?=\\S)/gm)\n ?.reduce((min: number, ws: string) => Math.min(min, ws.length), Infinity) ?? 0\n\n const dedented = minIndent > 0\n ? stripped.replace(new RegExp(`^[ \\\\t]{${minIndent}}`, 'gm'), '')\n : stripped\n\n // HTML-escape for safe embedding in a static attribute value.\n const escaped = dedented\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n\n return `<${tag}${attrs} code=\"${escaped}\" />`\n })\n\n if (transformed !== code) {\n return { code: transformed, map: null }\n }\n },\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,mBAA2B;CAEzC,MAAM,KAAK;CAEX,OAAO;EACL,MAAM;EACN,SAAS;EACT,UAAU,MAAc,IAAY;GAClC,IAAI,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG;GACjD,IAAI,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,KAAK,SAAS,YAAY,GAAG;GAEjE,MAAM,cAAc,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,YAAY;IAEpE,IAAI,kBAAkB,KAAK,KAAK,KAAK,gBAAgB,KAAK,KAAK,GAAG,OAAO;;;;;IAMzE,MAAM,WAAW,QAAQ,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC/D,IAAI,CAAC,UAAU,OAAO;IAEtB,MAAM,YAAY,SAAS,MAAM,iBAAiB,CAAC,EAC/C,QAAQ,KAAa,OAAe,KAAK,IAAI,KAAK,GAAG,MAAM,GAAG,QAAQ,KAAK;IAa/E,OAAO,IAAI,MAAM,MAAM,UAXN,YAAY,IACzB,SAAS,QAAQ,IAAI,OAAO,WAAW,UAAU,IAAI,IAAI,GAAG,EAAE,IAC9D,SAAA,CAID,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,QAAQ,CAAC,CACvB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAEqB,EAAE;GAC1C,CAAC;GAED,IAAI,gBAAgB,MAClB,OAAO;IAAE,MAAM;IAAa,KAAK;GAAK;EAE1C;CACF;AACF"}
@@ -0,0 +1,12 @@
1
+ import { Plugin } from "vite";
2
+
3
+ //#region src/render/plugins/markdownExtract.d.ts
4
+ /**
5
+ * Vite plugin that pre-processes <Markdown> tags:
6
+ * - Extracts slot content, dedents it, and passes as :content prop
7
+ * - Resolves `src` prop to read file contents at build time
8
+ */
9
+ declare function markdownExtract(): Plugin;
10
+ //#endregion
11
+ export { markdownExtract };
12
+ //# sourceMappingURL=markdownExtract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownExtract.d.ts","names":[],"sources":["../../../src/render/plugins/markdownExtract.ts"],"mappings":";;;;;AASA;;;iBAAgB,eAAA,IAAmB,MAAM"}
@@ -0,0 +1,49 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ //#region src/render/plugins/markdownExtract.ts
4
+ /**
5
+ * Vite plugin that pre-processes <Markdown> tags:
6
+ * - Extracts slot content, dedents it, and passes as :content prop
7
+ * - Resolves `src` prop to read file contents at build time
8
+ */
9
+ function markdownExtract() {
10
+ const re = /<(Markdown|markdown)((?:\s[^>]*?)?)>([\s\S]*?)<\/\1>/g;
11
+ const selfClosingRe = /<(Markdown|markdown)((?:\s[^>]*?\bsrc\s*=\s*"[^"]*"[^>]*?))\/>/g;
12
+ return {
13
+ name: "maizzle:markdown-extract",
14
+ enforce: "pre",
15
+ transform(code, id) {
16
+ if (!id.endsWith(".vue") && !id.endsWith(".md")) return;
17
+ if (!code.includes("Markdown") && !code.includes("markdown")) return;
18
+ let transformed = code;
19
+ transformed = transformed.replace(re, (_match, tag, attrs, content) => {
20
+ if (/(?:^|\s):?content\b/.test(attrs) || /v-bind:content\b/.test(attrs)) return _match;
21
+ const stripped = content.replace(/^\n+/, "").replace(/\s+$/, "");
22
+ if (!stripped) return _match;
23
+ const minIndent = stripped.match(/^[ \t]*(?=\S)/gm)?.reduce((min, ws) => Math.min(min, ws.length), Infinity) ?? 0;
24
+ return `<${tag}${attrs} content="${(minIndent > 0 ? stripped.replace(new RegExp(`^[ \\t]{${minIndent}}`, "gm"), "") : stripped).replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}" />`;
25
+ });
26
+ transformed = transformed.replace(selfClosingRe, (_match, tag, attrs) => {
27
+ const srcMatch = attrs.match(/\bsrc\s*=\s*"([^"]*)"/);
28
+ if (!srcMatch) return _match;
29
+ const srcPath = srcMatch[1];
30
+ const resolvedPath = resolve(dirname(id), srcPath);
31
+ let fileContent;
32
+ try {
33
+ fileContent = readFileSync(resolvedPath, "utf-8").trim();
34
+ } catch {
35
+ return _match;
36
+ }
37
+ return `<${tag}${attrs.replace(/\s*\bsrc\s*=\s*"[^"]*"/, "").replace(/\s*\bcontent\s*=\s*"[^"]*"/, "")} content="${fileContent.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}" />`;
38
+ });
39
+ if (transformed !== code) return {
40
+ code: transformed,
41
+ map: null
42
+ };
43
+ }
44
+ };
45
+ }
46
+ //#endregion
47
+ export { markdownExtract };
48
+
49
+ //# sourceMappingURL=markdownExtract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownExtract.js","names":[],"sources":["../../../src/render/plugins/markdownExtract.ts"],"sourcesContent":["import { dirname, resolve } from 'node:path'\nimport { readFileSync } from 'node:fs'\nimport type { Plugin } from 'vite'\n\n/**\n * Vite plugin that pre-processes <Markdown> tags:\n * - Extracts slot content, dedents it, and passes as :content prop\n * - Resolves `src` prop to read file contents at build time\n */\nexport function markdownExtract(): Plugin {\n const re = /<(Markdown|markdown)((?:\\s[^>]*?)?)>([\\s\\S]*?)<\\/\\1>/g\n const selfClosingRe = /<(Markdown|markdown)((?:\\s[^>]*?\\bsrc\\s*=\\s*\"[^\"]*\"[^>]*?))\\/>/g\n\n return {\n name: 'maizzle:markdown-extract',\n enforce: 'pre',\n transform(code: string, id: string) {\n if (!id.endsWith('.vue') && !id.endsWith('.md')) return\n if (!code.includes('Markdown') && !code.includes('markdown')) return\n\n let transformed = code\n\n // Handle <Markdown>content</Markdown>\n transformed = transformed.replace(re, (_match, tag, attrs, content) => {\n if (/(?:^|\\s):?content\\b/.test(attrs) || /v-bind:content\\b/.test(attrs)) return _match\n\n const stripped = content.replace(/^\\n+/, '').replace(/\\s+$/, '')\n if (!stripped) return _match\n\n const minIndent = stripped.match(/^[ \\t]*(?=\\S)/gm)\n ?.reduce((min: number, ws: string) => Math.min(min, ws.length), Infinity) ?? 0\n\n const dedented = minIndent > 0\n ? stripped.replace(new RegExp(`^[ \\\\t]{${minIndent}}`, 'gm'), '')\n : stripped\n\n const escaped = dedented\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n\n return `<${tag}${attrs} content=\"${escaped}\" />`\n })\n\n // Handle <Markdown src=\"./file.md\" /> — resolve and inline file content\n transformed = transformed.replace(selfClosingRe, (_match, tag, attrs) => {\n const srcMatch = attrs.match(/\\bsrc\\s*=\\s*\"([^\"]*)\"/)\n if (!srcMatch) return _match\n\n const srcPath = srcMatch[1]\n const resolvedPath = resolve(dirname(id), srcPath)\n\n let fileContent: string\n try {\n fileContent = readFileSync(resolvedPath, 'utf-8').trim()\n } catch {\n return _match\n }\n\n // Drop the src prop and any content the slot pass already injected,\n // so `src` resolves to a single content attribute (no duplicates).\n const cleanAttrs = attrs\n .replace(/\\s*\\bsrc\\s*=\\s*\"[^\"]*\"/, '')\n .replace(/\\s*\\bcontent\\s*=\\s*\"[^\"]*\"/, '')\n const escaped = fileContent\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n\n return `<${tag}${cleanAttrs} content=\"${escaped}\" />`\n })\n\n if (transformed !== code) {\n return { code: transformed, map: null }\n }\n },\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,kBAA0B;CACxC,MAAM,KAAK;CACX,MAAM,gBAAgB;CAEtB,OAAO;EACL,MAAM;EACN,SAAS;EACT,UAAU,MAAc,IAAY;GAClC,IAAI,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG;GACjD,IAAI,CAAC,KAAK,SAAS,UAAU,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG;GAE9D,IAAI,cAAc;GAGlB,cAAc,YAAY,QAAQ,KAAK,QAAQ,KAAK,OAAO,YAAY;IACrE,IAAI,sBAAsB,KAAK,KAAK,KAAK,mBAAmB,KAAK,KAAK,GAAG,OAAO;IAEhF,MAAM,WAAW,QAAQ,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC/D,IAAI,CAAC,UAAU,OAAO;IAEtB,MAAM,YAAY,SAAS,MAAM,iBAAiB,CAAC,EAC/C,QAAQ,KAAa,OAAe,KAAK,IAAI,KAAK,GAAG,MAAM,GAAG,QAAQ,KAAK;IAY/E,OAAO,IAAI,MAAM,MAAM,aAVN,YAAY,IACzB,SAAS,QAAQ,IAAI,OAAO,WAAW,UAAU,IAAI,IAAI,GAAG,EAAE,IAC9D,SAAA,CAGD,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,QAAQ,CAAC,CACvB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAEwB,EAAE;GAC7C,CAAC;GAGD,cAAc,YAAY,QAAQ,gBAAgB,QAAQ,KAAK,UAAU;IACvE,MAAM,WAAW,MAAM,MAAM,uBAAuB;IACpD,IAAI,CAAC,UAAU,OAAO;IAEtB,MAAM,UAAU,SAAS;IACzB,MAAM,eAAe,QAAQ,QAAQ,EAAE,GAAG,OAAO;IAEjD,IAAI;IACJ,IAAI;KACF,cAAc,aAAa,cAAc,OAAO,CAAC,CAAC,KAAK;IACzD,QAAQ;KACN,OAAO;IACT;IAaA,OAAO,IAAI,MATQ,MAChB,QAAQ,0BAA0B,EAAE,CAAC,CACrC,QAAQ,8BAA8B,EAOf,EAAE,YANZ,YACb,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,QAAQ,CAAC,CACvB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAE6B,EAAE;GAClD,CAAC;GAED,IAAI,gBAAgB,MAClB,OAAO;IAAE,MAAM;IAAa,KAAK;GAAK;EAE1C;CACF;AACF"}
@@ -0,0 +1,14 @@
1
+ import { Plugin } from "vite";
2
+
3
+ //#region src/render/plugins/rawExtract.d.ts
4
+ /**
5
+ * Vite plugin that extracts raw slot content from <Raw> tags
6
+ * and passes it as a :content prop before Vue compiles the template.
7
+ *
8
+ * Lets users write content (including `{{ }}` interpolation syntax used
9
+ * by ESPs / Handlebars / Liquid) inside <Raw> without Vue parsing it.
10
+ */
11
+ declare function rawExtract(): Plugin;
12
+ //#endregion
13
+ export { rawExtract };
14
+ //# sourceMappingURL=rawExtract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawExtract.d.ts","names":[],"sources":["../../../src/render/plugins/rawExtract.ts"],"mappings":";;;;;AASA;;;;AAAoC;iBAApB,UAAA,IAAc,MAAM"}
@@ -0,0 +1,34 @@
1
+ //#region src/render/plugins/rawExtract.ts
2
+ /**
3
+ * Vite plugin that extracts raw slot content from <Raw> tags
4
+ * and passes it as a :content prop before Vue compiles the template.
5
+ *
6
+ * Lets users write content (including `{{ }}` interpolation syntax used
7
+ * by ESPs / Handlebars / Liquid) inside <Raw> without Vue parsing it.
8
+ */
9
+ function rawExtract() {
10
+ const re = /<(Raw)((?:\s[^>]*?)?)>([\s\S]*?)<\/\1>/g;
11
+ return {
12
+ name: "maizzle:raw-extract",
13
+ enforce: "pre",
14
+ transform(code, id) {
15
+ if (!id.endsWith(".vue") && !id.endsWith(".md")) return;
16
+ if (!code.includes("Raw")) return;
17
+ const transformed = code.replace(re, (_match, tag, attrs, content) => {
18
+ if (/(?:^|\s):content\b/.test(attrs) || /v-bind:content\b/.test(attrs)) return _match;
19
+ const stripped = content.replace(/^\n+/, "").replace(/\s+$/, "");
20
+ if (!stripped) return _match;
21
+ const minIndent = stripped.match(/^[ \t]*(?=\S)/gm)?.reduce((min, ws) => Math.min(min, ws.length), Infinity) ?? 0;
22
+ return `<${tag}${attrs} content="${(minIndent > 0 ? stripped.replace(new RegExp(`^[ \\t]{${minIndent}}`, "gm"), "") : stripped).replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}" />`;
23
+ });
24
+ if (transformed !== code) return {
25
+ code: transformed,
26
+ map: null
27
+ };
28
+ }
29
+ };
30
+ }
31
+ //#endregion
32
+ export { rawExtract };
33
+
34
+ //# sourceMappingURL=rawExtract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawExtract.js","names":[],"sources":["../../../src/render/plugins/rawExtract.ts"],"sourcesContent":["import type { Plugin } from 'vite'\n\n/**\n * Vite plugin that extracts raw slot content from <Raw> tags\n * and passes it as a :content prop before Vue compiles the template.\n *\n * Lets users write content (including `{{ }}` interpolation syntax used\n * by ESPs / Handlebars / Liquid) inside <Raw> without Vue parsing it.\n */\nexport function rawExtract(): Plugin {\n const re = /<(Raw)((?:\\s[^>]*?)?)>([\\s\\S]*?)<\\/\\1>/g\n\n return {\n name: 'maizzle:raw-extract',\n enforce: 'pre',\n transform(code: string, id: string) {\n if (!id.endsWith('.vue') && !id.endsWith('.md')) return\n if (!code.includes('Raw')) return\n\n const transformed = code.replace(re, (_match, tag, attrs, content) => {\n if (/(?:^|\\s):content\\b/.test(attrs) || /v-bind:content\\b/.test(attrs)) return _match\n\n const stripped = content.replace(/^\\n+/, '').replace(/\\s+$/, '')\n if (!stripped) return _match\n\n const minIndent = stripped.match(/^[ \\t]*(?=\\S)/gm)\n ?.reduce((min: number, ws: string) => Math.min(min, ws.length), Infinity) ?? 0\n\n const dedented = minIndent > 0\n ? stripped.replace(new RegExp(`^[ \\\\t]{${minIndent}}`, 'gm'), '')\n : stripped\n\n const escaped = dedented\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n\n return `<${tag}${attrs} content=\"${escaped}\" />`\n })\n\n if (transformed !== code) {\n return { code: transformed, map: null }\n }\n },\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,aAAqB;CACnC,MAAM,KAAK;CAEX,OAAO;EACL,MAAM;EACN,SAAS;EACT,UAAU,MAAc,IAAY;GAClC,IAAI,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG;GACjD,IAAI,CAAC,KAAK,SAAS,KAAK,GAAG;GAE3B,MAAM,cAAc,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,YAAY;IACpE,IAAI,qBAAqB,KAAK,KAAK,KAAK,mBAAmB,KAAK,KAAK,GAAG,OAAO;IAE/E,MAAM,WAAW,QAAQ,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC/D,IAAI,CAAC,UAAU,OAAO;IAEtB,MAAM,YAAY,SAAS,MAAM,iBAAiB,CAAC,EAC/C,QAAQ,KAAa,OAAe,KAAK,IAAI,KAAK,GAAG,MAAM,GAAG,QAAQ,KAAK;IAY/E,OAAO,IAAI,MAAM,MAAM,aAVN,YAAY,IACzB,SAAS,QAAQ,IAAI,OAAO,WAAW,UAAU,IAAI,IAAI,GAAG,EAAE,IAC9D,SAAA,CAGD,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,QAAQ,CAAC,CACvB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAEwB,EAAE;GAC7C,CAAC;GAED,IAAI,gBAAgB,MAClB,OAAO;IAAE,MAAM;IAAa,KAAK;GAAK;EAE1C;CACF;AACF"}
@@ -0,0 +1,18 @@
1
+ import { Plugin } from "vite";
2
+
3
+ //#region src/render/plugins/rowSourceLocation.d.ts
4
+ /**
5
+ * Vite plugin that injects `data-maizzle-loc="<file>:<line>"` into every
6
+ * `<Row>`/`<row>` opening tag in user templates.
7
+ *
8
+ * Used by Row.vue's runtime to point the user at the exact line in their
9
+ * template when they misuse Row (e.g. without a Column child).
10
+ *
11
+ * Only transforms inside `<template>` blocks of SFCs (or the entire file
12
+ * for `.md` templates) so `<Row>` mentions in `<script>` blocks (e.g. in
13
+ * string literals or comments) are left untouched.
14
+ */
15
+ declare function rowSourceLocation(): Plugin;
16
+ //#endregion
17
+ export { rowSourceLocation };
18
+ //# sourceMappingURL=rowSourceLocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowSourceLocation.d.ts","names":[],"sources":["../../../src/render/plugins/rowSourceLocation.ts"],"mappings":";;;;;AAaA;;;;AAA2C;;;;;iBAA3B,iBAAA,IAAqB,MAAM"}
@@ -0,0 +1,45 @@
1
+ //#region src/render/plugins/rowSourceLocation.ts
2
+ /**
3
+ * Vite plugin that injects `data-maizzle-loc="<file>:<line>"` into every
4
+ * `<Row>`/`<row>` opening tag in user templates.
5
+ *
6
+ * Used by Row.vue's runtime to point the user at the exact line in their
7
+ * template when they misuse Row (e.g. without a Column child).
8
+ *
9
+ * Only transforms inside `<template>` blocks of SFCs (or the entire file
10
+ * for `.md` templates) so `<Row>` mentions in `<script>` blocks (e.g. in
11
+ * string literals or comments) are left untouched.
12
+ */
13
+ function rowSourceLocation() {
14
+ const tagRe = /(<(?:Row|row))(\b[^>]*?)(\/?>)/g;
15
+ function injectLoc(html, htmlOffset, fullCode, id) {
16
+ return html.replace(tagRe, (match, tag, attrs, end, localOffset) => {
17
+ if (/\bdata-maizzle-loc\s*=/.test(attrs)) return match;
18
+ const absoluteOffset = htmlOffset + localOffset;
19
+ return `${tag}${attrs} data-maizzle-loc="${id}:${fullCode.slice(0, absoluteOffset).split("\n").length}"${end}`;
20
+ });
21
+ }
22
+ return {
23
+ name: "maizzle:row-loc",
24
+ enforce: "pre",
25
+ transform(code, id) {
26
+ const isVue = id.endsWith(".vue");
27
+ const isMd = id.endsWith(".md");
28
+ if (!isVue && !isMd) return;
29
+ if (!code.includes("<Row") && !code.includes("<row")) return;
30
+ let transformed;
31
+ if (isVue) transformed = code.replace(/(<template\b[^>]*>)([\s\S]*?)(<\/template>)/g, (_match, open, inner, close, offset) => {
32
+ return open + injectLoc(inner, offset + open.length, code, id) + close;
33
+ });
34
+ else transformed = injectLoc(code, 0, code, id);
35
+ if (transformed !== code) return {
36
+ code: transformed,
37
+ map: null
38
+ };
39
+ }
40
+ };
41
+ }
42
+ //#endregion
43
+ export { rowSourceLocation };
44
+
45
+ //# sourceMappingURL=rowSourceLocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowSourceLocation.js","names":[],"sources":["../../../src/render/plugins/rowSourceLocation.ts"],"sourcesContent":["import type { Plugin } from 'vite'\n\n/**\n * Vite plugin that injects `data-maizzle-loc=\"<file>:<line>\"` into every\n * `<Row>`/`<row>` opening tag in user templates.\n *\n * Used by Row.vue's runtime to point the user at the exact line in their\n * template when they misuse Row (e.g. without a Column child).\n *\n * Only transforms inside `<template>` blocks of SFCs (or the entire file\n * for `.md` templates) so `<Row>` mentions in `<script>` blocks (e.g. in\n * string literals or comments) are left untouched.\n */\nexport function rowSourceLocation(): Plugin {\n const tagRe = /(<(?:Row|row))(\\b[^>]*?)(\\/?>)/g\n\n function injectLoc(html: string, htmlOffset: number, fullCode: string, id: string): string {\n return html.replace(tagRe, (match, tag, attrs, end, localOffset: number) => {\n if (/\\bdata-maizzle-loc\\s*=/.test(attrs)) return match\n const absoluteOffset = htmlOffset + localOffset\n const line = fullCode.slice(0, absoluteOffset).split('\\n').length\n return `${tag}${attrs} data-maizzle-loc=\"${id}:${line}\"${end}`\n })\n }\n\n return {\n name: 'maizzle:row-loc',\n enforce: 'pre',\n transform(code, id) {\n const isVue = id.endsWith('.vue')\n const isMd = id.endsWith('.md')\n if (!isVue && !isMd) return\n if (!code.includes('<Row') && !code.includes('<row')) return\n\n let transformed: string\n\n if (isVue) {\n /**\n * Replace inside every <template>...</template> block, leaving\n * <script> and <style> blocks alone.\n */\n const templateBlock = /(<template\\b[^>]*>)([\\s\\S]*?)(<\\/template>)/g\n transformed = code.replace(templateBlock, (_match, open, inner, close, offset: number) => {\n const innerOffset = offset + open.length\n return open + injectLoc(inner, innerOffset, code, id) + close\n })\n } else {\n transformed = injectLoc(code, 0, code, id)\n }\n\n if (transformed !== code) {\n return { code: transformed, map: null }\n }\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAgB,oBAA4B;CAC1C,MAAM,QAAQ;CAEd,SAAS,UAAU,MAAc,YAAoB,UAAkB,IAAoB;EACzF,OAAO,KAAK,QAAQ,QAAQ,OAAO,KAAK,OAAO,KAAK,gBAAwB;GAC1E,IAAI,yBAAyB,KAAK,KAAK,GAAG,OAAO;GACjD,MAAM,iBAAiB,aAAa;GAEpC,OAAO,GAAG,MAAM,MAAM,qBAAqB,GAAG,GADjC,SAAS,MAAM,GAAG,cAAc,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OACL,GAAG;EAC3D,CAAC;CACH;CAEA,OAAO;EACL,MAAM;EACN,SAAS;EACT,UAAU,MAAM,IAAI;GAClB,MAAM,QAAQ,GAAG,SAAS,MAAM;GAChC,MAAM,OAAO,GAAG,SAAS,KAAK;GAC9B,IAAI,CAAC,SAAS,CAAC,MAAM;GACrB,IAAI,CAAC,KAAK,SAAS,MAAM,KAAK,CAAC,KAAK,SAAS,MAAM,GAAG;GAEtD,IAAI;GAEJ,IAAI,OAMF,cAAc,KAAK,QAAQ,iDAAgB,QAAQ,MAAM,OAAO,OAAO,WAAmB;IAExF,OAAO,OAAO,UAAU,OADJ,SAAS,KAAK,QACU,MAAM,EAAE,IAAI;GAC1D,CAAC;QAED,cAAc,UAAU,MAAM,GAAG,MAAM,EAAE;GAG3C,IAAI,gBAAgB,MAClB,OAAO;IAAE,MAAM;IAAa,KAAK;GAAK;EAE1C;CACF;AACF"}
@@ -1,12 +1,14 @@
1
- import { MaizzleConfig } from "./types/config.mjs";
1
+ import { MaizzleConfig } from "./types/config.js";
2
2
  import { ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/serve.d.ts
5
5
  interface ServeOptions {
6
6
  config?: Partial<MaizzleConfig> | string;
7
+ /** Override the dev server port (takes precedence over config.server.port) */
8
+ port?: number;
7
9
  /** Expose the server on the network (e.g. --host) */
8
10
  host?: boolean | string;
9
- /** When true, suppresses the banner/URL output (used by the Vite plugin, which prints its own) */
11
+ /** When true, suppresses the startup banner/URL output. */
10
12
  silent?: boolean;
11
13
  }
12
14
  /**
@@ -22,4 +24,4 @@ declare function serve(options?: ServeOptions): Promise<ViteDevServer>;
22
24
  declare function printBanner(server: ViteDevServer, startupTime?: number): void;
23
25
  //#endregion
24
26
  export { ServeOptions, printBanner, serve };
25
- //# sourceMappingURL=serve.d.mts.map
27
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","names":[],"sources":["../src/serve.ts"],"mappings":";;;;UAmDiB,YAAA;EACf,MAAA,GAAS,OAAO,CAAC,aAAA;;EAEjB,IAAA;EAH2B;EAK3B,IAAA;EAJgB;EAMhB,MAAA;AAAA;;;;;;AAAM;AAYR;;;iBAAsB,KAAA,CAAM,OAAA,GAAS,YAAA,GAAiB,OAAA,CAAA,aAAA;AAAA,iBAmnBtC,WAAA,CAAY,MAAA,EAAQ,aAAa,EAAE,WAAA"}