@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
@@ -1,6 +1,14 @@
1
+ <script lang="ts">
2
+ const warnedLocations = new Set<string>()
3
+ </script>
4
+
1
5
  <script setup lang="ts">
2
- import { Comment, computed, createStaticVNode, inject, provide, useAttrs, useSlots, Fragment } from 'vue'
3
- import type { ComputedRef, VNode } from 'vue'
6
+ import { Comment, Text, computed, createStaticVNode, provide, useAttrs, useSlots, Fragment } from 'vue'
7
+ import type { VNode } from 'vue'
8
+ import { twMerge } from 'tailwind-merge'
9
+ import Column from './Column.vue'
10
+ import { hasWidthInStyle, hasWidthUtility, normalizeToPixels, outlookFallbackProp } from './utils.ts'
11
+ import { useOutlookFallback } from '../composables/useOutlookFallback'
4
12
 
5
13
  defineOptions({ inheritAttrs: false })
6
14
 
@@ -8,10 +16,12 @@ const attrs = useAttrs()
8
16
 
9
17
  const props = defineProps({
10
18
  /**
11
- * Override the inherited container width.
19
+ * Explicit row width.
12
20
  *
13
- * Used to calculate column widths. Inherited from the
14
- * parent `Container` by default.
21
+ * Used as the width source for column min-width calculation.
22
+ * When not set, the nearest sized ancestor (`Container`, `Section`,
23
+ * outer `Column`, or this row's own width class/inline style) is
24
+ * used instead.
15
25
  */
16
26
  width: {
17
27
  type: [String, Number],
@@ -27,9 +37,22 @@ const props = defineProps({
27
37
  cols: {
28
38
  type: Number,
29
39
  default: null
30
- }
40
+ },
41
+ /**
42
+ * Toggle Outlook (MSO) and VML fallback markup for this
43
+ * component and all descendants.
44
+ *
45
+ * When `false`, skips MSO ghost tables, VML shapes,
46
+ * `xmlns:v`/`xmlns:o` attributes, and mso-specific CSS
47
+ * in all built-in components.
48
+ *
49
+ * @default true
50
+ */
51
+ outlookFallback: outlookFallbackProp,
31
52
  })
32
53
 
54
+ const outlookFallback = useOutlookFallback(props.outlookFallback)
55
+
33
56
  const slots = useSlots()
34
57
 
35
58
  function countChildren(vnodes: VNode[]): number {
@@ -46,6 +69,41 @@ function countChildren(vnodes: VNode[]): number {
46
69
  return count
47
70
  }
48
71
 
72
+ function hasColumnChild(vnodes: VNode[]): boolean {
73
+ for (const vnode of vnodes) {
74
+ if (vnode.type === Fragment && Array.isArray(vnode.children)) {
75
+ if (hasColumnChild(vnode.children as VNode[])) return true
76
+ } else if (vnode.type === Column) {
77
+ return true
78
+ } else if (
79
+ typeof vnode.type === 'object'
80
+ && vnode.type !== null
81
+ && '__name' in vnode.type
82
+ && (vnode.type as { __name?: string }).__name === 'Column'
83
+ ) {
84
+ return true
85
+ }
86
+ }
87
+ return false
88
+ }
89
+
90
+ function hasMeaningfulContent(vnodes: VNode[]): boolean {
91
+ for (const vnode of vnodes) {
92
+ if (vnode.type === Comment) continue
93
+ if (vnode.type === Fragment && Array.isArray(vnode.children)) {
94
+ if (hasMeaningfulContent(vnode.children as VNode[])) return true
95
+ continue
96
+ }
97
+ if (vnode.type === Text) {
98
+ if (typeof vnode.children === 'string' && vnode.children.trim()) return true
99
+ continue
100
+ }
101
+ if (typeof vnode.type === 'symbol') continue
102
+ return true
103
+ }
104
+ return false
105
+ }
106
+
49
107
  const columnCount = computed(() => {
50
108
  if (props.cols) return props.cols
51
109
 
@@ -53,26 +111,45 @@ const columnCount = computed(() => {
53
111
  return countChildren(children) || 1
54
112
  })
55
113
 
56
- const containerWidth = inject<ComputedRef<string | number> | null>('containerWidth', null)
114
+ provide('columnCount', columnCount)
57
115
 
58
- const rowWidth = computed(() => props.width ?? containerWidth?.value ?? '37.5em')
116
+ const userStyle = computed(() => {
117
+ const s = attrs.style
118
+ if (!s) return ''
119
+ return typeof s === 'object'
120
+ ? Object.entries(s).map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${v}`).join('; ')
121
+ : String(s)
122
+ })
59
123
 
60
- function divideValue(value: string | number, divisor: number): string {
61
- if (typeof value === 'number') {
62
- return `${parseFloat((value / divisor).toFixed(2))}px`
63
- }
124
+ const userHasWidth = computed(() => {
125
+ const cls = (attrs.class as string) ?? ''
126
+ return hasWidthUtility(cls) || hasWidthInStyle(userStyle.value)
127
+ })
64
128
 
65
- const num = Number.parseFloat(value)
66
- const unit = value.replace(String(num), '') || 'px'
129
+ const colWidthSource = computed(() => {
130
+ if (props.width != null) return normalizeToPixels(props.width)
131
+ if (userHasWidth.value) return ''
132
+ return null
133
+ })
67
134
 
68
- return `${parseFloat((num / divisor).toFixed(2))}${unit}`
69
- }
135
+ const restAttrs = computed(() => {
136
+ const { style: _, class: __, 'data-maizzle-loc': ___, ...rest } = attrs
137
+ return rest
138
+ })
70
139
 
71
- provide('columnMinWidth', computed(() => divideValue(rowWidth.value, columnCount.value)))
72
- provide('columnMsoWidth', computed(() => `${Math.round(100 / columnCount.value)}%`))
140
+ /**
141
+ * `font-size: 0;` removes the whitespace gap between inline-block
142
+ * children. Lives in a class so users can override (e.g. via a custom
143
+ * `text-*`) and twMerge resolves the conflict cleanly instead of the
144
+ * inline declaration silently shadowing the user's class.
145
+ */
146
+ const baseClass = 'text-0'
147
+ const mergedClass = computed(() => twMerge(baseClass, (attrs.class as string) ?? ''))
148
+
149
+ const divStyle = computed(() => userStyle.value || undefined)
73
150
 
74
151
  const MsoBefore = () => createStaticVNode(
75
- '<!--[if mso]><table role="none" cellpadding="0" cellspacing="0" width="100%"><tr><![endif]-->',
152
+ '<!--[if mso]><table role="none" cellpadding="0" cellspacing="0" style="width: 100%"><tr><![endif]-->',
76
153
  1
77
154
  )
78
155
 
@@ -80,12 +157,28 @@ const MsoAfter = () => createStaticVNode(
80
157
  '<!--[if mso]></tr></table><![endif]-->',
81
158
  1
82
159
  )
160
+
161
+ const initialChildren = slots.default?.() ?? []
162
+ if (hasMeaningfulContent(initialChildren) && !hasColumnChild(initialChildren)) {
163
+ const loc = (attrs['data-maizzle-loc'] as string | undefined) ?? '<unknown location>'
164
+ if (!warnedLocations.has(loc)) {
165
+ warnedLocations.add(loc)
166
+ const display = loc.split('/').pop() ?? loc
167
+ const suffix = outlookFallback ? ' Layout will break in Outlook.' : ''
168
+ console.warn(`[maizzle] <Row> in ${display} has no <Column> inside it.${suffix}`)
169
+ }
170
+ }
83
171
  </script>
84
172
 
85
173
  <template>
86
- <MsoBefore />
87
- <div v-bind="attrs" style="font-size: 0;">
174
+ <MsoBefore v-if="outlookFallback" />
175
+ <div
176
+ v-bind="restAttrs"
177
+ :class="mergedClass"
178
+ :style="divStyle"
179
+ :data-maizzle-cw="colWidthSource"
180
+ >
88
181
  <slot />
89
182
  </div>
90
- <MsoAfter />
183
+ <MsoAfter v-if="outlookFallback" />
91
184
  </template>
@@ -1,6 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, createStaticVNode, useAttrs } from 'vue'
3
- import { normalizeToPixels } from './utils.ts'
3
+ import { twMerge } from 'tailwind-merge'
4
+ import { hasWidthInStyle, hasWidthUtility, nextId, normalizeToPixels, outlookFallbackProp } from './utils.ts'
5
+ import { useOutlookFallback } from '../composables/useOutlookFallback'
4
6
 
5
7
  defineOptions({ inheritAttrs: false })
6
8
 
@@ -12,11 +14,14 @@ const props = defineProps({
12
14
  *
13
15
  * Applied as `max-width` on the div and as `width` on the MSO table.
14
16
  *
15
- * @default '100%'
17
+ * When not set, the MSO table width is auto-derived from a width
18
+ * utility class (e.g. `max-w-md`) or inline style (`max-width`/
19
+ * `width`) on the component, after CSS inlining. Falls back to
20
+ * `100%` when no width source is provided.
16
21
  */
17
22
  width: {
18
23
  type: [String, Number],
19
- default: '100%'
24
+ default: null
20
25
  },
21
26
  /**
22
27
  * Inline CSS applied only to the MSO `<td>` element.
@@ -28,10 +33,21 @@ const props = defineProps({
28
33
  msoStyle: {
29
34
  type: String,
30
35
  default: undefined
31
- }
36
+ },
37
+ /**
38
+ * Toggle Outlook (MSO) and VML fallback markup for this
39
+ * component and all descendants.
40
+ *
41
+ * When `false`, skips MSO ghost tables, VML shapes,
42
+ * `xmlns:v`/`xmlns:o` attributes, and mso-specific CSS
43
+ * in all built-in components.
44
+ *
45
+ * @default true
46
+ */
47
+ outlookFallback: outlookFallbackProp,
32
48
  })
33
49
 
34
- const hasCustomWidth = computed(() => props.width !== '100%')
50
+ const outlookFallback = useOutlookFallback(props.outlookFallback)
35
51
 
36
52
  const userStyle = computed(() => {
37
53
  const s = attrs.style
@@ -41,32 +57,46 @@ const userStyle = computed(() => {
41
57
  : String(s)
42
58
  })
43
59
 
44
- const divStyle = computed(() => {
45
- const parts: string[] = []
46
- if (hasCustomWidth.value) parts.push(`max-width: ${normalizeToPixels(props.width)}`)
47
- if (userStyle.value) parts.push(userStyle.value)
48
- return parts.length ? parts.join('; ') : undefined
60
+ const userHasWidth = computed(() => {
61
+ const cls = (attrs.class as string) ?? ''
62
+ return hasWidthUtility(cls) || hasWidthInStyle(userStyle.value)
63
+ })
64
+
65
+ const useMarker = outlookFallback && props.width == null && userHasWidth.value
66
+ const msoId = useMarker ? nextId('s') : null
67
+ const tdId = outlookFallback ? nextId('st') : null
68
+
69
+ const mergedClass = computed(() => {
70
+ const userClass = (attrs.class as string) ?? ''
71
+ if (props.width == null) return userClass || undefined
72
+ return twMerge(`max-w-[${normalizeToPixels(props.width)}]`, userClass)
49
73
  })
50
74
 
75
+ const divStyle = computed(() => userStyle.value || undefined)
76
+
51
77
  const restAttrs = computed(() => {
52
- const { style: _, ...rest } = attrs
78
+ const { style: _, class: __, ...rest } = attrs
53
79
  return rest
54
80
  })
55
81
 
56
- const tdStyles = computed(() => {
57
- const parts: string[] = []
58
- if (userStyle.value) parts.push(userStyle.value)
59
- if (props.msoStyle) parts.push(props.msoStyle)
60
- return parts.length ? parts.join('; ') : ''
82
+ const msoWidth = computed(() => {
83
+ if (props.width != null) return normalizeToPixels(props.width)
84
+ if (useMarker) return `__MAIZZLE_MSOW_${msoId}__`
85
+ return '100%'
86
+ })
87
+
88
+ const colWidthSource = computed(() => {
89
+ if (props.width != null) return normalizeToPixels(props.width)
90
+ if (userHasWidth.value) return ''
91
+ return null
61
92
  })
62
93
 
63
- const MsoBefore = () => {
64
- const tdStyle = tdStyles.value ? ` style="${tdStyles.value}"` : ''
65
- return createStaticVNode(
66
- `<!--[if mso]><table role="none" cellpadding="0" cellspacing="0" style="width: ${normalizeToPixels(props.width)}"><tr><td${tdStyle}><![endif]-->`,
67
- 1
68
- )
69
- }
94
+ const tdMarker = tdId ? `__MAIZZLE_MSOTDSTYLE_${tdId}__` : ''
95
+
96
+ const MsoBefore = () => createStaticVNode(
97
+ `<!--[if mso]><table role="none" cellpadding="0" cellspacing="0" style="width: ${msoWidth.value}"><tr><td${tdMarker}><![endif]-->`,
98
+ 1
99
+ )
70
100
 
71
101
  const MsoAfter = () => createStaticVNode(
72
102
  '<!--[if mso]></td></tr></table><![endif]-->',
@@ -75,9 +105,18 @@ const MsoAfter = () => createStaticVNode(
75
105
  </script>
76
106
 
77
107
  <template>
78
- <MsoBefore />
79
- <div v-bind="restAttrs" :style="divStyle">
108
+ <MsoBefore v-if="outlookFallback" />
109
+ <div
110
+ v-bind="restAttrs"
111
+ :class="mergedClass"
112
+ :style="divStyle"
113
+ :data-maizzle-msow-id="msoId"
114
+ :data-maizzle-msow-fallback="useMarker ? '100%' : null"
115
+ :data-maizzle-cw="colWidthSource"
116
+ :data-maizzle-mso-td-id="tdId"
117
+ :data-maizzle-mso-style="tdId && props.msoStyle ? props.msoStyle : null"
118
+ >
80
119
  <slot />
81
120
  </div>
82
- <MsoAfter />
121
+ <MsoAfter v-if="outlookFallback" />
83
122
  </template>
@@ -1,6 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { computed } from 'vue'
3
- import { normalizeToPixels } from './utils.ts'
2
+ import { computed, h, useAttrs } from 'vue'
3
+ import { normalizeToPixels, outlookFallbackProp } from './utils.ts'
4
+ import { useOutlookFallback } from '../composables/useOutlookFallback'
5
+
6
+ defineOptions({ inheritAttrs: false })
4
7
 
5
8
  const props = defineProps({
6
9
  /** The type of spacer. */
@@ -8,44 +11,41 @@ const props = defineProps({
8
11
  type: String as () => 'vertical' | 'horizontal',
9
12
  default: 'vertical'
10
13
  },
11
- /** The height of the spacer (vertical). */
12
- height: {
13
- type: [String, Number],
14
- default: null
15
- },
16
14
  /** The width of the spacer (horizontal). */
17
15
  width: {
18
16
  type: [String, Number],
19
17
  default: 16
20
18
  },
21
- /** The alternative height to use in Outlook. */
22
- msoHeight: {
23
- type: [String, Number],
24
- default: null
25
- }
19
+ outlookFallback: outlookFallbackProp,
26
20
  })
27
21
 
28
- function parsePixelValue(value: string | number): number {
29
- if (typeof value === 'number') return value
30
- return Number.parseFloat(value) || 0
31
- }
22
+ const attrs = useAttrs()
23
+ const outlookFallback = useOutlookFallback(props.outlookFallback)
32
24
 
33
- const verticalStyles = computed(() => {
34
- const s = []
25
+ const HEIGHT_RE = /(?:^|\s)h-([\w./\-[\]%]+)/g
26
+ const LEADING_RE = /(?:^|\s)leading-/
35
27
 
36
- if (props.height) {
37
- s.push(`line-height: ${normalizeToPixels(props.height)};`)
38
- }
28
+ const verticalClass = computed(() => {
29
+ const userClass = (attrs.class as string) || ''
30
+ if (!userClass) return ''
39
31
 
40
- if (props.msoHeight) {
41
- s.push(`mso-line-height-alt: ${normalizeToPixels(props.msoHeight)};`)
42
- }
32
+ const heights = [...userClass.matchAll(HEIGHT_RE)]
33
+ const stripped = userClass.replace(HEIGHT_RE, ' ').replace(/\s+/g, ' ').trim()
43
34
 
44
- return s.join('')
35
+ if (!heights.length) return stripped
36
+ if (LEADING_RE.test(stripped)) return stripped
37
+
38
+ return `${stripped} leading-${heights[heights.length - 1][1]}`.trim()
45
39
  })
46
40
 
41
+ function parsePixelValue(value: string | number): number {
42
+ if (typeof value === 'number') return value
43
+ return Number.parseFloat(value) || 0
44
+ }
45
+
47
46
  const horizontalStyles = computed(() => {
48
- return `display:inline-block; width: ${normalizeToPixels(props.width)}; font-size: 16px;${msoFontWidth.value}`
47
+ const mso = outlookFallback ? msoFontWidth.value : ''
48
+ return `display:inline-block; width: ${normalizeToPixels(props.width)}; font-size: 16px;${mso}`
49
49
  })
50
50
 
51
51
  const msoFontWidth = computed(() => {
@@ -66,14 +66,20 @@ const emspCount = computed(() => {
66
66
  })
67
67
 
68
68
  const emsps = computed(() => '\u2003'.repeat(emspCount.value))
69
+
70
+ const HorizontalSpacer = () =>
71
+ h('i', { ...attrs, style: horizontalStyles.value }, emsps.value)
69
72
  </script>
70
73
 
71
74
  <template>
72
75
  <template v-if="type === 'horizontal'">
73
- <i :style="horizontalStyles">{{ emsps }}</i>
76
+ <HorizontalSpacer />
74
77
  </template>
75
78
  <template v-else>
76
- <div v-if="height" role="separator" :style="verticalStyles">&zwj;</div>
77
- <div v-else role="separator">&zwj;</div>
79
+ <div
80
+ role="separator"
81
+ v-bind="{ ...$attrs, class: undefined }"
82
+ :class="verticalClass"
83
+ >&zwj;</div>
78
84
  </template>
79
85
  </template>
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import { defineComponent, createCommentVNode, inject, h, Fragment, type VNode } from 'vue'
3
+ import { RenderContextKey } from '../composables/renderContext'
4
+
5
+ /**
6
+ * Walk a slot's vnode tree and concatenate its text content.
7
+ * Handles plain text children, arrays, and Comment vnodes.
8
+ * Static text in <template #config>...</template> compiles into
9
+ * text vnodes whose `children` is a string — that's our path.
10
+ */
11
+ function vnodeText(input: unknown): string {
12
+ if (input == null || input === false) return ''
13
+ if (typeof input === 'string') return input
14
+ if (typeof input === 'number') return String(input)
15
+ if (Array.isArray(input)) return input.map(vnodeText).join('')
16
+
17
+ const v = input as VNode
18
+ if (typeof v.children === 'string') return v.children
19
+ if (Array.isArray(v.children)) return vnodeText(v.children)
20
+ return ''
21
+ }
22
+
23
+ export default defineComponent({
24
+ name: 'Tailwind',
25
+ setup(_, { slots }) {
26
+ const ctx = inject(RenderContextKey)!
27
+ if (!ctx.tailwindBlocks) ctx.tailwindBlocks = []
28
+ const id = `tw${ctx.tailwindBlocks.length}`
29
+
30
+ /**
31
+ * Extract optional `#config` slot content as raw CSS. Evaluated at setup
32
+ * time; the slot is NOT rendered into the document.
33
+ */
34
+ const css = slots.config ? vnodeText(slots.config()).trim() : undefined
35
+
36
+ ctx.tailwindBlocks.push({ id, css: css || undefined })
37
+
38
+ return () => h(Fragment, null, [
39
+ createCommentVNode(`mz-tw:${id}`),
40
+ slots.default?.(),
41
+ createCommentVNode(`/mz-tw:${id}`),
42
+ ])
43
+ },
44
+ })
45
+ </script>
@@ -18,12 +18,12 @@ const props = defineProps({
18
18
 
19
19
  const attrs = useAttrs()
20
20
 
21
- const defaultClass = computed(() => props.as === 'span' ? 'text-base' : 'm-0 my-4 text-base')
22
- const mergedClass = computed(() => twMerge(defaultClass.value, attrs.class as string))
21
+ const defaultClass = computed(() => props.as === 'span' ? '' : 'mt-4 text-base')
22
+ const mergedClass = computed(() => twMerge(defaultClass.value, attrs.class as string) || undefined)
23
23
  </script>
24
24
 
25
25
  <template>
26
- <component :is="props.as" v-bind="$attrs" :class="mergedClass">
26
+ <component :is="props.as" v-bind="{ ...$attrs, class: mergedClass }">
27
27
  <slot />
28
28
  </component>
29
29
  </template>