@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,73 @@
1
+ import { parse } from "../utils/ast/parser.js";
2
+ import { walk } from "../utils/ast/walker.js";
3
+ import { serialize } from "../utils/ast/serializer.js";
4
+ import "../utils/ast/index.js";
5
+ import { defu as defu$1 } from "defu";
6
+ //#region src/transformers/entities.ts
7
+ const DEFAULT_ENTITIES = {
8
+ "‍": "‍",
9
+ "‌": "‌",
10
+ "\xA0": " ",
11
+ "­": "­",
12
+ "​": "​",
13
+ " ": " ",
14
+ "͏": "͏",
15
+ " ": " ",
16
+ "\u2028": "&LineSeparator;",
17
+ "\u2029": "&ParagraphSeparator;",
18
+ "·": "·",
19
+ "–": "–",
20
+ "—": "—",
21
+ "‘": "‘",
22
+ "’": "’",
23
+ "“": "“",
24
+ "”": "”",
25
+ "«": "«",
26
+ "»": "»",
27
+ "•": "•",
28
+ "‹": "‹",
29
+ "›": "›"
30
+ };
31
+ /**
32
+ * Replace literal Unicode characters in text nodes with their HTML entity
33
+ * equivalents (zero-width joiners, non-breaking spaces, smart quotes,
34
+ * dashes, etc.) for better email-client rendering.
35
+ *
36
+ * @param html HTML string to transform.
37
+ * @param custom Extra entries merged on top of the built-in entity map, or
38
+ * `false` to disable the transform. Defaults to `true`
39
+ * (built-ins only).
40
+ * @returns The transformed HTML string.
41
+ *
42
+ * @example
43
+ * import { entities } from '@maizzle/framework'
44
+ *
45
+ * // Defaults only
46
+ * entities('hello world') // → 'hello world'
47
+ *
48
+ * // Add a custom mapping
49
+ * entities('© Maizzle', { '©': '©' })
50
+ *
51
+ * // Disable the transform
52
+ * entities('hello world', false)
53
+ */
54
+ function entities(html, custom = true) {
55
+ return serialize(entitiesDom(parse(html), custom));
56
+ }
57
+ /**
58
+ * DOM-form of {@link entities} used by the internal transformer pipeline.
59
+ * Takes a parsed DOM, returns a parsed DOM — avoids redundant
60
+ * serialize/parse round-trips when chained with other transformers.
61
+ */
62
+ function entitiesDom(dom, custom = true) {
63
+ if (!custom) return dom;
64
+ const map = typeof custom === "object" ? defu$1(custom, DEFAULT_ENTITIES) : DEFAULT_ENTITIES;
65
+ walk(dom, (node) => {
66
+ if (node.type === "text") for (const [char, entity] of Object.entries(map)) node.data = node.data.split(char).join(entity);
67
+ });
68
+ return dom;
69
+ }
70
+ //#endregion
71
+ export { entities, entitiesDom };
72
+
73
+ //# sourceMappingURL=entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.js","names":["merge"],"sources":["../../src/transformers/entities.ts"],"sourcesContent":["import { defu as merge } from 'defu'\nimport type { ChildNode } from 'domhandler'\nimport { parse, serialize, walk } from '../utils/ast/index.ts'\nimport type { EntitiesConfig } from '../types/index.ts'\n\nconst DEFAULT_ENTITIES: Record<string, string> = {\n '\\u200D': '&zwj;',\n '\\u200C': '&zwnj;',\n '\\u00A0': '&nbsp;',\n '\\u00AD': '&shy;',\n '\\u200B': '&#8203;',\n '\\u2007': '&#8199;',\n '\\u034F': '&#847;',\n '\\u2003': '&emsp;',\n '\\u2028': '&LineSeparator;',\n '\\u2029': '&ParagraphSeparator;',\n '\\u00B7': '&middot;',\n '\\u2013': '&ndash;',\n '\\u2014': '&mdash;',\n '\\u2018': '&lsquo;',\n '\\u2019': '&rsquo;',\n '\\u201C': '&ldquo;',\n '\\u201D': '&rdquo;',\n '\\u00AB': '&laquo;',\n '\\u00BB': '&raquo;',\n '\\u2022': '&bull;',\n '\\u2039': '&lsaquo;',\n '\\u203A': '&rsaquo;'\n}\n\n/**\n * Replace literal Unicode characters in text nodes with their HTML entity\n * equivalents (zero-width joiners, non-breaking spaces, smart quotes,\n * dashes, etc.) for better email-client rendering.\n *\n * @param html HTML string to transform.\n * @param custom Extra entries merged on top of the built-in entity map, or\n * `false` to disable the transform. Defaults to `true`\n * (built-ins only).\n * @returns The transformed HTML string.\n *\n * @example\n * import { entities } from '@maizzle/framework'\n *\n * // Defaults only\n * entities('hello world') // → 'hello&nbsp;world'\n *\n * // Add a custom mapping\n * entities('© Maizzle', { '©': '&copy;' })\n *\n * // Disable the transform\n * entities('hello world', false)\n */\nexport function entities(html: string, custom: EntitiesConfig = true): string {\n return serialize(entitiesDom(parse(html), custom))\n}\n\n/**\n * DOM-form of {@link entities} used by the internal transformer pipeline.\n * Takes a parsed DOM, returns a parsed DOM — avoids redundant\n * serialize/parse round-trips when chained with other transformers.\n */\nexport function entitiesDom(dom: ChildNode[], custom: EntitiesConfig = true): ChildNode[] {\n if (!custom) return dom\n\n const map = typeof custom === 'object'\n ? merge(custom as Record<string, string>, DEFAULT_ENTITIES)\n : DEFAULT_ENTITIES\n\n walk(dom, (node) => {\n if (node.type === 'text') {\n for (const [char, entity] of Object.entries(map)) {\n node.data = node.data.split(char).join(entity)\n }\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;AAKA,MAAM,mBAA2C;CAC/C,KAAU;CACV,KAAU;CACV,QAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,UAAU;CACV,UAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACX;;;;;;;;;;;;;;;;;;;;;;;;AAyBD,SAAgB,SAAS,MAAc,SAAyB,MAAc;CAC5E,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,OAAO,CAAC;;;;;;;AAQpD,SAAgB,YAAY,KAAkB,SAAyB,MAAmB;CACxF,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,MAAM,OAAO,WAAW,WAC1BA,OAAM,QAAkC,iBAAiB,GACzD;CAEJ,KAAK,MAAM,SAAS;EAClB,IAAI,KAAK,SAAS,QAChB,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,IAAI,EAC9C,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,CAAC,KAAK,OAAO;GAGlD;CAEF,OAAO"}
@@ -0,0 +1,6 @@
1
+ //#region src/transformers/filters/defaults.d.ts
2
+ type FilterFunction = (str: string, value: string) => string;
3
+ declare const defaults: Record<string, FilterFunction>;
4
+ //#endregion
5
+ export { FilterFunction, defaults };
6
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","names":[],"sources":["../../../src/transformers/filters/defaults.ts"],"mappings":";KAAY,cAAA,IAAkB,GAAA,UAAa,KAAA;AAAA,cAgB9B,QAAA,EAAU,MAAA,SAAe,cAAA"}
@@ -0,0 +1,78 @@
1
+ //#region src/transformers/filters/defaults.ts
2
+ const escapeMap = {
3
+ "\"": "&#34;",
4
+ "&": "&amp;",
5
+ "'": "&#39;",
6
+ "<": "&lt;",
7
+ ">": "&gt;"
8
+ };
9
+ const escapeRegex = /["&'<>]/g;
10
+ function escapeHtml(str) {
11
+ return str.replace(escapeRegex, (ch) => escapeMap[ch]);
12
+ }
13
+ const defaults = {
14
+ append: (str, value) => str + value,
15
+ prepend: (str, value) => value + str,
16
+ uppercase: (str) => str.toUpperCase(),
17
+ lowercase: (str) => str.toLowerCase(),
18
+ capitalize: (str) => str.charAt(0).toUpperCase() + str.slice(1),
19
+ ceil: (str) => String(Math.ceil(Number.parseFloat(str))),
20
+ floor: (str) => String(Math.floor(Number.parseFloat(str))),
21
+ round: (str) => String(Math.round(Number.parseFloat(str))),
22
+ escape: (str) => escapeHtml(str),
23
+ "escape-once": (str) => {
24
+ return escapeHtml(str.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&#34;/g, "\"").replace(/&quot;/g, "\"").replace(/&#39;/g, "'").replace(/&apos;/g, "'"));
25
+ },
26
+ lstrip: (str) => str.trimStart(),
27
+ rstrip: (str) => str.trimEnd(),
28
+ trim: (str) => str.trim(),
29
+ minus: (str, value) => String(Number.parseFloat(str) - Number.parseFloat(value)),
30
+ plus: (str, value) => String(Number.parseFloat(str) + Number.parseFloat(value)),
31
+ multiply: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),
32
+ times: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),
33
+ "divide-by": (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),
34
+ divide: (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),
35
+ modulo: (str, value) => String(Number.parseFloat(str) % Number.parseFloat(value)),
36
+ "newline-to-br": (str) => str.replace(/\n/g, "<br>"),
37
+ "strip-newlines": (str) => str.replace(/\n/g, ""),
38
+ remove: (str, value) => str.split(value).join(""),
39
+ "remove-first": (str, value) => {
40
+ const i = str.indexOf(value);
41
+ return i === -1 ? str : str.slice(0, i) + str.slice(i + value.length);
42
+ },
43
+ replace: (str, value) => {
44
+ const [search = "", replacement = ""] = value.split("|");
45
+ return str.split(search).join(replacement);
46
+ },
47
+ "replace-first": (str, value) => {
48
+ const [search = "", replacement = ""] = value.split("|");
49
+ const i = str.indexOf(search);
50
+ return i === -1 ? str : str.slice(0, i) + replacement + str.slice(i + search.length);
51
+ },
52
+ size: (str) => String(str.length),
53
+ slice: (str, value) => {
54
+ const args = value.split(",").map((s) => Number.parseInt(s.trim(), 10));
55
+ return str.slice(args[0], args[1]);
56
+ },
57
+ truncate: (str, value) => {
58
+ const commaIndex = value.indexOf(",");
59
+ const length = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10);
60
+ const ellipsis = commaIndex === -1 ? "..." : value.slice(commaIndex + 1);
61
+ if (str.length <= length) return str;
62
+ return str.slice(0, length) + ellipsis;
63
+ },
64
+ "truncate-words": (str, value) => {
65
+ const commaIndex = value.indexOf(",");
66
+ const count = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10);
67
+ const ellipsis = commaIndex === -1 ? "..." : value.slice(commaIndex + 1);
68
+ const words = str.split(/\s+/).filter(Boolean);
69
+ if (words.length <= count) return str;
70
+ return words.slice(0, count).join(" ") + ellipsis;
71
+ },
72
+ "url-decode": (str) => decodeURIComponent(str.replace(/\+/g, " ")),
73
+ "url-encode": (str) => encodeURIComponent(str)
74
+ };
75
+ //#endregion
76
+ export { defaults };
77
+
78
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","names":[],"sources":["../../../src/transformers/filters/defaults.ts"],"sourcesContent":["export type FilterFunction = (str: string, value: string) => string\n\nconst escapeMap: Record<string, string> = {\n '\"': '&#34;',\n '&': '&amp;',\n \"'\": '&#39;',\n '<': '&lt;',\n '>': '&gt;',\n}\n\nconst escapeRegex = /[\"&'<>]/g\n\nfunction escapeHtml(str: string): string {\n return str.replace(escapeRegex, ch => escapeMap[ch])\n}\n\nexport const defaults: Record<string, FilterFunction> = {\n append: (str, value) => str + value,\n prepend: (str, value) => value + str,\n uppercase: str => str.toUpperCase(),\n lowercase: str => str.toLowerCase(),\n capitalize: str => str.charAt(0).toUpperCase() + str.slice(1),\n ceil: str => String(Math.ceil(Number.parseFloat(str))),\n floor: str => String(Math.floor(Number.parseFloat(str))),\n round: str => String(Math.round(Number.parseFloat(str))),\n escape: str => escapeHtml(str),\n 'escape-once': str => {\n const decoded = str\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&#34;/g, '\"')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/g, \"'\")\n\n return escapeHtml(decoded)\n },\n lstrip: str => str.trimStart(),\n rstrip: str => str.trimEnd(),\n trim: str => str.trim(),\n minus: (str, value) => String(Number.parseFloat(str) - Number.parseFloat(value)),\n plus: (str, value) => String(Number.parseFloat(str) + Number.parseFloat(value)),\n multiply: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),\n times: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),\n 'divide-by': (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),\n divide: (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),\n modulo: (str, value) => String(Number.parseFloat(str) % Number.parseFloat(value)),\n 'newline-to-br': str => str.replace(/\\n/g, '<br>'),\n 'strip-newlines': str => str.replace(/\\n/g, ''),\n remove: (str, value) => str.split(value).join(''),\n 'remove-first': (str, value) => {\n const i = str.indexOf(value)\n return i === -1 ? str : str.slice(0, i) + str.slice(i + value.length)\n },\n replace: (str, value) => {\n const [search = '', replacement = ''] = value.split('|')\n return str.split(search).join(replacement)\n },\n 'replace-first': (str, value) => {\n const [search = '', replacement = ''] = value.split('|')\n const i = str.indexOf(search)\n return i === -1 ? str : str.slice(0, i) + replacement + str.slice(i + search.length)\n },\n size: str => String(str.length),\n slice: (str, value) => {\n const args = value.split(',').map(s => Number.parseInt(s.trim(), 10))\n return str.slice(args[0], args[1])\n },\n truncate: (str, value) => {\n const commaIndex = value.indexOf(',')\n const length = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10)\n const ellipsis = commaIndex === -1 ? '...' : value.slice(commaIndex + 1)\n\n if (str.length <= length) return str\n\n return str.slice(0, length) + ellipsis\n },\n 'truncate-words': (str, value) => {\n const commaIndex = value.indexOf(',')\n const count = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10)\n const ellipsis = commaIndex === -1 ? '...' : value.slice(commaIndex + 1)\n const words = str.split(/\\s+/).filter(Boolean)\n\n if (words.length <= count) return str\n\n return words.slice(0, count).join(' ') + ellipsis\n },\n 'url-decode': str => decodeURIComponent(str.replace(/\\+/g, ' ')),\n 'url-encode': str => encodeURIComponent(str),\n}\n"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { FilterFunction } from "./defaults.js";
2
+ import { ChildNode } from "domhandler";
3
+
4
+ //#region src/transformers/filters/index.d.ts
5
+ type FiltersConfig = false | Record<string, (str: string, value: string) => string>;
6
+ /**
7
+ * Apply transformation functions to the content of elements that have
8
+ * matching filter attributes. Multiple filters on the same element are
9
+ * executed in the order the attributes are defined.
10
+ *
11
+ * Default filters include string manipulation (`uppercase`, `lowercase`,
12
+ * `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),
13
+ * and more.
14
+ *
15
+ * @param html HTML string to transform.
16
+ * @param custom Custom filters to merge with the defaults. Pass `false`
17
+ * to disable all filters (including the defaults).
18
+ * @returns The transformed HTML string.
19
+ *
20
+ * @example
21
+ * import { filters } from '@maizzle/framework'
22
+ *
23
+ * // Defaults only
24
+ * const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'
25
+ *
26
+ * // Add a custom filter
27
+ * filters('<p suffix=" world">hello</p>', {
28
+ * suffix: (s, v) => s + v,
29
+ * })
30
+ *
31
+ * // Disable all filters
32
+ * filters('<p uppercase>foo</p>', false)
33
+ */
34
+ declare function filters(html: string, custom?: FiltersConfig): string;
35
+ /**
36
+ * DOM-form of {@link filters} used by the internal transformer pipeline.
37
+ * Takes a parsed DOM, returns a parsed DOM — avoids redundant
38
+ * serialize/parse round-trips when chained with other transformers.
39
+ */
40
+ declare function filtersDom(dom: ChildNode[], custom?: FiltersConfig): ChildNode[];
41
+ //#endregion
42
+ export { type FilterFunction, FiltersConfig, filters, filtersDom };
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/transformers/filters/index.ts"],"mappings":";;;;KAMY,aAAA,WAAwB,MAAA,UAAgB,GAAA,UAAa,KAAA;;AAAjE;;;;;;;;;AA2CA;;;;;;;;;AASA;;;;;;;;;iBATgB,OAAA,CAAQ,IAAA,UAAc,MAAA,GAAQ,aAAA;;;;;;iBAS9B,UAAA,CAAW,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,aAAA,GAAqB,SAAA"}
@@ -0,0 +1,89 @@
1
+ import { parse } from "../../utils/ast/parser.js";
2
+ import { serialize } from "../../utils/ast/serializer.js";
3
+ import "../../utils/ast/index.js";
4
+ import { defaults } from "./defaults.js";
5
+ import { Text } from "domhandler";
6
+ //#region src/transformers/filters/index.ts
7
+ /**
8
+ * Process children before parents so nested filter elements work correctly.
9
+ */
10
+ function walkBottomUp(nodes, callback) {
11
+ for (const node of nodes.slice()) {
12
+ if ("children" in node && node.children?.length) walkBottomUp(node.children, callback);
13
+ callback(node);
14
+ }
15
+ }
16
+ /**
17
+ * Apply transformation functions to the content of elements that have
18
+ * matching filter attributes. Multiple filters on the same element are
19
+ * executed in the order the attributes are defined.
20
+ *
21
+ * Default filters include string manipulation (`uppercase`, `lowercase`,
22
+ * `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),
23
+ * and more.
24
+ *
25
+ * @param html HTML string to transform.
26
+ * @param custom Custom filters to merge with the defaults. Pass `false`
27
+ * to disable all filters (including the defaults).
28
+ * @returns The transformed HTML string.
29
+ *
30
+ * @example
31
+ * import { filters } from '@maizzle/framework'
32
+ *
33
+ * // Defaults only
34
+ * const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'
35
+ *
36
+ * // Add a custom filter
37
+ * filters('<p suffix=" world">hello</p>', {
38
+ * suffix: (s, v) => s + v,
39
+ * })
40
+ *
41
+ * // Disable all filters
42
+ * filters('<p uppercase>foo</p>', false)
43
+ */
44
+ function filters(html, custom = {}) {
45
+ return serialize(filtersDom(parse(html), custom));
46
+ }
47
+ /**
48
+ * DOM-form of {@link filters} used by the internal transformer pipeline.
49
+ * Takes a parsed DOM, returns a parsed DOM — avoids redundant
50
+ * serialize/parse round-trips when chained with other transformers.
51
+ */
52
+ function filtersDom(dom, custom = {}) {
53
+ if (custom === false) return dom;
54
+ const allFilters = {
55
+ ...defaults,
56
+ ...custom
57
+ };
58
+ const filterNames = new Set(Object.keys(allFilters));
59
+ walkBottomUp(dom, (node) => {
60
+ const el = node;
61
+ if (!el.attribs) return;
62
+ const matched = [];
63
+ for (const attr of Object.keys(el.attribs)) if (filterNames.has(attr)) matched.push({
64
+ name: attr,
65
+ value: el.attribs[attr]
66
+ });
67
+ if (matched.length === 0) return;
68
+ let content = serialize(el.children);
69
+ for (const { name, value } of matched) {
70
+ content = allFilters[name](content, value);
71
+ delete el.attribs[name];
72
+ }
73
+ if (content === "") el.children = [];
74
+ else if (/<[a-z/!]/i.test(content)) {
75
+ const newChildren = parse(content);
76
+ for (const child of newChildren) child.parent = el;
77
+ el.children = newChildren;
78
+ } else {
79
+ const textNode = new Text(content);
80
+ textNode.parent = el;
81
+ el.children = [textNode];
82
+ }
83
+ });
84
+ return dom;
85
+ }
86
+ //#endregion
87
+ export { filters, filtersDom };
88
+
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/transformers/filters/index.ts"],"sourcesContent":["import { Text } from 'domhandler'\nimport type { ChildNode, Element } from 'domhandler'\nimport { parse, serialize } from '../../utils/ast/index.ts'\nimport { defaults } from './defaults.ts'\n\nexport type { FilterFunction } from './defaults.ts'\nexport type FiltersConfig = false | Record<string, (str: string, value: string) => string>\n\n/**\n * Process children before parents so nested filter elements work correctly.\n */\nfunction walkBottomUp(nodes: ChildNode[], callback: (node: ChildNode) => void): void {\n for (const node of nodes.slice()) {\n if ('children' in node && node.children?.length) {\n walkBottomUp(node.children as ChildNode[], callback)\n }\n\n callback(node)\n }\n}\n\n/**\n * Apply transformation functions to the content of elements that have\n * matching filter attributes. Multiple filters on the same element are\n * executed in the order the attributes are defined.\n *\n * Default filters include string manipulation (`uppercase`, `lowercase`,\n * `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),\n * and more.\n *\n * @param html HTML string to transform.\n * @param custom Custom filters to merge with the defaults. Pass `false`\n * to disable all filters (including the defaults).\n * @returns The transformed HTML string.\n *\n * @example\n * import { filters } from '@maizzle/framework'\n *\n * // Defaults only\n * const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'\n *\n * // Add a custom filter\n * filters('<p suffix=\" world\">hello</p>', {\n * suffix: (s, v) => s + v,\n * })\n *\n * // Disable all filters\n * filters('<p uppercase>foo</p>', false)\n */\nexport function filters(html: string, custom: FiltersConfig = {}): string {\n return serialize(filtersDom(parse(html), custom))\n}\n\n/**\n * DOM-form of {@link filters} used by the internal transformer pipeline.\n * Takes a parsed DOM, returns a parsed DOM — avoids redundant\n * serialize/parse round-trips when chained with other transformers.\n */\nexport function filtersDom(dom: ChildNode[], custom: FiltersConfig = {}): ChildNode[] {\n if (custom === false) return dom\n\n const allFilters = { ...defaults, ...custom }\n const filterNames = new Set(Object.keys(allFilters))\n\n walkBottomUp(dom, (node) => {\n const el = node as Element\n\n if (!el.attribs) return\n\n // Collect matching filter attributes in source order\n const matched: Array<{ name: string; value: string }> = []\n\n for (const attr of Object.keys(el.attribs)) {\n if (filterNames.has(attr)) {\n matched.push({ name: attr, value: el.attribs[attr] })\n }\n }\n\n if (matched.length === 0) return\n\n // Serialize children to get innerHTML\n let content = serialize(el.children as ChildNode[])\n\n // Apply each filter in attribute order\n for (const { name, value } of matched) {\n content = allFilters[name](content, value)\n delete el.attribs[name]\n }\n\n // Replace children with the filtered content\n if (content === '') {\n el.children = []\n } else if (/<[a-z/!]/i.test(content)) {\n // Result contains HTML elements — parse back to DOM\n const newChildren = parse(content)\n\n for (const child of newChildren) {\n child.parent = el as any\n }\n\n el.children = newChildren as ChildNode[]\n } else {\n // Text-only result — create a text node directly to preserve entity strings\n const textNode = new Text(content)\n textNode.parent = el as any\n el.children = [textNode]\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;;;;AAWA,SAAS,aAAa,OAAoB,UAA2C;CACnF,KAAK,MAAM,QAAQ,MAAM,OAAO,EAAE;EAChC,IAAI,cAAc,QAAQ,KAAK,UAAU,QACvC,aAAa,KAAK,UAAyB,SAAS;EAGtD,SAAS,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgClB,SAAgB,QAAQ,MAAc,SAAwB,EAAE,EAAU;CACxE,OAAO,UAAU,WAAW,MAAM,KAAK,EAAE,OAAO,CAAC;;;;;;;AAQnD,SAAgB,WAAW,KAAkB,SAAwB,EAAE,EAAe;CACpF,IAAI,WAAW,OAAO,OAAO;CAE7B,MAAM,aAAa;EAAE,GAAG;EAAU,GAAG;EAAQ;CAC7C,MAAM,cAAc,IAAI,IAAI,OAAO,KAAK,WAAW,CAAC;CAEpD,aAAa,MAAM,SAAS;EAC1B,MAAM,KAAK;EAEX,IAAI,CAAC,GAAG,SAAS;EAGjB,MAAM,UAAkD,EAAE;EAE1D,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,QAAQ,EACxC,IAAI,YAAY,IAAI,KAAK,EACvB,QAAQ,KAAK;GAAE,MAAM;GAAM,OAAO,GAAG,QAAQ;GAAO,CAAC;EAIzD,IAAI,QAAQ,WAAW,GAAG;EAG1B,IAAI,UAAU,UAAU,GAAG,SAAwB;EAGnD,KAAK,MAAM,EAAE,MAAM,WAAW,SAAS;GACrC,UAAU,WAAW,MAAM,SAAS,MAAM;GAC1C,OAAO,GAAG,QAAQ;;EAIpB,IAAI,YAAY,IACd,GAAG,WAAW,EAAE;OACX,IAAI,YAAY,KAAK,QAAQ,EAAE;GAEpC,MAAM,cAAc,MAAM,QAAQ;GAElC,KAAK,MAAM,SAAS,aAClB,MAAM,SAAS;GAGjB,GAAG,WAAW;SACT;GAEL,MAAM,WAAW,IAAI,KAAK,QAAQ;GAClC,SAAS,SAAS;GAClB,GAAG,WAAW,CAAC,SAAS;;GAE1B;CAEF,OAAO"}
@@ -0,0 +1,22 @@
1
+ import { FormatOptions, FormatOptions as FormatOptions$1 } from "oxfmt";
2
+
3
+ //#region src/transformers/format.d.ts
4
+ /**
5
+ * Pretty-print an HTML string with `oxfmt`. Maizzle defaults
6
+ * (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,
7
+ * `embeddedLanguageFormatting: 'off'`) are merged underneath any options
8
+ * you pass.
9
+ *
10
+ * @param html HTML string to format.
11
+ * @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).
12
+ * @returns The formatted HTML string.
13
+ *
14
+ * @example
15
+ * import { format } from '@maizzle/framework'
16
+ *
17
+ * const pretty = await format(html, { useTabs: true, tabWidth: 4 })
18
+ */
19
+ declare function format(html: string, options?: FormatOptions$1): Promise<string>;
20
+ //#endregion
21
+ export { type FormatOptions, format };
22
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","names":[],"sources":["../../src/transformers/format.ts"],"mappings":";;;;AA2BA;;;;;;;;;;;;;;iBAAsB,MAAA,CAAO,IAAA,UAAc,OAAA,GAAS,eAAA,GAAqB,OAAA"}
@@ -0,0 +1,30 @@
1
+ import { defu as defu$1 } from "defu";
2
+ import { format as format$1 } from "oxfmt";
3
+ //#region src/transformers/format.ts
4
+ const DEFAULT_OPTIONS = {
5
+ printWidth: 320,
6
+ htmlWhitespaceSensitivity: "ignore",
7
+ embeddedLanguageFormatting: "off"
8
+ };
9
+ /**
10
+ * Pretty-print an HTML string with `oxfmt`. Maizzle defaults
11
+ * (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,
12
+ * `embeddedLanguageFormatting: 'off'`) are merged underneath any options
13
+ * you pass.
14
+ *
15
+ * @param html HTML string to format.
16
+ * @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).
17
+ * @returns The formatted HTML string.
18
+ *
19
+ * @example
20
+ * import { format } from '@maizzle/framework'
21
+ *
22
+ * const pretty = await format(html, { useTabs: true, tabWidth: 4 })
23
+ */
24
+ async function format(html, options = {}) {
25
+ return (await format$1("input.html", html, defu$1(options, DEFAULT_OPTIONS))).code;
26
+ }
27
+ //#endregion
28
+ export { format };
29
+
30
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","names":["oxfmt","merge"],"sources":["../../src/transformers/format.ts"],"sourcesContent":["import { format as oxfmt } from 'oxfmt'\nimport { defu as merge } from 'defu'\nimport type { FormatOptions } from 'oxfmt'\n\nexport type { FormatOptions } from 'oxfmt'\n\nconst DEFAULT_OPTIONS: FormatOptions = {\n printWidth: 320,\n htmlWhitespaceSensitivity: 'ignore',\n embeddedLanguageFormatting: 'off',\n}\n\n/**\n * Pretty-print an HTML string with `oxfmt`. Maizzle defaults\n * (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,\n * `embeddedLanguageFormatting: 'off'`) are merged underneath any options\n * you pass.\n *\n * @param html HTML string to format.\n * @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).\n * @returns The formatted HTML string.\n *\n * @example\n * import { format } from '@maizzle/framework'\n *\n * const pretty = await format(html, { useTabs: true, tabWidth: 4 })\n */\nexport async function format(html: string, options: FormatOptions = {}): Promise<string> {\n const merged = merge(options, DEFAULT_OPTIONS)\n const result = await oxfmt('input.html', html, merged)\n return result.code\n}\n"],"mappings":";;;AAMA,MAAM,kBAAiC;CACrC,YAAY;CACZ,2BAA2B;CAC3B,4BAA4B;CAC7B;;;;;;;;;;;;;;;;AAiBD,eAAsB,OAAO,MAAc,UAAyB,EAAE,EAAmB;CAGvF,QAAO,MADcA,SAAM,cAAc,MAD1BC,OAAM,SAAS,gBACuB,CAAC,EACxC"}
@@ -1,4 +1,5 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
1
+ import { MaizzleConfig } from "../types/config.js";
2
+ import { TailwindBlock } from "../composables/renderContext.js";
2
3
 
3
4
  //#region src/transformers/index.d.ts
4
5
  /**
@@ -19,17 +20,19 @@ import { MaizzleConfig } from "../types/config.mjs";
19
20
  * 4. CSS inliner
20
21
  * 5. Remove attributes
21
22
  * 6. Shorthand CSS
22
- * 7. Add attributes
23
- * 8. Base URL
24
- * 9. URL query
25
- * 10. Purge CSS (serializes/parses internally around email-comb)
26
- * 11. Entities
23
+ * 7. Six-digit HEX
24
+ * 8. Add attributes
25
+ * 9. Filters
26
+ * 10. Base URL
27
+ * 11. URL query
28
+ * 12. Purge CSS (serializes/parses internally around email-comb)
29
+ * 13. Entities
27
30
  * + Vue-generated comments stripped here (on serialized string)
28
- * 12. Replace strings
29
- * 13. Prettify
30
- * 14. Minify
31
+ * 14. Replace strings
32
+ * 15. Prettify
33
+ * 16. Minify
31
34
  */
32
- declare function runTransformers(html: string, config: MaizzleConfig, filePath?: string): Promise<string>;
35
+ declare function runTransformers(html: string, config: MaizzleConfig, filePath?: string, doctype?: string, tailwindBlocks?: TailwindBlock[]): Promise<string>;
33
36
  //#endregion
34
37
  export { runTransformers };
35
- //# sourceMappingURL=index.d.mts.map
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/transformers/index.ts"],"mappings":";;;;;;AAsDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsB,eAAA,CACpB,IAAA,UACA,MAAA,EAAQ,aAAA,EACR,QAAA,WACA,OAAA,WACA,cAAA,GAAiB,aAAA,KAChB,OAAA"}
@@ -0,0 +1,133 @@
1
+ import { parse } from "../utils/ast/parser.js";
2
+ import { serialize } from "../utils/ast/serializer.js";
3
+ import "../utils/ast/index.js";
4
+ import { inlineLinkDom } from "./inlineLink.js";
5
+ import { tailwindComponent } from "./tailwindComponent.js";
6
+ import { tailwindcss } from "./tailwindcss.js";
7
+ import { safeClassNames } from "./safeClassNames.js";
8
+ import { attributeToStyleDom } from "./attributeToStyle.js";
9
+ import { inlineCssDom } from "./inlineCss.js";
10
+ import { msoPlaceholders } from "./msoPlaceholders.js";
11
+ import { columnWidth } from "./columnWidth.js";
12
+ import { removeAttributesDom } from "./removeAttributes.js";
13
+ import { shorthandCssDom } from "./shorthandCss.js";
14
+ import { sixHexDom } from "./sixHex.js";
15
+ import { addAttributes } from "./addAttributes.js";
16
+ import { filtersDom } from "./filters/index.js";
17
+ import { baseDom } from "./base.js";
18
+ import { entitiesDom } from "./entities.js";
19
+ import { urlQueryDom } from "./urlQuery.js";
20
+ import { purgeCssDom } from "./purgeCss.js";
21
+ import { replaceStrings } from "./replaceStrings.js";
22
+ import { format } from "./format.js";
23
+ import { minify } from "./minify.js";
24
+ //#region src/transformers/index.ts
25
+ /**
26
+ * Run all Maizzle transformers on the rendered HTML.
27
+ *
28
+ * The HTML is parsed into a DOM once at the start and passed through all
29
+ * DOM-based transformers as a shared `ChildNode[]`. After all DOM transformers
30
+ * complete, the DOM is serialized back to a string exactly once.
31
+ *
32
+ * String-only transformers (those that rely on external tools that require a
33
+ * raw HTML string) then run on the serialized output.
34
+ *
35
+ * Transformers run in a specific order:
36
+ * 0. Inline link stylesheets — replace `<link rel="stylesheet">` with `<style>` tags
37
+ * 1. Tailwind CSS — compile CSS, lower syntax, optimize (cleanup + merge media queries)
38
+ * 2. Safe class names
39
+ * 3. Attribute to style
40
+ * 4. CSS inliner
41
+ * 5. Remove attributes
42
+ * 6. Shorthand CSS
43
+ * 7. Six-digit HEX
44
+ * 8. Add attributes
45
+ * 9. Filters
46
+ * 10. Base URL
47
+ * 11. URL query
48
+ * 12. Purge CSS (serializes/parses internally around email-comb)
49
+ * 13. Entities
50
+ * + Vue-generated comments stripped here (on serialized string)
51
+ * 14. Replace strings
52
+ * 15. Prettify
53
+ * 16. Minify
54
+ */
55
+ async function runTransformers(html, config, filePath, doctype, tailwindBlocks) {
56
+ const toggles = typeof config.useTransformers === "object" ? config.useTransformers : null;
57
+ const enabled = (key) => toggles?.[key] !== false;
58
+ let effective = config;
59
+ if (toggles) {
60
+ const cssOver = {};
61
+ const htmlOver = {};
62
+ if (toggles.inlineCss === true) cssOver.inline = true;
63
+ if (toggles.purgeCss === true) cssOver.purge = true;
64
+ if (toggles.safeClassNames === true) cssOver.safe = true;
65
+ if (toggles.shorthandCss === true) cssOver.shorthand = true;
66
+ if (toggles.sixHex === true) cssOver.sixHex = true;
67
+ if (toggles.prettify === true) htmlOver.format = true;
68
+ if (toggles.minify === true) htmlOver.minify = true;
69
+ if (toggles.entities === true) htmlOver.decodeEntities = true;
70
+ if (Object.keys(cssOver).length || Object.keys(htmlOver).length) effective = {
71
+ ...config,
72
+ css: {
73
+ ...config.css,
74
+ ...cssOver
75
+ },
76
+ html: {
77
+ ...config.html,
78
+ ...htmlOver
79
+ }
80
+ };
81
+ }
82
+ let dom = parse(html);
83
+ dom = await inlineLinkDom(dom, filePath);
84
+ if (tailwindBlocks?.length) dom = await tailwindComponent(dom, tailwindBlocks, effective, filePath);
85
+ dom = await tailwindcss(dom, effective, filePath);
86
+ if (enabled("safeClassNames")) dom = safeClassNames(dom, effective.css);
87
+ if (enabled("attributeToStyle") && typeof effective.css?.inline === "object" && effective.css.inline.attributeToStyle) dom = attributeToStyleDom(dom, effective.css.inline.attributeToStyle);
88
+ if (enabled("inlineCss") && effective.css?.inline) {
89
+ const inlineOptions = typeof effective.css.inline === "object" ? effective.css.inline : {};
90
+ dom = inlineCssDom(dom, inlineOptions);
91
+ }
92
+ dom = msoPlaceholders(dom);
93
+ dom = columnWidth(dom);
94
+ if (enabled("removeAttributes")) {
95
+ const removeRules = effective.html?.attributes?.remove;
96
+ dom = removeAttributesDom(dom, Array.isArray(removeRules) ? removeRules : []);
97
+ }
98
+ if (enabled("shorthandCss") && effective.css?.shorthand) {
99
+ const shorthandOptions = typeof effective.css.shorthand === "object" ? effective.css.shorthand : {};
100
+ dom = shorthandCssDom(dom, shorthandOptions);
101
+ }
102
+ if (enabled("sixHex") && effective.css?.sixHex !== false) dom = sixHexDom(dom);
103
+ if (enabled("addAttributes")) dom = addAttributes(dom, effective.html?.attributes);
104
+ if (enabled("filters")) dom = filtersDom(dom, effective.filters);
105
+ if (enabled("baseURL") && effective.url?.base) dom = baseDom(dom, effective.url.base);
106
+ if (enabled("urlQuery") && effective.url?.query && Object.keys(effective.url.query).length > 0) {
107
+ const { _options: queryOptions, ...queryParams } = effective.url.query;
108
+ dom = urlQueryDom(dom, queryParams, queryOptions ?? {});
109
+ }
110
+ if (enabled("purgeCss") && effective.css?.purge) {
111
+ const purgeOptions = typeof effective.css.purge === "object" ? effective.css.purge : {};
112
+ dom = purgeCssDom(dom, purgeOptions);
113
+ }
114
+ if (enabled("entities")) dom = entitiesDom(dom, effective.html?.decodeEntities);
115
+ const isXhtml = doctype ? /xhtml/i.test(doctype) : false;
116
+ let result = serialize(dom, { selfClosingTags: isXhtml });
117
+ if (enabled("replaceStrings")) result = replaceStrings(result, effective);
118
+ const minifyWillRun = enabled("minify") && !!effective.html?.minify;
119
+ if (enabled("prettify") && !minifyWillRun && effective.html?.format) {
120
+ const formatOptions = typeof effective.html.format === "object" ? effective.html.format : {};
121
+ result = await format(result, formatOptions);
122
+ }
123
+ if (enabled("minify") && effective.html?.minify) {
124
+ const minifyOptions = typeof effective.html.minify === "object" ? effective.html.minify : {};
125
+ result = minify(result, minifyOptions);
126
+ }
127
+ if (!isXhtml) result = result.replace(/<!--\[if [^\]]*\]>[\s\S]*?<!\[endif\]-->|( \/>)/g, (match, selfClose) => selfClose ? ">" : match);
128
+ return result;
129
+ }
130
+ //#endregion
131
+ export { runTransformers };
132
+
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/transformers/index.ts"],"sourcesContent":["import { parse, serialize } from '../utils/ast/index.ts'\nimport { inlineLinkDom } from './inlineLink.ts'\nimport { tailwindComponent } from './tailwindComponent.ts'\nimport { tailwindcss } from './tailwindcss.ts'\nimport { safeClassNames } from './safeClassNames.ts'\nimport { attributeToStyleDom } from './attributeToStyle.ts'\nimport { inlineCssDom } from './inlineCss.ts'\nimport { msoPlaceholders } from './msoPlaceholders.ts'\nimport { columnWidth } from './columnWidth.ts'\nimport { removeAttributesDom } from './removeAttributes.ts'\nimport { shorthandCssDom } from './shorthandCss.ts'\nimport { sixHexDom } from './sixHex.ts'\nimport { addAttributes } from './addAttributes.ts'\nimport { filtersDom } from './filters/index.ts'\nimport { baseDom } from './base.ts'\nimport { entitiesDom } from './entities.ts'\nimport { urlQueryDom } from './urlQuery.ts'\nimport { purgeCssDom } from './purgeCss.ts'\nimport { replaceStrings } from './replaceStrings.ts'\nimport { format } from './format.ts'\nimport { minify } from './minify.ts'\nimport type { MaizzleConfig } from '../types/config.ts'\nimport type { TailwindBlock } from '../composables/renderContext.ts'\n\n/**\n * Run all Maizzle transformers on the rendered HTML.\n *\n * The HTML is parsed into a DOM once at the start and passed through all\n * DOM-based transformers as a shared `ChildNode[]`. After all DOM transformers\n * complete, the DOM is serialized back to a string exactly once.\n *\n * String-only transformers (those that rely on external tools that require a\n * raw HTML string) then run on the serialized output.\n *\n * Transformers run in a specific order:\n * 0. Inline link stylesheets — replace `<link rel=\"stylesheet\">` with `<style>` tags\n * 1. Tailwind CSS — compile CSS, lower syntax, optimize (cleanup + merge media queries)\n * 2. Safe class names\n * 3. Attribute to style\n * 4. CSS inliner\n * 5. Remove attributes\n * 6. Shorthand CSS\n * 7. Six-digit HEX\n * 8. Add attributes\n * 9. Filters\n * 10. Base URL\n * 11. URL query\n * 12. Purge CSS (serializes/parses internally around email-comb)\n * 13. Entities\n * + Vue-generated comments stripped here (on serialized string)\n * 14. Replace strings\n * 15. Prettify\n * 16. Minify\n */\nexport async function runTransformers(\n html: string,\n config: MaizzleConfig,\n filePath?: string,\n doctype?: string,\n tailwindBlocks?: TailwindBlock[],\n): Promise<string> {\n // Per-transformer skip map — only honored when useTransformers is an object.\n // Whole-pipeline opt-out (`useTransformers === false`) is handled upstream\n // in build.ts / render so we never reach this function in that case.\n //\n // A toggle set to `true` *force-enables* its transformer for this run by\n // layering on the matching config slice (e.g. `prettify: true` sets\n // `html.format = true`). This only applies to transformers whose\n // enable flag is a plain boolean — data-driven ones (filters,\n // baseURL, urlQuery, etc.) need actual config values, so a\n // bare `true` for those is a no-op.\n const toggles = typeof config.useTransformers === 'object' ? config.useTransformers : null\n const enabled = (key: keyof NonNullable<typeof toggles>) => toggles?.[key] !== false\n\n let effective = config\n if (toggles) {\n const cssOver: Record<string, unknown> = {}\n const htmlOver: Record<string, unknown> = {}\n if (toggles.inlineCss === true) cssOver.inline = true\n if (toggles.purgeCss === true) cssOver.purge = true\n if (toggles.safeClassNames === true) cssOver.safe = true\n if (toggles.shorthandCss === true) cssOver.shorthand = true\n if (toggles.sixHex === true) cssOver.sixHex = true\n if (toggles.prettify === true) htmlOver.format = true\n if (toggles.minify === true) htmlOver.minify = true\n if (toggles.entities === true) htmlOver.decodeEntities = true\n\n if (Object.keys(cssOver).length || Object.keys(htmlOver).length) {\n effective = {\n ...config,\n css: { ...config.css, ...cssOver },\n html: { ...config.html, ...htmlOver },\n }\n }\n }\n\n // Parse once — all DOM transformers share this array\n let dom = parse(html)\n\n // 0. Inline <link> stylesheets\n dom = await inlineLinkDom(dom, filePath)\n\n // 0.5. <Tailwind> component — compile per-block scoped CSS, inject into <head>\n if (tailwindBlocks?.length) {\n dom = await tailwindComponent(dom, tailwindBlocks, effective, filePath)\n }\n\n // 1. Tailwind CSS — always runs first\n dom = await tailwindcss(dom, effective, filePath)\n\n // 2. Safe class names\n if (enabled('safeClassNames')) dom = safeClassNames(dom, effective.css)\n\n // 3. Attribute to style\n if (enabled('attributeToStyle') && typeof effective.css?.inline === 'object' && effective.css.inline.attributeToStyle) {\n dom = attributeToStyleDom(dom, effective.css.inline.attributeToStyle)\n }\n\n // 4. CSS inliner (serializes/parses internally around juice)\n if (enabled('inlineCss') && effective.css?.inline) {\n const inlineOptions = typeof effective.css.inline === 'object' ? effective.css.inline : {}\n dom = inlineCssDom(dom, inlineOptions)\n }\n\n // 4.5. Resolve MSO placeholders (table width + td style) from inlined CSS\n dom = msoPlaceholders(dom)\n\n // 4.6. Resolve Column min-width placeholders from nearest sized ancestor\n dom = columnWidth(dom)\n\n // 5. Remove attributes\n if (enabled('removeAttributes')) {\n const removeRules = effective.html?.attributes?.remove\n dom = removeAttributesDom(dom, Array.isArray(removeRules) ? removeRules : [])\n }\n\n // 6. Shorthand CSS\n if (enabled('shorthandCss') && effective.css?.shorthand) {\n const shorthandOptions = typeof effective.css.shorthand === 'object' ? effective.css.shorthand : {}\n dom = shorthandCssDom(dom, shorthandOptions)\n }\n\n // 7. Six-digit HEX\n if (enabled('sixHex') && effective.css?.sixHex !== false) dom = sixHexDom(dom)\n\n // 8. Add attributes\n if (enabled('addAttributes')) dom = addAttributes(dom, effective.html?.attributes)\n\n // 9. Filters\n if (enabled('filters')) dom = filtersDom(dom, effective.filters)\n\n // 10. Base URL (serializes/parses internally for VML/MSO regex passes)\n if (enabled('baseURL') && effective.url?.base) dom = baseDom(dom, effective.url.base)\n\n // 11. URL query\n if (enabled('urlQuery') && effective.url?.query && Object.keys(effective.url.query).length > 0) {\n const { _options: queryOptions, ...queryParams } = effective.url.query as Record<string, unknown>\n dom = urlQueryDom(dom, queryParams, (queryOptions ?? {}) as import('../types/config.ts').UrlQueryOptions)\n }\n\n // 12. Remove unused CSS (serializes/parses internally around email-comb)\n if (enabled('purgeCss') && effective.css?.purge) {\n const purgeOptions = typeof effective.css.purge === 'object' ? effective.css.purge : {}\n dom = purgeCssDom(dom, purgeOptions)\n }\n\n // 13. Entities\n if (enabled('entities')) dom = entitiesDom(dom, effective.html?.decodeEntities)\n\n // Serialize once — remaining transformers operate on the HTML string\n const isXhtml = doctype ? /xhtml/i.test(doctype) : false\n let result = serialize(dom, { selfClosingTags: isXhtml })\n\n // 14. Replace strings\n if (enabled('replaceStrings')) result = replaceStrings(result, effective)\n\n // 15. Format — skipped when `minify` is enabled\n const minifyWillRun = enabled('minify') && !!effective.html?.minify\n if (enabled('prettify') && !minifyWillRun && effective.html?.format) {\n const formatOptions = typeof effective.html.format === 'object' ? effective.html.format : {}\n result = await format(result, formatOptions)\n }\n\n // 16. Minify\n if (enabled('minify') && effective.html?.minify) {\n const minifyOptions = typeof effective.html.minify === 'object' ? effective.html.minify : {}\n result = minify(result, minifyOptions)\n }\n\n // Strip self-closing slashes for HTML5 doctypes, but preserve content\n // inside MSO conditional comments (which are XML-ish and case/syntax sensitive).\n if (!isXhtml) {\n result = result.replace(\n /<!--\\[if [^\\]]*\\]>[\\s\\S]*?<!\\[endif\\]-->|( \\/>)/g,\n (match, selfClose) => selfClose ? '>' : match,\n )\n }\n\n return result\n}\n"],"mappings":"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"}