@maizzle/framework 6.0.0-rc.2 → 6.0.0-rc.21

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 (551) hide show
  1. package/README.md +3 -3
  2. package/bin/maizzle.mjs +1 -1
  3. package/dist/build.d.ts +20 -0
  4. package/dist/build.d.ts.map +1 -0
  5. package/dist/build.js +163 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/components/Body.vue +128 -0
  8. package/dist/components/Button.vue +148 -52
  9. package/dist/components/CodeBlock.vue +69 -0
  10. package/dist/components/CodeInline.vue +49 -0
  11. package/dist/components/Column.vue +108 -0
  12. package/dist/components/Container.vue +123 -0
  13. package/dist/components/Font.vue +96 -0
  14. package/dist/components/Head.vue +30 -0
  15. package/dist/components/Heading.vue +28 -0
  16. package/dist/components/Hr.vue +33 -0
  17. package/dist/components/Html.vue +137 -0
  18. package/dist/components/Img.vue +70 -0
  19. package/dist/components/Layout.vue +143 -0
  20. package/dist/components/Link.vue +26 -0
  21. package/dist/components/Markdown.vue +89 -0
  22. package/dist/components/MarkdownLayout.vue +39 -0
  23. package/dist/components/NotPlaintext.vue +14 -0
  24. package/dist/components/Outlook.vue +74 -11
  25. package/dist/components/OutlookBg.vue +241 -0
  26. package/dist/components/Overlap.vue +156 -0
  27. package/dist/components/Plaintext.vue +14 -0
  28. package/dist/components/Preheader.vue +15 -0
  29. package/dist/components/QrCode.vue +157 -0
  30. package/dist/components/Raw.vue +28 -0
  31. package/dist/components/Row.vue +184 -0
  32. package/dist/components/Section.vue +124 -0
  33. package/dist/components/Spacer.vue +70 -21
  34. package/dist/components/Tailwind.vue +43 -0
  35. package/dist/components/Text.vue +29 -0
  36. package/dist/components/utils.d.ts +28 -0
  37. package/dist/components/utils.d.ts.map +1 -0
  38. package/dist/components/utils.js +50 -0
  39. package/dist/components/utils.js.map +1 -0
  40. package/dist/components/utils.ts +51 -0
  41. package/dist/composables/{defineConfig.d.mts → defineConfig.d.ts} +2 -2
  42. package/dist/composables/defineConfig.d.ts.map +1 -0
  43. package/dist/composables/{defineConfig.mjs → defineConfig.js} +4 -5
  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.mjs → renderContext.js} +2 -2
  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.mts → useConfig.d.ts} +2 -2
  54. package/dist/composables/useConfig.d.ts.map +1 -0
  55. package/dist/composables/{useConfig.mjs → useConfig.js} +2 -3
  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 +35 -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/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
  78. package/dist/composables/usePlaintext.d.ts.map +1 -0
  79. package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
  80. package/dist/composables/usePlaintext.js.map +1 -0
  81. package/dist/composables/usePreheader.d.ts +24 -0
  82. package/dist/composables/usePreheader.d.ts.map +1 -0
  83. package/dist/composables/usePreheader.js +28 -0
  84. package/dist/composables/usePreheader.js.map +1 -0
  85. package/dist/composables/useTransformers.d.ts +34 -0
  86. package/dist/composables/useTransformers.d.ts.map +1 -0
  87. package/dist/composables/useTransformers.js +48 -0
  88. package/dist/composables/useTransformers.js.map +1 -0
  89. package/dist/composables/useUrlQuery.d.ts +19 -0
  90. package/dist/composables/useUrlQuery.d.ts.map +1 -0
  91. package/dist/composables/useUrlQuery.js +26 -0
  92. package/dist/composables/useUrlQuery.js.map +1 -0
  93. package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
  94. package/dist/config/defaults.d.ts.map +1 -0
  95. package/dist/config/{defaults.mjs → defaults.js} +10 -6
  96. package/dist/config/defaults.js.map +1 -0
  97. package/dist/config/{index.d.mts → index.d.ts} +4 -4
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/{index.mjs → index.js} +12 -10
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/events/{index.d.mts → index.d.ts} +30 -12
  102. package/dist/events/index.d.ts.map +1 -0
  103. package/dist/events/{index.mjs → index.js} +26 -13
  104. package/dist/events/index.js.map +1 -0
  105. package/dist/index.d.ts +39 -0
  106. package/dist/index.js +38 -0
  107. package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
  108. package/dist/plaintext.d.ts.map +1 -0
  109. package/dist/{plaintext.mjs → plaintext.js} +4 -5
  110. package/dist/plaintext.js.map +1 -0
  111. package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
  112. package/dist/plugin.d.ts.map +1 -0
  113. package/dist/plugin.js +57 -0
  114. package/dist/plugin.js.map +1 -0
  115. package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
  116. package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
  117. package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
  118. package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
  119. package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
  120. package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
  121. package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
  122. package/dist/plugins/postcss/pruneVars.js.map +1 -0
  123. package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
  124. package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
  125. package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
  126. package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
  127. package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
  128. package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
  129. package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
  130. package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
  131. package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
  132. package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
  133. package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
  134. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
  135. package/dist/plugins/postcss/resolveProps.d.ts +8 -0
  136. package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
  137. package/dist/plugins/postcss/resolveProps.js +144 -0
  138. package/dist/plugins/postcss/resolveProps.js.map +1 -0
  139. package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
  140. package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
  141. package/dist/plugins/postcss/tailwindCleanup.js +68 -0
  142. package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
  143. package/dist/prepare.d.ts +17 -0
  144. package/dist/prepare.d.ts.map +1 -0
  145. package/dist/prepare.js +44 -0
  146. package/dist/prepare.js.map +1 -0
  147. package/dist/render/active.d.ts +8 -0
  148. package/dist/render/active.d.ts.map +1 -0
  149. package/dist/render/active.js +12 -0
  150. package/dist/render/active.js.map +1 -0
  151. package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +15 -7
  152. package/dist/render/createRenderer.d.ts.map +1 -0
  153. package/dist/render/createRenderer.js +320 -0
  154. package/dist/render/createRenderer.js.map +1 -0
  155. package/dist/render/index.d.ts +18 -0
  156. package/dist/render/index.d.ts.map +1 -0
  157. package/dist/render/index.js +53 -0
  158. package/dist/render/index.js.map +1 -0
  159. package/dist/render/injectFonts.d.ts +15 -0
  160. package/dist/render/injectFonts.d.ts.map +1 -0
  161. package/dist/render/injectFonts.js +45 -0
  162. package/dist/render/injectFonts.js.map +1 -0
  163. package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
  164. package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
  165. package/dist/render/plugins/codeBlockExtract.js +34 -0
  166. package/dist/render/plugins/codeBlockExtract.js.map +1 -0
  167. package/dist/render/plugins/markdownExtract.d.ts +12 -0
  168. package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
  169. package/dist/render/plugins/markdownExtract.js +49 -0
  170. package/dist/render/plugins/markdownExtract.js.map +1 -0
  171. package/dist/render/plugins/rawExtract.d.ts +14 -0
  172. package/dist/render/plugins/rawExtract.d.ts.map +1 -0
  173. package/dist/render/plugins/rawExtract.js +34 -0
  174. package/dist/render/plugins/rawExtract.js.map +1 -0
  175. package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
  176. package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
  177. package/dist/render/plugins/rowSourceLocation.js +45 -0
  178. package/dist/render/plugins/rowSourceLocation.js.map +1 -0
  179. package/dist/{serve.d.mts → serve.d.ts} +4 -2
  180. package/dist/serve.d.ts.map +1 -0
  181. package/dist/{serve.mjs → serve.js} +203 -78
  182. package/dist/serve.js.map +1 -0
  183. package/dist/server/compatibility.d.ts +59 -0
  184. package/dist/server/compatibility.d.ts.map +1 -0
  185. package/dist/server/compatibility.js +911 -0
  186. package/dist/server/compatibility.js.map +1 -0
  187. package/dist/server/email.d.ts +17 -0
  188. package/dist/server/email.d.ts.map +1 -0
  189. package/dist/server/email.js +40 -0
  190. package/dist/server/email.js.map +1 -0
  191. package/dist/server/linter.d.ts +20 -0
  192. package/dist/server/linter.d.ts.map +1 -0
  193. package/dist/server/linter.js +339 -0
  194. package/dist/server/linter.js.map +1 -0
  195. package/dist/server/sfc-utils.d.ts +21 -0
  196. package/dist/server/sfc-utils.d.ts.map +1 -0
  197. package/dist/server/sfc-utils.js +198 -0
  198. package/dist/server/sfc-utils.js.map +1 -0
  199. package/dist/server/ui/App.vue +253 -77
  200. package/dist/server/ui/components/SidebarClose.vue +12 -0
  201. package/dist/server/ui/components/ui/checkbox/Checkbox.vue +35 -0
  202. package/dist/server/ui/components/ui/checkbox/index.ts +1 -0
  203. package/dist/server/ui/components/ui/command/Command.vue +5 -1
  204. package/dist/server/ui/components/ui/command/CommandDialog.vue +1 -1
  205. package/dist/server/ui/components/ui/command/CommandInput.vue +19 -1
  206. package/dist/server/ui/components/ui/command/CommandItem.vue +1 -1
  207. package/dist/server/ui/components/ui/command/CommandList.vue +1 -1
  208. package/dist/server/ui/components/ui/command/CommandShortcut.vue +1 -1
  209. package/dist/server/ui/components/ui/dialog/DialogOverlay.vue +9 -1
  210. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -1
  211. package/dist/server/ui/components/ui/input/Input.vue +1 -1
  212. package/dist/server/ui/components/ui/scroll-area/ScrollBar.vue +1 -1
  213. package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
  214. package/dist/server/ui/components/ui/sheet/SheetOverlay.vue +9 -1
  215. package/dist/server/ui/components/ui/sidebar/Sidebar.vue +8 -1
  216. package/dist/server/ui/components/ui/sidebar/SidebarProvider.vue +1 -1
  217. package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +5 -4
  218. package/dist/server/ui/components/ui/tags-input/TagsInput.vue +26 -0
  219. package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +17 -0
  220. package/dist/server/ui/components/ui/tags-input/TagsInputItem.vue +19 -0
  221. package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +22 -0
  222. package/dist/server/ui/components/ui/tags-input/TagsInputItemText.vue +17 -0
  223. package/dist/server/ui/components/ui/tags-input/index.ts +5 -0
  224. package/dist/server/ui/components/ui/toggle/index.ts +3 -3
  225. package/dist/server/ui/components/ui/toggle-group/ToggleGroup.vue +1 -1
  226. package/dist/server/ui/components/ui/toggle-group/ToggleGroupItem.vue +2 -2
  227. package/dist/server/ui/lib/emulated-dark-mode.ts +131 -0
  228. package/dist/server/ui/main.css +20 -20
  229. package/dist/server/ui/pages/Home.vue +12 -5
  230. package/dist/server/ui/pages/Preview.vue +716 -276
  231. package/dist/tests/render/_helpers.d.ts +6 -0
  232. package/dist/tests/render/_helpers.d.ts.map +1 -0
  233. package/dist/tests/render/_helpers.js +16 -0
  234. package/dist/tests/render/_helpers.js.map +1 -0
  235. package/dist/transformers/{addAttributes.d.mts → addAttributes.d.ts} +2 -2
  236. package/dist/transformers/addAttributes.d.ts.map +1 -0
  237. package/dist/transformers/{addAttributes.mjs → addAttributes.js} +16 -13
  238. package/dist/transformers/addAttributes.js.map +1 -0
  239. package/dist/transformers/attributeToStyle.d.ts +38 -0
  240. package/dist/transformers/attributeToStyle.d.ts.map +1 -0
  241. package/dist/transformers/attributeToStyle.js +94 -0
  242. package/dist/transformers/attributeToStyle.js.map +1 -0
  243. package/dist/transformers/base.d.ts +71 -0
  244. package/dist/transformers/base.d.ts.map +1 -0
  245. package/dist/transformers/{base.mjs → base.js} +56 -30
  246. package/dist/transformers/base.js.map +1 -0
  247. package/dist/transformers/columnWidth.d.ts +31 -0
  248. package/dist/transformers/columnWidth.d.ts.map +1 -0
  249. package/dist/transformers/columnWidth.js +546 -0
  250. package/dist/transformers/columnWidth.js.map +1 -0
  251. package/dist/transformers/entities.d.ts +37 -0
  252. package/dist/transformers/entities.d.ts.map +1 -0
  253. package/dist/transformers/entities.js +73 -0
  254. package/dist/transformers/entities.js.map +1 -0
  255. package/dist/transformers/filters/defaults.d.ts +6 -0
  256. package/dist/transformers/filters/defaults.d.ts.map +1 -0
  257. package/dist/transformers/filters/defaults.js +78 -0
  258. package/dist/transformers/filters/defaults.js.map +1 -0
  259. package/dist/transformers/filters/index.d.ts +43 -0
  260. package/dist/transformers/filters/index.d.ts.map +1 -0
  261. package/dist/transformers/filters/index.js +89 -0
  262. package/dist/transformers/filters/index.js.map +1 -0
  263. package/dist/transformers/format.d.ts +22 -0
  264. package/dist/transformers/format.d.ts.map +1 -0
  265. package/dist/transformers/format.js +30 -0
  266. package/dist/transformers/format.js.map +1 -0
  267. package/dist/transformers/{index.d.mts → index.d.ts} +14 -11
  268. package/dist/transformers/index.d.ts.map +1 -0
  269. package/dist/transformers/index.js +133 -0
  270. package/dist/transformers/index.js.map +1 -0
  271. package/dist/transformers/inlineCss.d.ts +84 -0
  272. package/dist/transformers/inlineCss.d.ts.map +1 -0
  273. package/dist/transformers/inlineCss.js +91 -0
  274. package/dist/transformers/inlineCss.js.map +1 -0
  275. package/dist/transformers/inlineLink.d.ts +35 -0
  276. package/dist/transformers/inlineLink.d.ts.map +1 -0
  277. package/dist/transformers/{inlineLink.mjs → inlineLink.js} +34 -10
  278. package/dist/transformers/inlineLink.js.map +1 -0
  279. package/dist/transformers/minify.d.ts +21 -0
  280. package/dist/transformers/minify.d.ts.map +1 -0
  281. package/dist/transformers/minify.js +25 -0
  282. package/dist/transformers/minify.js.map +1 -0
  283. package/dist/transformers/msoPlaceholders.d.ts +28 -0
  284. package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
  285. package/dist/transformers/msoPlaceholders.js +88 -0
  286. package/dist/transformers/msoPlaceholders.js.map +1 -0
  287. package/dist/transformers/purgeCss.d.ts +43 -0
  288. package/dist/transformers/purgeCss.d.ts.map +1 -0
  289. package/dist/transformers/purgeCss.js +181 -0
  290. package/dist/transformers/purgeCss.js.map +1 -0
  291. package/dist/transformers/removeAttributes.d.ts +54 -0
  292. package/dist/transformers/removeAttributes.d.ts.map +1 -0
  293. package/dist/transformers/removeAttributes.js +70 -0
  294. package/dist/transformers/removeAttributes.js.map +1 -0
  295. package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
  296. package/dist/transformers/replaceStrings.d.ts.map +1 -0
  297. package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
  298. package/dist/transformers/replaceStrings.js.map +1 -0
  299. package/dist/transformers/{safeClassNames.d.mts → safeClassNames.d.ts} +2 -2
  300. package/dist/transformers/safeClassNames.d.ts.map +1 -0
  301. package/dist/transformers/{safeClassNames.mjs → safeClassNames.js} +4 -5
  302. package/dist/transformers/safeClassNames.js.map +1 -0
  303. package/dist/transformers/shorthandCss.d.ts +47 -0
  304. package/dist/transformers/shorthandCss.d.ts.map +1 -0
  305. package/dist/transformers/shorthandCss.js +61 -0
  306. package/dist/transformers/shorthandCss.js.map +1 -0
  307. package/dist/transformers/sixHex.d.ts +25 -0
  308. package/dist/transformers/sixHex.d.ts.map +1 -0
  309. package/dist/transformers/sixHex.js +42 -0
  310. package/dist/transformers/sixHex.js.map +1 -0
  311. package/dist/transformers/tailwindComponent.d.ts +16 -0
  312. package/dist/transformers/tailwindComponent.d.ts.map +1 -0
  313. package/dist/transformers/tailwindComponent.js +92 -0
  314. package/dist/transformers/tailwindComponent.js.map +1 -0
  315. package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +8 -4
  316. package/dist/transformers/tailwindcss.d.ts.map +1 -0
  317. package/dist/transformers/tailwindcss.js +97 -0
  318. package/dist/transformers/tailwindcss.js.map +1 -0
  319. package/dist/transformers/urlQuery.d.ts +36 -0
  320. package/dist/transformers/urlQuery.d.ts.map +1 -0
  321. package/dist/transformers/urlQuery.js +77 -0
  322. package/dist/transformers/urlQuery.js.map +1 -0
  323. package/dist/types/config.d.ts +737 -0
  324. package/dist/types/config.d.ts.map +1 -0
  325. package/dist/types/config.js +1 -0
  326. package/dist/types/index.d.ts +2 -0
  327. package/dist/types/index.js +1 -0
  328. package/dist/utils/ast/index.d.ts +4 -0
  329. package/dist/utils/ast/index.js +4 -0
  330. package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
  331. package/dist/utils/ast/parser.d.ts.map +1 -0
  332. package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
  333. package/dist/utils/ast/parser.js.map +1 -0
  334. package/dist/utils/ast/serializer.d.ts +8 -0
  335. package/dist/utils/ast/serializer.d.ts.map +1 -0
  336. package/dist/utils/ast/serializer.js +36 -0
  337. package/dist/utils/ast/serializer.js.map +1 -0
  338. package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
  339. package/dist/utils/ast/walker.d.ts.map +1 -0
  340. package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
  341. package/dist/utils/ast/walker.js.map +1 -0
  342. package/dist/utils/compileTailwindCss.d.ts +16 -0
  343. package/dist/utils/compileTailwindCss.d.ts.map +1 -0
  344. package/dist/utils/compileTailwindCss.js +54 -0
  345. package/dist/utils/compileTailwindCss.js.map +1 -0
  346. package/dist/utils/componentSources.d.ts +50 -0
  347. package/dist/utils/componentSources.d.ts.map +1 -0
  348. package/dist/utils/componentSources.js +50 -0
  349. package/dist/utils/componentSources.js.map +1 -0
  350. package/dist/utils/decodeStyleEntities.d.ts +15 -0
  351. package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
  352. package/dist/utils/decodeStyleEntities.js +18 -0
  353. package/dist/utils/decodeStyleEntities.js.map +1 -0
  354. package/dist/utils/detect.d.ts +5 -0
  355. package/dist/utils/detect.d.ts.map +1 -0
  356. package/dist/utils/detect.js +10 -0
  357. package/dist/utils/detect.js.map +1 -0
  358. package/dist/utils/output-markers.d.ts +29 -0
  359. package/dist/utils/output-markers.d.ts.map +1 -0
  360. package/dist/utils/output-markers.js +68 -0
  361. package/dist/utils/output-markers.js.map +1 -0
  362. package/dist/utils/{url.d.mts → url.d.ts} +1 -1
  363. package/dist/utils/url.d.ts.map +1 -0
  364. package/dist/utils/{url.mjs → url.js} +2 -3
  365. package/dist/utils/url.js.map +1 -0
  366. package/dist/utils/watchPaths.d.ts +11 -0
  367. package/dist/utils/watchPaths.d.ts.map +1 -0
  368. package/dist/utils/watchPaths.js +19 -0
  369. package/dist/utils/watchPaths.js.map +1 -0
  370. package/node_modules/@clack/core/CHANGELOG.md +8 -0
  371. package/node_modules/@clack/core/dist/index.d.mts +18 -4
  372. package/node_modules/@clack/core/dist/index.mjs +16 -10
  373. package/node_modules/@clack/core/dist/index.mjs.map +1 -1
  374. package/node_modules/@clack/core/package.json +5 -2
  375. package/node_modules/@clack/prompts/CHANGELOG.md +15 -0
  376. package/node_modules/@clack/prompts/README.md +107 -2
  377. package/node_modules/@clack/prompts/dist/index.d.mts +16 -11
  378. package/node_modules/@clack/prompts/dist/index.mjs +114 -107
  379. package/node_modules/@clack/prompts/dist/index.mjs.map +1 -1
  380. package/node_modules/@clack/prompts/package.json +7 -4
  381. package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
  382. package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
  383. package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
  384. package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
  385. package/node_modules/fast-string-truncated-width/package.json +1 -1
  386. package/node_modules/fast-string-truncated-width/readme.md +2 -3
  387. package/node_modules/fast-string-width/package.json +2 -2
  388. package/node_modules/fast-string-width/readme.md +0 -3
  389. package/node_modules/fast-wrap-ansi/lib/main.js +4 -1
  390. package/node_modules/fast-wrap-ansi/lib/main.js.map +1 -1
  391. package/node_modules/fast-wrap-ansi/package.json +2 -2
  392. package/node_modules/maizzle/README.md +24 -0
  393. package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
  394. package/node_modules/maizzle/dist/commands/make/config.mjs +1 -1
  395. package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
  396. package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
  397. package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
  398. package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
  399. package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
  400. package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
  401. package/node_modules/maizzle/dist/commands/new.mjs +32 -52
  402. package/node_modules/maizzle/dist/index.d.mts +1 -0
  403. package/node_modules/maizzle/dist/index.mjs +30 -7
  404. package/node_modules/maizzle/package.json +4 -3
  405. package/node_modules/nypm/dist/cli.mjs +28 -5
  406. package/node_modules/nypm/dist/index.d.mts +0 -8
  407. package/node_modules/nypm/dist/index.mjs +27 -4
  408. package/node_modules/nypm/package.json +12 -12
  409. package/node_modules/tinyexec/README.md +1 -1
  410. package/node_modules/tinyexec/dist/main.d.mts +6 -6
  411. package/node_modules/tinyexec/dist/main.mjs +126 -134
  412. package/node_modules/tinyexec/package.json +9 -9
  413. package/package.json +31 -21
  414. package/dist/build.d.mts +0 -19
  415. package/dist/build.d.mts.map +0 -1
  416. package/dist/build.mjs +0 -139
  417. package/dist/build.mjs.map +0 -1
  418. package/dist/components/Divider.vue +0 -105
  419. package/dist/components/Vml.vue +0 -89
  420. package/dist/components/utils.d.mts +0 -5
  421. package/dist/components/utils.d.mts.map +0 -1
  422. package/dist/components/utils.mjs +0 -9
  423. package/dist/components/utils.mjs.map +0 -1
  424. package/dist/composables/defineConfig.d.mts.map +0 -1
  425. package/dist/composables/defineConfig.mjs.map +0 -1
  426. package/dist/composables/renderContext.d.mts +0 -19
  427. package/dist/composables/renderContext.d.mts.map +0 -1
  428. package/dist/composables/renderContext.mjs.map +0 -1
  429. package/dist/composables/useConfig.d.mts.map +0 -1
  430. package/dist/composables/useConfig.mjs.map +0 -1
  431. package/dist/composables/useDoctype.d.mts.map +0 -1
  432. package/dist/composables/useDoctype.mjs.map +0 -1
  433. package/dist/composables/useEvent.d.mts.map +0 -1
  434. package/dist/composables/useEvent.mjs.map +0 -1
  435. package/dist/composables/usePlaintext.d.mts.map +0 -1
  436. package/dist/composables/usePlaintext.mjs.map +0 -1
  437. package/dist/config/defaults.d.mts.map +0 -1
  438. package/dist/config/defaults.mjs.map +0 -1
  439. package/dist/config/index.d.mts.map +0 -1
  440. package/dist/config/index.mjs.map +0 -1
  441. package/dist/events/index.d.mts.map +0 -1
  442. package/dist/events/index.mjs.map +0 -1
  443. package/dist/index.d.mts +0 -29
  444. package/dist/index.mjs +0 -29
  445. package/dist/plaintext.d.mts.map +0 -1
  446. package/dist/plaintext.mjs.map +0 -1
  447. package/dist/plugin.d.mts.map +0 -1
  448. package/dist/plugin.mjs +0 -41
  449. package/dist/plugin.mjs.map +0 -1
  450. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  451. package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
  452. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  453. package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
  454. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  455. package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
  456. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  457. package/dist/plugins/postcss/tailwindCleanup.mjs +0 -35
  458. package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
  459. package/dist/render/createRenderer.d.mts.map +0 -1
  460. package/dist/render/createRenderer.mjs +0 -155
  461. package/dist/render/createRenderer.mjs.map +0 -1
  462. package/dist/render/index.d.mts +0 -26
  463. package/dist/render/index.d.mts.map +0 -1
  464. package/dist/render/index.mjs +0 -44
  465. package/dist/render/index.mjs.map +0 -1
  466. package/dist/serve.d.mts.map +0 -1
  467. package/dist/serve.mjs.map +0 -1
  468. package/dist/server/compatibility.d.mts +0 -6
  469. package/dist/server/compatibility.d.mts.map +0 -1
  470. package/dist/server/compatibility.mjs +0 -83
  471. package/dist/server/compatibility.mjs.map +0 -1
  472. package/dist/server/linter.d.mts +0 -6
  473. package/dist/server/linter.d.mts.map +0 -1
  474. package/dist/server/linter.mjs +0 -200
  475. package/dist/server/linter.mjs.map +0 -1
  476. package/dist/server/ui/components/ui/resizable/ResizableHandle.vue +0 -30
  477. package/dist/server/ui/components/ui/resizable/ResizablePanel.vue +0 -21
  478. package/dist/server/ui/components/ui/resizable/ResizablePanelGroup.vue +0 -25
  479. package/dist/server/ui/components/ui/resizable/index.ts +0 -3
  480. package/dist/transformers/addAttributes.d.mts.map +0 -1
  481. package/dist/transformers/addAttributes.mjs.map +0 -1
  482. package/dist/transformers/attributeToStyle.d.mts +0 -25
  483. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  484. package/dist/transformers/attributeToStyle.mjs +0 -80
  485. package/dist/transformers/attributeToStyle.mjs.map +0 -1
  486. package/dist/transformers/base.d.mts +0 -8
  487. package/dist/transformers/base.d.mts.map +0 -1
  488. package/dist/transformers/base.mjs.map +0 -1
  489. package/dist/transformers/entities.d.mts +0 -8
  490. package/dist/transformers/entities.d.mts.map +0 -1
  491. package/dist/transformers/entities.mjs +0 -38
  492. package/dist/transformers/entities.mjs.map +0 -1
  493. package/dist/transformers/format.d.mts +0 -15
  494. package/dist/transformers/format.d.mts.map +0 -1
  495. package/dist/transformers/format.mjs +0 -26
  496. package/dist/transformers/format.mjs.map +0 -1
  497. package/dist/transformers/index.d.mts.map +0 -1
  498. package/dist/transformers/index.mjs +0 -73
  499. package/dist/transformers/index.mjs.map +0 -1
  500. package/dist/transformers/inlineCSS.d.mts +0 -30
  501. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  502. package/dist/transformers/inlineCSS.mjs +0 -79
  503. package/dist/transformers/inlineCSS.mjs.map +0 -1
  504. package/dist/transformers/inlineLink.d.mts +0 -14
  505. package/dist/transformers/inlineLink.d.mts.map +0 -1
  506. package/dist/transformers/inlineLink.mjs.map +0 -1
  507. package/dist/transformers/minify.d.mts +0 -17
  508. package/dist/transformers/minify.d.mts.map +0 -1
  509. package/dist/transformers/minify.mjs +0 -24
  510. package/dist/transformers/minify.mjs.map +0 -1
  511. package/dist/transformers/purgeCSS.d.mts +0 -23
  512. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  513. package/dist/transformers/purgeCSS.mjs +0 -66
  514. package/dist/transformers/purgeCSS.mjs.map +0 -1
  515. package/dist/transformers/removeAttributes.d.mts +0 -31
  516. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  517. package/dist/transformers/removeAttributes.mjs +0 -63
  518. package/dist/transformers/removeAttributes.mjs.map +0 -1
  519. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  520. package/dist/transformers/replaceStrings.mjs.map +0 -1
  521. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  522. package/dist/transformers/safeClassNames.mjs.map +0 -1
  523. package/dist/transformers/shorthandCSS.d.mts +0 -24
  524. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  525. package/dist/transformers/shorthandCSS.mjs +0 -48
  526. package/dist/transformers/shorthandCSS.mjs.map +0 -1
  527. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  528. package/dist/transformers/tailwindcss.mjs +0 -136
  529. package/dist/transformers/tailwindcss.mjs.map +0 -1
  530. package/dist/transformers/urlQuery.d.mts +0 -24
  531. package/dist/transformers/urlQuery.d.mts.map +0 -1
  532. package/dist/transformers/urlQuery.mjs +0 -65
  533. package/dist/transformers/urlQuery.mjs.map +0 -1
  534. package/dist/types/config.d.mts +0 -149
  535. package/dist/types/config.d.mts.map +0 -1
  536. package/dist/types/config.mjs +0 -1
  537. package/dist/types/index.d.mts +0 -2
  538. package/dist/types/index.mjs +0 -1
  539. package/dist/utils/ast/index.d.mts +0 -4
  540. package/dist/utils/ast/index.mjs +0 -5
  541. package/dist/utils/ast/parser.d.mts.map +0 -1
  542. package/dist/utils/ast/parser.mjs.map +0 -1
  543. package/dist/utils/ast/serializer.d.mts +0 -7
  544. package/dist/utils/ast/serializer.d.mts.map +0 -1
  545. package/dist/utils/ast/serializer.mjs +0 -13
  546. package/dist/utils/ast/serializer.mjs.map +0 -1
  547. package/dist/utils/ast/walker.d.mts.map +0 -1
  548. package/dist/utils/ast/walker.mjs.map +0 -1
  549. package/dist/utils/url.d.mts.map +0 -1
  550. package/dist/utils/url.mjs.map +0 -1
  551. package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
@@ -0,0 +1,241 @@
1
+ <script lang="ts">
2
+ import { computed, createStaticVNode } from 'vue'
3
+ import type { PropType } from 'vue'
4
+ import { normalizeToPixels } from './utils.ts'
5
+
6
+ export default {
7
+ name: 'OutlookBg',
8
+ props: {
9
+ /**
10
+ * Width of the VML rectangle.
11
+ *
12
+ * Accepts a number (treated as pixels) or a string with units.
13
+ *
14
+ * @default '600px'
15
+ */
16
+ width: {
17
+ type: [String, Number],
18
+ default: '600px'
19
+ },
20
+ /**
21
+ * Height of the VML rectangle.
22
+ *
23
+ * Accepts a number (treated as pixels) or a string with units.
24
+ * When not set, the rectangle auto-sizes to fit its content.
25
+ */
26
+ height: {
27
+ type: [String, Number],
28
+ default: null
29
+ },
30
+ /**
31
+ * VML fill type that controls how the background image is rendered.
32
+ *
33
+ * - `frame` — scale to fill the rectangle (default)
34
+ * - `tile` — repeat the image to fill the rectangle
35
+ * - `pattern` — tile at original size
36
+ * - `solid` — solid color fill, no image
37
+ * - `gradient` — linear gradient fill
38
+ * - `gradientradial` — radial gradient fill
39
+ *
40
+ * @default 'frame'
41
+ */
42
+ type: {
43
+ type: String as PropType<'solid' | 'gradient' | 'gradientradial' | 'tile' | 'pattern' | 'frame'>,
44
+ default: 'frame'
45
+ },
46
+ /**
47
+ * Comma-separated dimensions for the fill image.
48
+ *
49
+ * Controls the rendered size of the background image.
50
+ *
51
+ * @example '300px,200px'
52
+ */
53
+ sizes: {
54
+ type: String,
55
+ validator: (v: string) => /^[\d.]+(px|%|em|rem)?(,[\d.]+(px|%|em|rem)?)+$/.test(v.replace(/\s/g, ''))
56
+ },
57
+ /**
58
+ * Fill origin offset as comma-separated fractional values.
59
+ *
60
+ * Controls where the fill image anchors relative to the shape.
61
+ * Values are fractions of the shape's dimensions, where `0,0` is
62
+ * center and `-0.5,-0.5` is the top-left corner.
63
+ *
64
+ * Overridden by `backgroundPosition` if both are set.
65
+ *
66
+ * @example '0,0'
67
+ * @example '-0.5,-0.5'
68
+ */
69
+ origin: {
70
+ type: String,
71
+ validator: (v: string) => /^-?[\d.]+(,-?[\d.]+)+$/.test(v.replace(/\s/g, ''))
72
+ },
73
+ /**
74
+ * Fill position offset as comma-separated fractional values.
75
+ *
76
+ * Controls where the fill image is positioned within the shape.
77
+ * Values are fractions of the shape's dimensions, where `0,0` is
78
+ * center and `0.5,0.5` is the bottom-right corner.
79
+ *
80
+ * Overridden by `backgroundPosition` if both are set.
81
+ *
82
+ * @example '0,0'
83
+ * @example '0.5,0.5'
84
+ */
85
+ position: {
86
+ type: String,
87
+ validator: (v: string) => /^-?[\d.]+(,-?[\d.]+)+$/.test(v.replace(/\s/g, ''))
88
+ },
89
+ /**
90
+ * Background image position as `vertical,horizontal`.
91
+ *
92
+ * First value is the vertical axis: `top`, `center`, or `bottom`.
93
+ * Second value is the horizontal axis: `left`, `center`, or `right`.
94
+ *
95
+ * Convenience prop that maps to VML `origin` and `position` attributes.
96
+ *
97
+ * @example 'top,left'
98
+ * @example 'center,center'
99
+ */
100
+ backgroundPosition: {
101
+ type: String as PropType<
102
+ | 'top,left' | 'top,center' | 'top,right'
103
+ | 'center,left' | 'center,center' | 'center,right'
104
+ | 'bottom,left' | 'bottom,center' | 'bottom,right'
105
+ >,
106
+ validator: (v: string) => /^(top|center|bottom),(left|center|right)$/.test(v.replace(/\s/g, ''))
107
+ },
108
+ /**
109
+ * Aspect ratio constraint for the fill image.
110
+ *
111
+ * - `atleast` — image is at least as large as the shape
112
+ * - `atmost` — image is at most as large as the shape
113
+ */
114
+ aspect: {
115
+ type: String as PropType<'atleast' | 'atmost'>,
116
+ },
117
+ /**
118
+ * Fill color used for `solid` and `gradient` fill types.
119
+ *
120
+ * @example '#ffffff'
121
+ */
122
+ color: String,
123
+ /**
124
+ * Text box inset (padding) as `top,right,bottom,left`.
125
+ *
126
+ * Controls the inner spacing of the `v:textbox` element.
127
+ *
128
+ * @default '0,0,0,0'
129
+ */
130
+ inset: {
131
+ type: String,
132
+ default: '0,0,0,0'
133
+ },
134
+ /**
135
+ * Whether the VML rectangle has a visible border.
136
+ *
137
+ * @default false
138
+ */
139
+ stroke: {
140
+ type: [Boolean, String],
141
+ default: false
142
+ },
143
+ /**
144
+ * Border color for the VML rectangle.
145
+ *
146
+ * Setting this also enables `stroke` automatically.
147
+ *
148
+ * @example '#000000'
149
+ */
150
+ strokecolor: String,
151
+ /**
152
+ * Whether the VML rectangle has a fill.
153
+ *
154
+ * @default true
155
+ */
156
+ fill: {
157
+ type: [Boolean, String],
158
+ default: true
159
+ },
160
+ /**
161
+ * Background color of the VML rectangle.
162
+ *
163
+ * Used as a fallback when the background image cannot be loaded.
164
+ *
165
+ * @default 'none'
166
+ * @example '#3b82f6'
167
+ */
168
+ fillcolor: {
169
+ type: String,
170
+ default: 'none'
171
+ },
172
+ /**
173
+ * URL of the background image.
174
+ *
175
+ * @default 'https://via.placeholder.com/600x400'
176
+ */
177
+ src: {
178
+ type: String,
179
+ default: 'https://via.placeholder.com/600x400'
180
+ }
181
+ },
182
+ setup(props, { slots }) {
183
+ const backgroundPositionMap: Record<string, string> = {
184
+ 'top,left': '-0.5,-0.5',
185
+ 'top,center': '0,-0.5',
186
+ 'top,right': '0.5,-0.5',
187
+ 'center,left': '-0.5,0',
188
+ 'center,center': '0,0',
189
+ 'center,right': '0.5,0',
190
+ 'bottom,left': '-0.5,0.5',
191
+ 'bottom,center': '0,0.5',
192
+ 'bottom,right': '0.5,0.5',
193
+ }
194
+
195
+ const resolvedOrigin = computed(() => props.origin ?? (props.backgroundPosition ? backgroundPositionMap[props.backgroundPosition.replace(/\s/g, '')] : undefined))
196
+ const resolvedPosition = computed(() => props.position ?? (props.backgroundPosition ? backgroundPositionMap[props.backgroundPosition.replace(/\s/g, '')] : undefined))
197
+
198
+ const before = computed(() => {
199
+ const width = normalizeToPixels(props.width)
200
+
201
+ const toBool = (v: boolean | string) => v === true || v === 'true' ? 'true' : 'false'
202
+
203
+ const rectAttrs = [
204
+ `fill="${props.fillcolor ? 'true' : toBool(props.fill)}"`,
205
+ `stroke="${props.strokecolor ? 'true' : toBool(props.stroke)}"`,
206
+ `style="width: ${width};${props.height ? ` height: ${normalizeToPixels(props.height)};` : ''}"`,
207
+ props.strokecolor ? `strokecolor="${props.strokecolor}"` : '',
208
+ props.fillcolor ? `fillcolor="${props.fillcolor}"` : ''
209
+ ].filter(Boolean).join(' ')
210
+
211
+ const fillAttrs = [
212
+ `type="${props.type}"`,
213
+ `src="${props.src}"`,
214
+ props.sizes ? `sizes="${props.sizes}"` : '',
215
+ props.aspect ? `aspect="${props.aspect}"` : '',
216
+ resolvedOrigin.value ? `origin="${resolvedOrigin.value}"` : '',
217
+ resolvedPosition.value ? `position="${resolvedPosition.value}"` : '',
218
+ props.color ? `color="${props.color}"` : ''
219
+ ].filter(Boolean).join(' ')
220
+
221
+ return [
222
+ `<!--[if mso]>`,
223
+ `<v:rect xmlns:v="urn:schemas-microsoft-com:vml" ${rectAttrs}>`,
224
+ `<v:fill ${fillAttrs} />`,
225
+ `<v:textbox inset="${props.inset}" style="mso-fit-shape-to-text: true">`,
226
+ `<div><![endif]-->`
227
+ ].join('')
228
+ })
229
+
230
+ const after = computed(() => {
231
+ return `<!--[if mso]></div></v:textbox></v:rect><![endif]-->`
232
+ })
233
+
234
+ return () => [
235
+ createStaticVNode(before.value, 1),
236
+ slots.default?.(),
237
+ createStaticVNode(after.value, 1)
238
+ ]
239
+ }
240
+ }
241
+ </script>
@@ -0,0 +1,156 @@
1
+ <script setup lang="ts">
2
+ import { computed, useAttrs, createStaticVNode } from 'vue'
3
+ import {
4
+ hasHeightInStyle,
5
+ hasHeightUtility,
6
+ hasWidthInStyle,
7
+ hasWidthUtility,
8
+ nextId,
9
+ normalizeToPixels,
10
+ outlookFallbackProp
11
+ } from './utils.ts'
12
+ import { useOutlookFallback } from '../composables/useOutlookFallback'
13
+
14
+ defineOptions({ inheritAttrs: false })
15
+
16
+ const attrs = useAttrs()
17
+
18
+ const props = defineProps({
19
+ /**
20
+ * Max height of the background (default slot) content.
21
+ *
22
+ * Applied as `max-height` on the background div and as `height`
23
+ * on the VML rectangle. When not set, the height is taken from
24
+ * a Tailwind utility (e.g. `h-50`, `max-h-[200px]`) or inline
25
+ * `height`/`max-height` style on the component, after CSS inlining.
26
+ */
27
+ height: {
28
+ type: [String, Number],
29
+ default: null
30
+ },
31
+ /**
32
+ * Width of the overlay table and VML rectangle.
33
+ *
34
+ * When not set, derived from a width utility class or inline
35
+ * style on the component itself, otherwise from the nearest
36
+ * sized ancestor (`Container`, `Section`, outer `Column`).
37
+ * Falls back to `100%` when no source is found.
38
+ */
39
+ width: {
40
+ type: [String, Number],
41
+ default: null
42
+ },
43
+ /**
44
+ * Height of the VML rectangle in Outlook.
45
+ *
46
+ * Defaults to the resolved `height`. Use this to fine-tune the
47
+ * overlay height specifically for Outlook rendering.
48
+ */
49
+ msoHeight: {
50
+ type: [String, Number],
51
+ default: null
52
+ },
53
+ /**
54
+ * VML textbox inset for Outlook positioning.
55
+ *
56
+ * Controls the offset of the overlay content as `top,right,bottom,left`.
57
+ * Use negative values to shift content upward into the background area.
58
+ *
59
+ * @default '0,-60px,0,0'
60
+ */
61
+ msoInset: {
62
+ type: String,
63
+ default: '0,-60px,0,0'
64
+ },
65
+ /**
66
+ * Toggle Outlook (MSO) and VML fallback markup for this
67
+ * component and all descendants.
68
+ *
69
+ * When `false`, skips MSO ghost tables, VML shapes,
70
+ * `xmlns:v`/`xmlns:o` attributes, and mso-specific CSS
71
+ * in all built-in components.
72
+ *
73
+ * @default true
74
+ */
75
+ outlookFallback: outlookFallbackProp,
76
+ })
77
+
78
+ const outlookFallback = useOutlookFallback(props.outlookFallback)
79
+
80
+ const userStyle = computed(() => {
81
+ const s = attrs.style
82
+ if (!s) return ''
83
+ return typeof s === 'object'
84
+ ? Object.entries(s).map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${v}`).join('; ')
85
+ : String(s)
86
+ })
87
+
88
+ const userClass = computed(() => (attrs.class as string) ?? '')
89
+
90
+ const userHasWidth = computed(() =>
91
+ hasWidthUtility(userClass.value) || hasWidthInStyle(userStyle.value)
92
+ )
93
+ const userHasHeight = computed(() =>
94
+ hasHeightUtility(userClass.value) || hasHeightInStyle(userStyle.value)
95
+ )
96
+
97
+ const useWidthMarker = props.width == null
98
+ const useHeightMarker = props.height == null && props.msoHeight == null
99
+ const id = (useWidthMarker || useHeightMarker) ? nextId('o') : null
100
+
101
+ const widthValue = computed(() =>
102
+ useWidthMarker ? `__MAIZZLE_COLW_${id}__` : normalizeToPixels(props.width)
103
+ )
104
+
105
+ const heightValue = computed(() => {
106
+ if (props.msoHeight != null) return normalizeToPixels(props.msoHeight)
107
+ if (props.height != null) return normalizeToPixels(props.height)
108
+ return `__MAIZZLE_OH_${id}__`
109
+ })
110
+
111
+ const backgroundStyles = computed(() => {
112
+ const parts: string[] = []
113
+ if (props.height != null) parts.push(`max-height: ${normalizeToPixels(props.height)}`)
114
+ parts.push('margin: 0 auto', 'text-align: center')
115
+ if (userStyle.value) parts.push(userStyle.value)
116
+ return parts.join('; ') + ';'
117
+ })
118
+
119
+ const tdStyle = computed(() =>
120
+ `width: ${widthValue.value}; max-width: 100%; vertical-align: top;`
121
+ )
122
+
123
+ const vmlOpen = computed(() =>
124
+ `<!--[if mso]><v:rect xmlns:v="urn:schemas-microsoft-com:vml" stroked="f" filled="f" style="width: ${widthValue.value}; height: ${heightValue.value};"><v:textbox inset="${props.msoInset}"><![endif]-->`
125
+ )
126
+
127
+ const restAttrs = computed(() => {
128
+ const { style: _, ...rest } = attrs
129
+ return rest
130
+ })
131
+
132
+ const VmlBefore = () => createStaticVNode(vmlOpen.value, 1)
133
+ const VmlAfter = () => createStaticVNode('<!--[if mso]></v:textbox></v:rect><![endif]-->', 1)
134
+ </script>
135
+
136
+ <template>
137
+ <div
138
+ v-bind="restAttrs"
139
+ :style="backgroundStyles"
140
+ :data-maizzle-cw-id="useWidthMarker ? id : null"
141
+ :data-maizzle-cw-count="useWidthMarker ? 1 : null"
142
+ :data-maizzle-cw-self="useWidthMarker && userHasWidth ? '' : null"
143
+ :data-maizzle-oh-id="useHeightMarker && userHasHeight ? id : null"
144
+ >
145
+ <slot />
146
+ </div>
147
+ <table style="max-height: 0; position: relative; opacity: 0.999;">
148
+ <tr>
149
+ <td :style="tdStyle">
150
+ <VmlBefore v-if="outlookFallback" />
151
+ <slot name="overlay" />
152
+ <VmlAfter v-if="outlookFallback" />
153
+ </td>
154
+ </tr>
155
+ </table>
156
+ </template>
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { h } from 'vue'
3
+
4
+ export default {
5
+ name: 'Plaintext',
6
+ setup(_, { slots }) {
7
+ return () => h(
8
+ 'div',
9
+ { 'data-maizzle-plaintext-only': '' },
10
+ slots.default?.(),
11
+ )
12
+ },
13
+ }
14
+ </script>
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ defineProps({
3
+ /** Number of `&#8199;&#65279;&#847;` filler sequences to render after the preview text. */
4
+ spaces: {
5
+ type: Number,
6
+ default: 150
7
+ }
8
+ })
9
+ </script>
10
+
11
+ <template>
12
+ <Teleport to="body:start">
13
+ <div style="display: none"><slot /><template v-for="i in spaces" :key="i">&#8199;&#65279;&#847; </template>&nbsp;</div>
14
+ </Teleport>
15
+ </template>
@@ -0,0 +1,157 @@
1
+ <script lang="ts">
2
+ import { createStaticVNode, type PropType } from 'vue'
3
+ import { twMerge } from 'tailwind-merge'
4
+ import { encode } from 'uqr'
5
+
6
+ type Ecc = 'L' | 'M' | 'Q' | 'H'
7
+
8
+ const escapeAttr = (v: string) =>
9
+ v
10
+ .replace(/&/g, '&amp;')
11
+ .replace(/</g, '&lt;')
12
+ .replace(/>/g, '&gt;')
13
+ .replace(/"/g, '&quot;')
14
+
15
+ /**
16
+ * Parse a Tailwind sizing token's pixel equivalent.
17
+ *
18
+ * Assumes the default v4 spacing scale (1 unit = 0.25rem),
19
+ * which resolves to 4px at the standard 16px root font.
20
+ * Arbitrary values accept `px` and `rem`; other units
21
+ * fall through to the caller's default.
22
+ */
23
+ function tokenToPx(token: string): number {
24
+ const seg = token.split(':').at(-1) ?? ''
25
+ const m = seg.match(/^(?:size|w|h)-(.+)$/)
26
+ if (!m) return 0
27
+ const v = m[1]
28
+ if (v.startsWith('[') && v.endsWith(']')) {
29
+ const um = v.slice(1, -1).match(/^([\d.]+)(px|rem)?$/)
30
+ if (!um) return 0
31
+ const n = Number.parseFloat(um[1])
32
+ return um[2] === 'rem' ? n * 16 : n
33
+ }
34
+ if (/^\d+(?:\.\d+)?$/.test(v)) return Number.parseFloat(v) * 4
35
+ return 0
36
+ }
37
+
38
+ /**
39
+ * Partition a class string into two buckets:
40
+ *
41
+ * - `sizing` — width/height/size utilities used for cell px math.
42
+ * - `neutral` — everything else; lands on the table verbatim.
43
+ */
44
+ function partition(cls: string): { neutral: string[]; sizing: string[] } {
45
+ const neutral: string[] = []
46
+ const sizing: string[] = []
47
+ for (const t of cls.split(/\s+/).filter(Boolean)) {
48
+ const last = t.split(':').at(-1) ?? ''
49
+ if (/^(?:size|w|h|min-w|min-h|max-w|max-h)-/.test(last)) sizing.push(t)
50
+ else neutral.push(t)
51
+ }
52
+ return { neutral, sizing }
53
+ }
54
+
55
+ export default {
56
+ name: 'QrCode',
57
+ inheritAttrs: false,
58
+ props: {
59
+ /** Data to encode (URL or arbitrary text). */
60
+ value: {
61
+ type: String,
62
+ required: true,
63
+ },
64
+ /**
65
+ * Error correction level: redundancy that keeps the code
66
+ * scannable when partially obscured (e.g. a logo overlay),
67
+ * at the cost of a larger matrix.
68
+ *
69
+ * - `L` ~7% recovery
70
+ * - `M` ~15% recovery (default, fine for on-screen display)
71
+ * - `Q` ~25% recovery
72
+ * - `H` ~30% recovery
73
+ */
74
+ ecc: {
75
+ type: String as PropType<Ecc>,
76
+ default: 'M',
77
+ validator: (v: string) => ['L', 'M', 'Q', 'H'].includes(v),
78
+ },
79
+ /**
80
+ * Width of the light "quiet zone" around the code, in modules.
81
+ * Spec recommends ≥ 4; 1 is plenty for on-screen scans.
82
+ */
83
+ border: {
84
+ type: Number,
85
+ default: 1,
86
+ },
87
+ /**
88
+ * Accessible label exposed via `aria-label` on the table.
89
+ */
90
+ alt: {
91
+ type: String,
92
+ default: '',
93
+ },
94
+ },
95
+ setup(props, { attrs }) {
96
+ const userClass = String(attrs.class ?? '')
97
+ const { neutral, sizing } = partition(userClass)
98
+
99
+ /**
100
+ * Effective pixel size from the user's sizing token, else
101
+ * 120px (= `size-30` on the default v4 spacing scale).
102
+ */
103
+ const sizingToken = sizing[0]
104
+ const effectivePx = sizingToken ? (tokenToPx(sizingToken) || 120) : 120
105
+
106
+ const result = encode(props.value, {
107
+ ecc: props.ecc,
108
+ border: props.border,
109
+ boostEcc: true,
110
+ })
111
+ const matrix = result.data
112
+ const dim = matrix.length
113
+ const cellPx = Math.max(1, Math.floor(effectivePx / dim))
114
+ const totalPx = cellPx * dim
115
+
116
+ /**
117
+ * Table base classes:
118
+ *
119
+ * - `size-[Npx]` matches the outer to cell math (no stripe).
120
+ * - `[&_td]:*` sizes each cell and zeroes its font-size.
121
+ * - `bg-*` paints the table; light cells stay transparent.
122
+ * - `qr:*` paints dark cells via the registered variant.
123
+ *
124
+ * Defaults and user tokens share each form, so `twMerge`
125
+ * resolves overrides cleanly.
126
+ */
127
+ const baseTable = [
128
+ `size-[${totalPx}px]`,
129
+ `[&_td]:w-[${cellPx}px]`,
130
+ `[&_td]:h-[${cellPx}px]`,
131
+ '[&_td]:text-[0px]',
132
+ 'bg-white',
133
+ 'dark:bg-gray-950',
134
+ 'qr:bg-gray-950',
135
+ 'dark:qr:bg-white',
136
+ ]
137
+
138
+ const merged = twMerge([...baseTable, ...neutral].join(' '))
139
+
140
+ let rows = ''
141
+ for (let y = 0; y < dim; y++) {
142
+ let cells = ''
143
+ const row = matrix[y]
144
+ for (let x = 0; x < dim; x++) {
145
+ cells += row[x] ? '<td class="qd"></td>' : '<td></td>'
146
+ }
147
+ rows += `<tr>${cells}</tr>`
148
+ }
149
+
150
+ const altAttr = props.alt ? ` aria-label="${escapeAttr(props.alt)}"` : ''
151
+ const styleAttr = attrs.style ? ` style="${String(attrs.style)}"` : ''
152
+ const html = `<table class="${escapeAttr(merged)}" role="img"${altAttr} cellpadding="0" cellspacing="0" border="0"${styleAttr}>${rows}</table>`
153
+
154
+ return () => createStaticVNode(html, 1)
155
+ },
156
+ }
157
+ </script>
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import { createStaticVNode } from 'vue'
3
+
4
+ export default {
5
+ inheritAttrs: false,
6
+ props: {
7
+ /**
8
+ * Raw content to emit verbatim.
9
+ *
10
+ * Auto-populated from slot content by
11
+ * the `maizzle:raw-extract` Vite plugin
12
+ * before Vue compiles the template,
13
+ * so `{{ }}` and other Vue/ESP
14
+ * syntax pass through untouched.
15
+ */
16
+ content: {
17
+ type: String,
18
+ default: '',
19
+ },
20
+ },
21
+ setup(props) {
22
+ if (!props.content) {
23
+ return () => createStaticVNode('', 0)
24
+ }
25
+ return () => createStaticVNode(props.content, 1)
26
+ },
27
+ }
28
+ </script>