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

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 (542) 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.mjs → build.js} +33 -19
  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/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
  58. package/dist/composables/useDoctype.d.ts.map +1 -0
  59. package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
  60. package/dist/composables/useDoctype.js.map +1 -0
  61. package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +2 -2
  62. package/dist/composables/useEvent.d.ts.map +1 -0
  63. package/dist/composables/{useEvent.mjs → useEvent.js} +3 -4
  64. package/dist/composables/useEvent.js.map +1 -0
  65. package/dist/composables/useFont.d.ts +50 -0
  66. package/dist/composables/useFont.d.ts.map +1 -0
  67. package/dist/composables/useFont.js +92 -0
  68. package/dist/composables/useFont.js.map +1 -0
  69. package/dist/composables/useOutlookFallback.d.ts +21 -0
  70. package/dist/composables/useOutlookFallback.d.ts.map +1 -0
  71. package/dist/composables/useOutlookFallback.js +29 -0
  72. package/dist/composables/useOutlookFallback.js.map +1 -0
  73. package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
  74. package/dist/composables/usePlaintext.d.ts.map +1 -0
  75. package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
  76. package/dist/composables/usePlaintext.js.map +1 -0
  77. package/dist/composables/usePreheader.d.ts +24 -0
  78. package/dist/composables/usePreheader.d.ts.map +1 -0
  79. package/dist/composables/usePreheader.js +28 -0
  80. package/dist/composables/usePreheader.js.map +1 -0
  81. package/dist/composables/useTransformers.d.ts +34 -0
  82. package/dist/composables/useTransformers.d.ts.map +1 -0
  83. package/dist/composables/useTransformers.js +48 -0
  84. package/dist/composables/useTransformers.js.map +1 -0
  85. package/dist/composables/useUrlQuery.d.ts +19 -0
  86. package/dist/composables/useUrlQuery.d.ts.map +1 -0
  87. package/dist/composables/useUrlQuery.js +26 -0
  88. package/dist/composables/useUrlQuery.js.map +1 -0
  89. package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
  90. package/dist/config/defaults.d.ts.map +1 -0
  91. package/dist/config/{defaults.mjs → defaults.js} +10 -6
  92. package/dist/config/defaults.js.map +1 -0
  93. package/dist/config/{index.d.mts → index.d.ts} +4 -4
  94. package/dist/config/index.d.ts.map +1 -0
  95. package/dist/config/{index.mjs → index.js} +12 -10
  96. package/dist/config/index.js.map +1 -0
  97. package/dist/events/{index.d.mts → index.d.ts} +10 -4
  98. package/dist/events/index.d.ts.map +1 -0
  99. package/dist/events/{index.mjs → index.js} +21 -5
  100. package/dist/events/index.js.map +1 -0
  101. package/dist/index.d.ts +38 -0
  102. package/dist/index.js +37 -0
  103. package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
  104. package/dist/plaintext.d.ts.map +1 -0
  105. package/dist/{plaintext.mjs → plaintext.js} +4 -5
  106. package/dist/plaintext.js.map +1 -0
  107. package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
  108. package/dist/plugin.d.ts.map +1 -0
  109. package/dist/plugin.js +57 -0
  110. package/dist/plugin.js.map +1 -0
  111. package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
  112. package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
  113. package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
  114. package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
  115. package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
  116. package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
  117. package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
  118. package/dist/plugins/postcss/pruneVars.js.map +1 -0
  119. package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
  120. package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
  121. package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
  122. package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
  123. package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
  124. package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
  125. package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
  126. package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
  127. package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
  128. package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
  129. package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
  130. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
  131. package/dist/plugins/postcss/resolveProps.d.ts +8 -0
  132. package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
  133. package/dist/plugins/postcss/resolveProps.js +144 -0
  134. package/dist/plugins/postcss/resolveProps.js.map +1 -0
  135. package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
  136. package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
  137. package/dist/plugins/postcss/tailwindCleanup.js +68 -0
  138. package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
  139. package/dist/prepare.d.ts +17 -0
  140. package/dist/prepare.d.ts.map +1 -0
  141. package/dist/prepare.js +44 -0
  142. package/dist/prepare.js.map +1 -0
  143. package/dist/render/active.d.ts +8 -0
  144. package/dist/render/active.d.ts.map +1 -0
  145. package/dist/render/active.js +12 -0
  146. package/dist/render/active.js.map +1 -0
  147. package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +15 -7
  148. package/dist/render/createRenderer.d.ts.map +1 -0
  149. package/dist/render/createRenderer.js +319 -0
  150. package/dist/render/createRenderer.js.map +1 -0
  151. package/dist/render/index.d.ts +18 -0
  152. package/dist/render/index.d.ts.map +1 -0
  153. package/dist/render/index.js +53 -0
  154. package/dist/render/index.js.map +1 -0
  155. package/dist/render/injectFonts.d.ts +15 -0
  156. package/dist/render/injectFonts.d.ts.map +1 -0
  157. package/dist/render/injectFonts.js +45 -0
  158. package/dist/render/injectFonts.js.map +1 -0
  159. package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
  160. package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
  161. package/dist/render/plugins/codeBlockExtract.js +34 -0
  162. package/dist/render/plugins/codeBlockExtract.js.map +1 -0
  163. package/dist/render/plugins/markdownExtract.d.ts +12 -0
  164. package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
  165. package/dist/render/plugins/markdownExtract.js +49 -0
  166. package/dist/render/plugins/markdownExtract.js.map +1 -0
  167. package/dist/render/plugins/rawExtract.d.ts +14 -0
  168. package/dist/render/plugins/rawExtract.d.ts.map +1 -0
  169. package/dist/render/plugins/rawExtract.js +34 -0
  170. package/dist/render/plugins/rawExtract.js.map +1 -0
  171. package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
  172. package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
  173. package/dist/render/plugins/rowSourceLocation.js +45 -0
  174. package/dist/render/plugins/rowSourceLocation.js.map +1 -0
  175. package/dist/{serve.d.mts → serve.d.ts} +4 -2
  176. package/dist/serve.d.ts.map +1 -0
  177. package/dist/{serve.mjs → serve.js} +203 -79
  178. package/dist/serve.js.map +1 -0
  179. package/dist/server/compatibility.d.ts +59 -0
  180. package/dist/server/compatibility.d.ts.map +1 -0
  181. package/dist/server/compatibility.js +911 -0
  182. package/dist/server/compatibility.js.map +1 -0
  183. package/dist/server/email.d.ts +17 -0
  184. package/dist/server/email.d.ts.map +1 -0
  185. package/dist/server/email.js +40 -0
  186. package/dist/server/email.js.map +1 -0
  187. package/dist/server/linter.d.ts +20 -0
  188. package/dist/server/linter.d.ts.map +1 -0
  189. package/dist/server/linter.js +339 -0
  190. package/dist/server/linter.js.map +1 -0
  191. package/dist/server/sfc-utils.d.ts +21 -0
  192. package/dist/server/sfc-utils.d.ts.map +1 -0
  193. package/dist/server/sfc-utils.js +198 -0
  194. package/dist/server/sfc-utils.js.map +1 -0
  195. package/dist/server/ui/App.vue +253 -77
  196. package/dist/server/ui/components/SidebarClose.vue +12 -0
  197. package/dist/server/ui/components/ui/checkbox/Checkbox.vue +35 -0
  198. package/dist/server/ui/components/ui/checkbox/index.ts +1 -0
  199. package/dist/server/ui/components/ui/command/Command.vue +5 -1
  200. package/dist/server/ui/components/ui/command/CommandDialog.vue +1 -1
  201. package/dist/server/ui/components/ui/command/CommandInput.vue +19 -1
  202. package/dist/server/ui/components/ui/command/CommandItem.vue +1 -1
  203. package/dist/server/ui/components/ui/command/CommandList.vue +1 -1
  204. package/dist/server/ui/components/ui/command/CommandShortcut.vue +1 -1
  205. package/dist/server/ui/components/ui/dialog/DialogOverlay.vue +9 -1
  206. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -1
  207. package/dist/server/ui/components/ui/input/Input.vue +1 -1
  208. package/dist/server/ui/components/ui/scroll-area/ScrollBar.vue +1 -1
  209. package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
  210. package/dist/server/ui/components/ui/sheet/SheetOverlay.vue +9 -1
  211. package/dist/server/ui/components/ui/sidebar/Sidebar.vue +8 -1
  212. package/dist/server/ui/components/ui/sidebar/SidebarProvider.vue +1 -1
  213. package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +5 -4
  214. package/dist/server/ui/components/ui/tags-input/TagsInput.vue +26 -0
  215. package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +17 -0
  216. package/dist/server/ui/components/ui/tags-input/TagsInputItem.vue +19 -0
  217. package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +22 -0
  218. package/dist/server/ui/components/ui/tags-input/TagsInputItemText.vue +17 -0
  219. package/dist/server/ui/components/ui/tags-input/index.ts +5 -0
  220. package/dist/server/ui/components/ui/toggle/index.ts +3 -3
  221. package/dist/server/ui/components/ui/toggle-group/ToggleGroup.vue +1 -1
  222. package/dist/server/ui/components/ui/toggle-group/ToggleGroupItem.vue +2 -2
  223. package/dist/server/ui/lib/emulated-dark-mode.ts +131 -0
  224. package/dist/server/ui/main.css +20 -20
  225. package/dist/server/ui/pages/Home.vue +12 -5
  226. package/dist/server/ui/pages/Preview.vue +716 -276
  227. package/dist/tests/render/_helpers.d.ts +6 -0
  228. package/dist/tests/render/_helpers.d.ts.map +1 -0
  229. package/dist/tests/render/_helpers.js +16 -0
  230. package/dist/tests/render/_helpers.js.map +1 -0
  231. package/dist/transformers/{addAttributes.d.mts → addAttributes.d.ts} +2 -2
  232. package/dist/transformers/addAttributes.d.ts.map +1 -0
  233. package/dist/transformers/{addAttributes.mjs → addAttributes.js} +16 -13
  234. package/dist/transformers/addAttributes.js.map +1 -0
  235. package/dist/transformers/attributeToStyle.d.ts +38 -0
  236. package/dist/transformers/attributeToStyle.d.ts.map +1 -0
  237. package/dist/transformers/attributeToStyle.js +94 -0
  238. package/dist/transformers/attributeToStyle.js.map +1 -0
  239. package/dist/transformers/base.d.ts +71 -0
  240. package/dist/transformers/base.d.ts.map +1 -0
  241. package/dist/transformers/{base.mjs → base.js} +56 -30
  242. package/dist/transformers/base.js.map +1 -0
  243. package/dist/transformers/columnWidth.d.ts +31 -0
  244. package/dist/transformers/columnWidth.d.ts.map +1 -0
  245. package/dist/transformers/columnWidth.js +546 -0
  246. package/dist/transformers/columnWidth.js.map +1 -0
  247. package/dist/transformers/entities.d.ts +37 -0
  248. package/dist/transformers/entities.d.ts.map +1 -0
  249. package/dist/transformers/entities.js +73 -0
  250. package/dist/transformers/entities.js.map +1 -0
  251. package/dist/transformers/filters/defaults.d.ts +6 -0
  252. package/dist/transformers/filters/defaults.d.ts.map +1 -0
  253. package/dist/transformers/filters/defaults.js +78 -0
  254. package/dist/transformers/filters/defaults.js.map +1 -0
  255. package/dist/transformers/filters/index.d.ts +43 -0
  256. package/dist/transformers/filters/index.d.ts.map +1 -0
  257. package/dist/transformers/filters/index.js +89 -0
  258. package/dist/transformers/filters/index.js.map +1 -0
  259. package/dist/transformers/format.d.ts +22 -0
  260. package/dist/transformers/format.d.ts.map +1 -0
  261. package/dist/transformers/format.js +30 -0
  262. package/dist/transformers/format.js.map +1 -0
  263. package/dist/transformers/{index.d.mts → index.d.ts} +14 -11
  264. package/dist/transformers/index.d.ts.map +1 -0
  265. package/dist/transformers/index.js +133 -0
  266. package/dist/transformers/index.js.map +1 -0
  267. package/dist/transformers/inlineCss.d.ts +84 -0
  268. package/dist/transformers/inlineCss.d.ts.map +1 -0
  269. package/dist/transformers/inlineCss.js +91 -0
  270. package/dist/transformers/inlineCss.js.map +1 -0
  271. package/dist/transformers/inlineLink.d.ts +35 -0
  272. package/dist/transformers/inlineLink.d.ts.map +1 -0
  273. package/dist/transformers/{inlineLink.mjs → inlineLink.js} +34 -10
  274. package/dist/transformers/inlineLink.js.map +1 -0
  275. package/dist/transformers/minify.d.ts +21 -0
  276. package/dist/transformers/minify.d.ts.map +1 -0
  277. package/dist/transformers/minify.js +25 -0
  278. package/dist/transformers/minify.js.map +1 -0
  279. package/dist/transformers/msoPlaceholders.d.ts +28 -0
  280. package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
  281. package/dist/transformers/msoPlaceholders.js +88 -0
  282. package/dist/transformers/msoPlaceholders.js.map +1 -0
  283. package/dist/transformers/purgeCss.d.ts +43 -0
  284. package/dist/transformers/purgeCss.d.ts.map +1 -0
  285. package/dist/transformers/purgeCss.js +181 -0
  286. package/dist/transformers/purgeCss.js.map +1 -0
  287. package/dist/transformers/removeAttributes.d.ts +54 -0
  288. package/dist/transformers/removeAttributes.d.ts.map +1 -0
  289. package/dist/transformers/removeAttributes.js +70 -0
  290. package/dist/transformers/removeAttributes.js.map +1 -0
  291. package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
  292. package/dist/transformers/replaceStrings.d.ts.map +1 -0
  293. package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
  294. package/dist/transformers/replaceStrings.js.map +1 -0
  295. package/dist/transformers/{safeClassNames.d.mts → safeClassNames.d.ts} +2 -2
  296. package/dist/transformers/safeClassNames.d.ts.map +1 -0
  297. package/dist/transformers/{safeClassNames.mjs → safeClassNames.js} +4 -5
  298. package/dist/transformers/safeClassNames.js.map +1 -0
  299. package/dist/transformers/shorthandCss.d.ts +47 -0
  300. package/dist/transformers/shorthandCss.d.ts.map +1 -0
  301. package/dist/transformers/shorthandCss.js +61 -0
  302. package/dist/transformers/shorthandCss.js.map +1 -0
  303. package/dist/transformers/sixHex.d.ts +25 -0
  304. package/dist/transformers/sixHex.d.ts.map +1 -0
  305. package/dist/transformers/sixHex.js +42 -0
  306. package/dist/transformers/sixHex.js.map +1 -0
  307. package/dist/transformers/tailwindComponent.d.ts +16 -0
  308. package/dist/transformers/tailwindComponent.d.ts.map +1 -0
  309. package/dist/transformers/tailwindComponent.js +92 -0
  310. package/dist/transformers/tailwindComponent.js.map +1 -0
  311. package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +8 -4
  312. package/dist/transformers/tailwindcss.d.ts.map +1 -0
  313. package/dist/transformers/tailwindcss.js +97 -0
  314. package/dist/transformers/tailwindcss.js.map +1 -0
  315. package/dist/transformers/urlQuery.d.ts +36 -0
  316. package/dist/transformers/urlQuery.d.ts.map +1 -0
  317. package/dist/transformers/urlQuery.js +77 -0
  318. package/dist/transformers/urlQuery.js.map +1 -0
  319. package/dist/types/config.d.ts +727 -0
  320. package/dist/types/config.d.ts.map +1 -0
  321. package/dist/types/config.js +1 -0
  322. package/dist/types/index.d.ts +2 -0
  323. package/dist/types/index.js +1 -0
  324. package/dist/utils/ast/index.d.ts +4 -0
  325. package/dist/utils/ast/index.js +4 -0
  326. package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
  327. package/dist/utils/ast/parser.d.ts.map +1 -0
  328. package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
  329. package/dist/utils/ast/parser.js.map +1 -0
  330. package/dist/utils/ast/serializer.d.ts +8 -0
  331. package/dist/utils/ast/serializer.d.ts.map +1 -0
  332. package/dist/utils/ast/serializer.js +36 -0
  333. package/dist/utils/ast/serializer.js.map +1 -0
  334. package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
  335. package/dist/utils/ast/walker.d.ts.map +1 -0
  336. package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
  337. package/dist/utils/ast/walker.js.map +1 -0
  338. package/dist/utils/compileTailwindCss.d.ts +16 -0
  339. package/dist/utils/compileTailwindCss.d.ts.map +1 -0
  340. package/dist/utils/compileTailwindCss.js +54 -0
  341. package/dist/utils/compileTailwindCss.js.map +1 -0
  342. package/dist/utils/componentSources.d.ts +50 -0
  343. package/dist/utils/componentSources.d.ts.map +1 -0
  344. package/dist/utils/componentSources.js +50 -0
  345. package/dist/utils/componentSources.js.map +1 -0
  346. package/dist/utils/decodeStyleEntities.d.ts +15 -0
  347. package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
  348. package/dist/utils/decodeStyleEntities.js +18 -0
  349. package/dist/utils/decodeStyleEntities.js.map +1 -0
  350. package/dist/utils/detect.d.ts +5 -0
  351. package/dist/utils/detect.d.ts.map +1 -0
  352. package/dist/utils/detect.js +10 -0
  353. package/dist/utils/detect.js.map +1 -0
  354. package/dist/utils/output-markers.d.ts +29 -0
  355. package/dist/utils/output-markers.d.ts.map +1 -0
  356. package/dist/utils/output-markers.js +68 -0
  357. package/dist/utils/output-markers.js.map +1 -0
  358. package/dist/utils/{url.d.mts → url.d.ts} +1 -1
  359. package/dist/utils/url.d.ts.map +1 -0
  360. package/dist/utils/{url.mjs → url.js} +2 -3
  361. package/dist/utils/url.js.map +1 -0
  362. package/node_modules/@clack/core/CHANGELOG.md +8 -0
  363. package/node_modules/@clack/core/dist/index.d.mts +18 -4
  364. package/node_modules/@clack/core/dist/index.mjs +16 -10
  365. package/node_modules/@clack/core/dist/index.mjs.map +1 -1
  366. package/node_modules/@clack/core/package.json +5 -2
  367. package/node_modules/@clack/prompts/CHANGELOG.md +15 -0
  368. package/node_modules/@clack/prompts/README.md +107 -2
  369. package/node_modules/@clack/prompts/dist/index.d.mts +16 -11
  370. package/node_modules/@clack/prompts/dist/index.mjs +114 -107
  371. package/node_modules/@clack/prompts/dist/index.mjs.map +1 -1
  372. package/node_modules/@clack/prompts/package.json +7 -4
  373. package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
  374. package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
  375. package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
  376. package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
  377. package/node_modules/fast-string-truncated-width/package.json +1 -1
  378. package/node_modules/fast-string-truncated-width/readme.md +2 -3
  379. package/node_modules/fast-string-width/package.json +2 -2
  380. package/node_modules/fast-string-width/readme.md +0 -3
  381. package/node_modules/fast-wrap-ansi/lib/main.js +4 -1
  382. package/node_modules/fast-wrap-ansi/lib/main.js.map +1 -1
  383. package/node_modules/fast-wrap-ansi/package.json +2 -2
  384. package/node_modules/maizzle/README.md +24 -0
  385. package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
  386. package/node_modules/maizzle/dist/commands/make/config.mjs +1 -1
  387. package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
  388. package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
  389. package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
  390. package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
  391. package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
  392. package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
  393. package/node_modules/maizzle/dist/commands/new.mjs +32 -52
  394. package/node_modules/maizzle/dist/index.d.mts +1 -0
  395. package/node_modules/maizzle/dist/index.mjs +30 -7
  396. package/node_modules/maizzle/package.json +4 -3
  397. package/node_modules/nypm/dist/cli.mjs +28 -5
  398. package/node_modules/nypm/dist/index.d.mts +0 -8
  399. package/node_modules/nypm/dist/index.mjs +27 -4
  400. package/node_modules/nypm/package.json +12 -12
  401. package/node_modules/tinyexec/README.md +1 -1
  402. package/node_modules/tinyexec/dist/main.d.mts +6 -6
  403. package/node_modules/tinyexec/dist/main.mjs +126 -134
  404. package/node_modules/tinyexec/package.json +9 -9
  405. package/package.json +31 -21
  406. package/dist/build.d.mts +0 -19
  407. package/dist/build.d.mts.map +0 -1
  408. package/dist/build.mjs.map +0 -1
  409. package/dist/components/Divider.vue +0 -105
  410. package/dist/components/Vml.vue +0 -89
  411. package/dist/components/utils.d.mts +0 -5
  412. package/dist/components/utils.d.mts.map +0 -1
  413. package/dist/components/utils.mjs +0 -9
  414. package/dist/components/utils.mjs.map +0 -1
  415. package/dist/composables/defineConfig.d.mts.map +0 -1
  416. package/dist/composables/defineConfig.mjs.map +0 -1
  417. package/dist/composables/renderContext.d.mts +0 -19
  418. package/dist/composables/renderContext.d.mts.map +0 -1
  419. package/dist/composables/renderContext.mjs.map +0 -1
  420. package/dist/composables/useConfig.d.mts.map +0 -1
  421. package/dist/composables/useConfig.mjs.map +0 -1
  422. package/dist/composables/useDoctype.d.mts.map +0 -1
  423. package/dist/composables/useDoctype.mjs.map +0 -1
  424. package/dist/composables/useEvent.d.mts.map +0 -1
  425. package/dist/composables/useEvent.mjs.map +0 -1
  426. package/dist/composables/usePlaintext.d.mts.map +0 -1
  427. package/dist/composables/usePlaintext.mjs.map +0 -1
  428. package/dist/config/defaults.d.mts.map +0 -1
  429. package/dist/config/defaults.mjs.map +0 -1
  430. package/dist/config/index.d.mts.map +0 -1
  431. package/dist/config/index.mjs.map +0 -1
  432. package/dist/events/index.d.mts.map +0 -1
  433. package/dist/events/index.mjs.map +0 -1
  434. package/dist/index.d.mts +0 -29
  435. package/dist/index.mjs +0 -29
  436. package/dist/plaintext.d.mts.map +0 -1
  437. package/dist/plaintext.mjs.map +0 -1
  438. package/dist/plugin.d.mts.map +0 -1
  439. package/dist/plugin.mjs +0 -41
  440. package/dist/plugin.mjs.map +0 -1
  441. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  442. package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
  443. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  444. package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
  445. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  446. package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
  447. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  448. package/dist/plugins/postcss/tailwindCleanup.mjs +0 -35
  449. package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
  450. package/dist/render/createRenderer.d.mts.map +0 -1
  451. package/dist/render/createRenderer.mjs +0 -155
  452. package/dist/render/createRenderer.mjs.map +0 -1
  453. package/dist/render/index.d.mts +0 -26
  454. package/dist/render/index.d.mts.map +0 -1
  455. package/dist/render/index.mjs +0 -44
  456. package/dist/render/index.mjs.map +0 -1
  457. package/dist/serve.d.mts.map +0 -1
  458. package/dist/serve.mjs.map +0 -1
  459. package/dist/server/compatibility.d.mts +0 -6
  460. package/dist/server/compatibility.d.mts.map +0 -1
  461. package/dist/server/compatibility.mjs +0 -83
  462. package/dist/server/compatibility.mjs.map +0 -1
  463. package/dist/server/linter.d.mts +0 -6
  464. package/dist/server/linter.d.mts.map +0 -1
  465. package/dist/server/linter.mjs +0 -200
  466. package/dist/server/linter.mjs.map +0 -1
  467. package/dist/server/ui/components/ui/resizable/ResizableHandle.vue +0 -30
  468. package/dist/server/ui/components/ui/resizable/ResizablePanel.vue +0 -21
  469. package/dist/server/ui/components/ui/resizable/ResizablePanelGroup.vue +0 -25
  470. package/dist/server/ui/components/ui/resizable/index.ts +0 -3
  471. package/dist/transformers/addAttributes.d.mts.map +0 -1
  472. package/dist/transformers/addAttributes.mjs.map +0 -1
  473. package/dist/transformers/attributeToStyle.d.mts +0 -25
  474. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  475. package/dist/transformers/attributeToStyle.mjs +0 -80
  476. package/dist/transformers/attributeToStyle.mjs.map +0 -1
  477. package/dist/transformers/base.d.mts +0 -8
  478. package/dist/transformers/base.d.mts.map +0 -1
  479. package/dist/transformers/base.mjs.map +0 -1
  480. package/dist/transformers/entities.d.mts +0 -8
  481. package/dist/transformers/entities.d.mts.map +0 -1
  482. package/dist/transformers/entities.mjs +0 -38
  483. package/dist/transformers/entities.mjs.map +0 -1
  484. package/dist/transformers/format.d.mts +0 -15
  485. package/dist/transformers/format.d.mts.map +0 -1
  486. package/dist/transformers/format.mjs +0 -26
  487. package/dist/transformers/format.mjs.map +0 -1
  488. package/dist/transformers/index.d.mts.map +0 -1
  489. package/dist/transformers/index.mjs +0 -73
  490. package/dist/transformers/index.mjs.map +0 -1
  491. package/dist/transformers/inlineCSS.d.mts +0 -30
  492. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  493. package/dist/transformers/inlineCSS.mjs +0 -79
  494. package/dist/transformers/inlineCSS.mjs.map +0 -1
  495. package/dist/transformers/inlineLink.d.mts +0 -14
  496. package/dist/transformers/inlineLink.d.mts.map +0 -1
  497. package/dist/transformers/inlineLink.mjs.map +0 -1
  498. package/dist/transformers/minify.d.mts +0 -17
  499. package/dist/transformers/minify.d.mts.map +0 -1
  500. package/dist/transformers/minify.mjs +0 -24
  501. package/dist/transformers/minify.mjs.map +0 -1
  502. package/dist/transformers/purgeCSS.d.mts +0 -23
  503. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  504. package/dist/transformers/purgeCSS.mjs +0 -66
  505. package/dist/transformers/purgeCSS.mjs.map +0 -1
  506. package/dist/transformers/removeAttributes.d.mts +0 -31
  507. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  508. package/dist/transformers/removeAttributes.mjs +0 -63
  509. package/dist/transformers/removeAttributes.mjs.map +0 -1
  510. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  511. package/dist/transformers/replaceStrings.mjs.map +0 -1
  512. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  513. package/dist/transformers/safeClassNames.mjs.map +0 -1
  514. package/dist/transformers/shorthandCSS.d.mts +0 -24
  515. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  516. package/dist/transformers/shorthandCSS.mjs +0 -48
  517. package/dist/transformers/shorthandCSS.mjs.map +0 -1
  518. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  519. package/dist/transformers/tailwindcss.mjs +0 -136
  520. package/dist/transformers/tailwindcss.mjs.map +0 -1
  521. package/dist/transformers/urlQuery.d.mts +0 -24
  522. package/dist/transformers/urlQuery.d.mts.map +0 -1
  523. package/dist/transformers/urlQuery.mjs +0 -65
  524. package/dist/transformers/urlQuery.mjs.map +0 -1
  525. package/dist/types/config.d.mts +0 -149
  526. package/dist/types/config.d.mts.map +0 -1
  527. package/dist/types/config.mjs +0 -1
  528. package/dist/types/index.d.mts +0 -2
  529. package/dist/types/index.mjs +0 -1
  530. package/dist/utils/ast/index.d.mts +0 -4
  531. package/dist/utils/ast/index.mjs +0 -5
  532. package/dist/utils/ast/parser.d.mts.map +0 -1
  533. package/dist/utils/ast/parser.mjs.map +0 -1
  534. package/dist/utils/ast/serializer.d.mts +0 -7
  535. package/dist/utils/ast/serializer.d.mts.map +0 -1
  536. package/dist/utils/ast/serializer.mjs +0 -13
  537. package/dist/utils/ast/serializer.mjs.map +0 -1
  538. package/dist/utils/ast/walker.d.mts.map +0 -1
  539. package/dist/utils/ast/walker.mjs.map +0 -1
  540. package/dist/utils/url.d.mts.map +0 -1
  541. package/dist/utils/url.mjs.map +0 -1
  542. package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
@@ -1 +0,0 @@
1
- {"version":3,"file":"inlineCSS.mjs","names":[],"sources":["../../src/transformers/inlineCSS.ts"],"sourcesContent":["import juice from 'juice'\nimport { walk, parse, serialize } from '../utils/ast/index.ts'\nimport type { ChildNode, Element } from 'domhandler'\nimport type { Options as JuiceOptions } from 'juice'\nimport type { CssConfig } from '../types/config.ts'\n\ninterface InlineCssOptions {\n removeStyleTags?: boolean\n removeInlinedSelectors?: boolean\n preferUnitlessValues?: boolean\n safelist?: string[]\n styleToAttribute?: Record<string, string>\n applyWidthAttributes?: boolean\n applyHeightAttributes?: boolean\n widthElements?: string[]\n heightElements?: string[]\n excludedProperties?: string[]\n codeBlocks?: Record<string, { start: string; end: string }>\n customCSS?: string\n}\n\n/**\n * Inline CSS transformer.\n *\n * Inlines CSS from `<style>` tags into inline style attributes on HTML elements.\n * This is important for email client compatibility (especially Outlook on Windows).\n *\n * Enabled when `css.inline` is set to `true` or an object with options.\n *\n * Options:\n * - removeStyleTags: Remove style tags after inlining (default: false)\n * - removeInlinedSelectors: Remove classes after they've been inlined (default: true)\n * - preferUnitlessValues: Convert 0px, 0em, etc. to 0 (default: true)\n * - safelist: Selectors that should not be removed after inlining\n * - styleToAttribute: Map CSS properties to HTML attributes (e.g., background-color -> bgcolor)\n * - applyWidthAttributes: Add width attributes based on inline CSS (default: true)\n * - applyHeightAttributes: Add height attributes based on inline CSS (default: true)\n * - widthElements: Elements that can receive width attributes (default: ['img', 'video'])\n * - heightElements: Elements that can receive height attributes (default: ['img', 'video'])\n * - excludedProperties: CSS properties to exclude from inlining\n * - codeBlocks: Fenced code blocks to ignore (default: { EJS: { start: '<%', end: '%>' }, HBS: { start: '{{', end: '}}' } })\n * - customCSS: Additional CSS to inline\n */\nexport function inlineCSS(dom: ChildNode[], config: CssConfig = {}): ChildNode[] {\n const inline = config.inline\n\n // Disabled when inline is falsy or not an object/truthy\n if (!inline) {\n return dom\n }\n\n // Build options from config\n const options: InlineCssOptions = typeof inline === 'object' ? inline : {}\n\n const removeStyleTags = options.removeStyleTags ?? false\n const customCSS = options.customCSS ?? ''\n\n // Configure Juice static properties\n juice.styleToAttribute = options.styleToAttribute ?? {}\n juice.excludedProperties = ['--tw-shadow', ...(options.excludedProperties ?? [])]\n juice.widthElements = (options.widthElements ?? ['img', 'video']).map(i => i.toUpperCase()) as unknown as HTMLElement[]\n juice.heightElements = (options.heightElements ?? ['img', 'video']).map(i => i.toUpperCase()) as unknown as HTMLElement[]\n\n // Add custom code blocks\n if (options.codeBlocks && typeof options.codeBlocks === 'object') {\n Object.entries(options.codeBlocks).forEach(([key, value]) => {\n if (value.start && value.end) {\n juice.codeBlocks[key] = value\n }\n })\n }\n\n // Handle style tags with embed attributes\n walk(dom, (node) => {\n const el = node as Element\n if (el.name === 'style' && el.attribs) {\n // Add data-embed to style tags with embed attribute\n if (el.attribs.embed && !('data-embed' in el.attribs)) {\n el.attribs['data-embed'] = ''\n }\n // Add embed to style tags with data-embed attribute\n if (el.attribs['data-embed'] && !('embed' in el.attribs)) {\n el.attribs.embed = ''\n }\n }\n })\n\n // Serialize for juice (juice requires a string)\n const serialized = serialize(dom)\n\n let inlinedHtml: string\n\n try {\n const juiceOptions: JuiceOptions = {\n removeStyleTags,\n removeInlinedSelectors: options.removeInlinedSelectors ?? true,\n preservedSelectors: options.safelist ?? [],\n applyWidthAttributes: options.applyWidthAttributes ?? true,\n applyHeightAttributes: options.applyHeightAttributes ?? true,\n }\n\n if (customCSS) {\n inlinedHtml = juice(serialized, { ...juiceOptions, extraCss: customCSS })\n } else {\n inlinedHtml = juice(serialized, juiceOptions)\n }\n } catch {\n // If Juice fails, return the dom unchanged\n return dom\n }\n\n // Post-process for preferUnitlessValues\n const preferUnitlessValues = options.preferUnitlessValues ?? true\n const result = parse(inlinedHtml)\n\n if (preferUnitlessValues) {\n walk(result, (node) => {\n const el = node as Element\n if (el.attribs?.style) {\n el.attribs.style = el.attribs.style.replace(\n /\\b0(px|rem|em|%|vh|vw|vmin|vmax|in|cm|mm|pt|pc|ex|ch)\\b/g,\n '0'\n )\n }\n })\n }\n\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,UAAU,KAAkB,SAAoB,EAAE,EAAe;CAC/E,MAAM,SAAS,OAAO;AAGtB,KAAI,CAAC,OACH,QAAO;CAIT,MAAM,UAA4B,OAAO,WAAW,WAAW,SAAS,EAAE;CAE1E,MAAM,kBAAkB,QAAQ,mBAAmB;CACnD,MAAM,YAAY,QAAQ,aAAa;AAGvC,OAAM,mBAAmB,QAAQ,oBAAoB,EAAE;AACvD,OAAM,qBAAqB,CAAC,eAAe,GAAI,QAAQ,sBAAsB,EAAE,CAAE;AACjF,OAAM,iBAAiB,QAAQ,iBAAiB,CAAC,OAAO,QAAQ,EAAE,KAAI,MAAK,EAAE,aAAa,CAAC;AAC3F,OAAM,kBAAkB,QAAQ,kBAAkB,CAAC,OAAO,QAAQ,EAAE,KAAI,MAAK,EAAE,aAAa,CAAC;AAG7F,KAAI,QAAQ,cAAc,OAAO,QAAQ,eAAe,SACtD,QAAO,QAAQ,QAAQ,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW;AAC3D,MAAI,MAAM,SAAS,MAAM,IACvB,OAAM,WAAW,OAAO;GAE1B;AAIJ,MAAK,MAAM,SAAS;EAClB,MAAM,KAAK;AACX,MAAI,GAAG,SAAS,WAAW,GAAG,SAAS;AAErC,OAAI,GAAG,QAAQ,SAAS,EAAE,gBAAgB,GAAG,SAC3C,IAAG,QAAQ,gBAAgB;AAG7B,OAAI,GAAG,QAAQ,iBAAiB,EAAE,WAAW,GAAG,SAC9C,IAAG,QAAQ,QAAQ;;GAGvB;CAGF,MAAM,aAAa,UAAU,IAAI;CAEjC,IAAI;AAEJ,KAAI;EACF,MAAM,eAA6B;GACjC;GACA,wBAAwB,QAAQ,0BAA0B;GAC1D,oBAAoB,QAAQ,YAAY,EAAE;GAC1C,sBAAsB,QAAQ,wBAAwB;GACtD,uBAAuB,QAAQ,yBAAyB;GACzD;AAED,MAAI,UACF,eAAc,MAAM,YAAY;GAAE,GAAG;GAAc,UAAU;GAAW,CAAC;MAEzE,eAAc,MAAM,YAAY,aAAa;SAEzC;AAEN,SAAO;;CAIT,MAAM,uBAAuB,QAAQ,wBAAwB;CAC7D,MAAM,SAAS,MAAM,YAAY;AAEjC,KAAI,qBACF,MAAK,SAAS,SAAS;EACrB,MAAM,KAAK;AACX,MAAI,GAAG,SAAS,MACd,IAAG,QAAQ,QAAQ,GAAG,QAAQ,MAAM,QAClC,4DACA,IACD;GAEH;AAGJ,QAAO"}
@@ -1,14 +0,0 @@
1
- import { ChildNode } from "domhandler";
2
-
3
- //#region src/transformers/inlineLink.d.ts
4
- /**
5
- * Inline `<link rel="stylesheet">` tags as `<style>` tags.
6
- *
7
- * - Local file paths are always inlined (resolved relative to the template)
8
- * - Remote URLs (http/https) are only inlined if the `inline` attribute is present
9
- * - Runs before the tailwindcss transformer so CSS is compiled normally
10
- */
11
- declare function inlineLink(dom: ChildNode[], filePath?: string): Promise<ChildNode[]>;
12
- //#endregion
13
- export { inlineLink };
14
- //# sourceMappingURL=inlineLink.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inlineLink.d.mts","names":[],"sources":["../../src/transformers/inlineLink.ts"],"mappings":";;;;;AAYA;;;;;iBAAsB,UAAA,CAAW,GAAA,EAAK,SAAA,IAAa,QAAA,YAAoB,OAAA,CAAQ,SAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inlineLink.mjs","names":[],"sources":["../../src/transformers/inlineLink.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\n\n/**\n * Inline `<link rel=\"stylesheet\">` tags as `<style>` tags.\n *\n * - Local file paths are always inlined (resolved relative to the template)\n * - Remote URLs (http/https) are only inlined if the `inline` attribute is present\n * - Runs before the tailwindcss transformer so CSS is compiled normally\n */\nexport async function inlineLink(dom: ChildNode[], filePath?: string): Promise<ChildNode[]> {\n const links: { node: Element; parent: ChildNode; index: number }[] = []\n\n walk(dom, (node) => {\n if ((node as Element).name !== 'link') return\n\n const el = node as Element\n const attrs = el.attribs || {}\n\n if (attrs.rel !== 'stylesheet' || !attrs.href) return\n\n const parent = el.parent as ChildNode\n\n if (parent && 'children' in parent) {\n const index = (parent.children as ChildNode[]).indexOf(el)\n if (index !== -1) {\n links.push({ node: el, parent, index })\n }\n } else {\n // Top-level node\n const index = dom.indexOf(el)\n if (index !== -1) {\n links.push({ node: el, parent: null as any, index })\n }\n }\n })\n\n for (const { node, parent, index } of links) {\n const href = node.attribs.href\n const isRemote = href.startsWith('http://') || href.startsWith('https://')\n\n let css: string | undefined\n\n if (isRemote) {\n if (!('inline' in node.attribs)) continue\n\n try {\n const response = await fetch(href)\n css = await response.text()\n } catch {\n continue\n }\n } else {\n if (!filePath) continue\n\n try {\n const absolutePath = resolve(dirname(filePath), href)\n css = readFileSync(absolutePath, 'utf8')\n } catch {\n continue\n }\n }\n\n const styleNode = {\n type: 'tag',\n name: 'style',\n attribs: {},\n children: [{\n type: 'text',\n data: css,\n parent: null as any,\n }],\n parent: parent || null,\n } as any\n\n // Set parent reference on the text child\n styleNode.children[0].parent = styleNode\n\n const siblings = parent && 'children' in parent\n ? parent.children as ChildNode[]\n : dom\n\n siblings.splice(index, 1, styleNode)\n }\n\n return dom\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,eAAsB,WAAW,KAAkB,UAAyC;CAC1F,MAAM,QAA+D,EAAE;AAEvE,MAAK,MAAM,SAAS;AAClB,MAAK,KAAiB,SAAS,OAAQ;EAEvC,MAAM,KAAK;EACX,MAAM,QAAQ,GAAG,WAAW,EAAE;AAE9B,MAAI,MAAM,QAAQ,gBAAgB,CAAC,MAAM,KAAM;EAE/C,MAAM,SAAS,GAAG;AAElB,MAAI,UAAU,cAAc,QAAQ;GAClC,MAAM,QAAS,OAAO,SAAyB,QAAQ,GAAG;AAC1D,OAAI,UAAU,GACZ,OAAM,KAAK;IAAE,MAAM;IAAI;IAAQ;IAAO,CAAC;SAEpC;GAEL,MAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,OAAI,UAAU,GACZ,OAAM,KAAK;IAAE,MAAM;IAAI,QAAQ;IAAa;IAAO,CAAC;;GAGxD;AAEF,MAAK,MAAM,EAAE,MAAM,QAAQ,WAAW,OAAO;EAC3C,MAAM,OAAO,KAAK,QAAQ;EAC1B,MAAM,WAAW,KAAK,WAAW,UAAU,IAAI,KAAK,WAAW,WAAW;EAE1E,IAAI;AAEJ,MAAI,UAAU;AACZ,OAAI,EAAE,YAAY,KAAK,SAAU;AAEjC,OAAI;AAEF,UAAM,OADW,MAAM,MAAM,KAAK,EACb,MAAM;WACrB;AACN;;SAEG;AACL,OAAI,CAAC,SAAU;AAEf,OAAI;AAEF,UAAM,aADe,QAAQ,QAAQ,SAAS,EAAE,KAAK,EACpB,OAAO;WAClC;AACN;;;EAIJ,MAAM,YAAY;GAChB,MAAM;GACN,MAAM;GACN,SAAS,EAAE;GACX,UAAU,CAAC;IACT,MAAM;IACN,MAAM;IACN,QAAQ;IACT,CAAC;GACF,QAAQ,UAAU;GACnB;AAGD,YAAU,SAAS,GAAG,SAAS;AAM/B,GAJiB,UAAU,cAAc,SACrC,OAAO,WACP,KAEK,OAAO,OAAO,GAAG,UAAU;;AAGtC,QAAO"}
@@ -1,17 +0,0 @@
1
- import { MaizzleConfig } from "../types/config.mjs";
2
-
3
- //#region src/transformers/minify.d.ts
4
- /**
5
- * Minify transformer.
6
- *
7
- * Minifies HTML using the `html-crush` package.
8
- * Enabled by setting `minify: true` (or passing options object).
9
- * User options are merged on top of the defaults.
10
- *
11
- * The only Maizzle default that differs from html-crush's own defaults
12
- * is `removeLineBreaks: true`.
13
- */
14
- declare function minify(html: string, config?: MaizzleConfig): string;
15
- //#endregion
16
- export { minify };
17
- //# sourceMappingURL=minify.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minify.d.mts","names":[],"sources":["../../src/transformers/minify.ts"],"mappings":";;;;;AAmBA;;;;;;;;iBAAgB,MAAA,CAAO,IAAA,UAAc,MAAA,GAAQ,aAAA"}
@@ -1,24 +0,0 @@
1
- import { defu } from "defu";
2
- import { crush } from "html-crush";
3
-
4
- //#region src/transformers/minify.ts
5
- const DEFAULT_OPTIONS = { removeLineBreaks: true };
6
- /**
7
- * Minify transformer.
8
- *
9
- * Minifies HTML using the `html-crush` package.
10
- * Enabled by setting `minify: true` (or passing options object).
11
- * User options are merged on top of the defaults.
12
- *
13
- * The only Maizzle default that differs from html-crush's own defaults
14
- * is `removeLineBreaks: true`.
15
- */
16
- function minify(html, config = {}) {
17
- const option = config.html?.minify;
18
- if (!option) return html;
19
- return crush(html, defu(typeof option === "object" ? option : {}, DEFAULT_OPTIONS)).result;
20
- }
21
-
22
- //#endregion
23
- export { minify };
24
- //# sourceMappingURL=minify.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minify.mjs","names":["merge"],"sources":["../../src/transformers/minify.ts"],"sourcesContent":["import { crush } from 'html-crush'\nimport { defu as merge } from 'defu'\nimport type { Opts } from 'html-crush'\nimport type { MaizzleConfig } from '../types/config.ts'\n\nconst DEFAULT_OPTIONS = {\n removeLineBreaks: true,\n}\n\n/**\n * Minify transformer.\n *\n * Minifies HTML using the `html-crush` package.\n * Enabled by setting `minify: true` (or passing options object).\n * User options are merged on top of the defaults.\n *\n * The only Maizzle default that differs from html-crush's own defaults\n * is `removeLineBreaks: true`.\n */\nexport function minify(html: string, config: MaizzleConfig = {}): string {\n const option = config.html?.minify\n\n if (!option) return html\n\n const userOptions = typeof option === 'object' ? option : {}\n const options = merge(userOptions, DEFAULT_OPTIONS) as Partial<Opts>\n\n return crush(html, options).result\n}\n"],"mappings":";;;;AAKA,MAAM,kBAAkB,EACtB,kBAAkB,MACnB;;;;;;;;;;;AAYD,SAAgB,OAAO,MAAc,SAAwB,EAAE,EAAU;CACvE,MAAM,SAAS,OAAO,MAAM;AAE5B,KAAI,CAAC,OAAQ,QAAO;AAKpB,QAAO,MAAM,MAFGA,KADI,OAAO,WAAW,WAAW,SAAS,EAAE,EACzB,gBAAgB,CAExB,CAAC"}
@@ -1,23 +0,0 @@
1
- import { CssConfig } from "../types/config.mjs";
2
- import { ChildNode } from "domhandler";
3
-
4
- //#region src/transformers/purgeCSS.d.ts
5
- /**
6
- * Remove unused CSS transformer.
7
- *
8
- * Uses `email-comb` to strip CSS selectors and corresponding class/id
9
- * references that are not matched anywhere in the HTML body.
10
- *
11
- * Enable by setting `css.purge: true` (or passing options).
12
- * The user-supplied options are merged on top of the defaults, so
13
- * `safelist` values are **appended** to the built-in safelist rather
14
- * than replacing it.
15
- *
16
- * Accepts `ChildNode[]` as input, serializes internally before passing
17
- * to email-comb (which requires a raw HTML string), then parses the
18
- * result back to `ChildNode[]` so it fits in the DOM pipeline.
19
- */
20
- declare function purgeCSS(dom: ChildNode[], config?: CssConfig): ChildNode[];
21
- //#endregion
22
- export { purgeCSS };
23
- //# sourceMappingURL=purgeCSS.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"purgeCSS.d.mts","names":[],"sources":["../../src/transformers/purgeCSS.ts"],"mappings":";;;;;;AA+CA;;;;;;;;;;;;;iBAAgB,QAAA,CAAS,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,SAAA,GAAiB,SAAA"}
@@ -1,66 +0,0 @@
1
- import { parse } from "../utils/ast/parser.mjs";
2
- import { serialize } from "../utils/ast/serializer.mjs";
3
- import "../utils/ast/index.mjs";
4
- import { defu } from "defu";
5
- import { comb } from "email-comb";
6
-
7
- //#region src/transformers/purgeCSS.ts
8
- const DEFAULT_SAFELIST = [
9
- "*body*",
10
- ".gmail*",
11
- ".apple*",
12
- ".ios*",
13
- ".ox-*",
14
- ".outlook*",
15
- "[data-ogs*",
16
- ".bloop_container",
17
- ".Singleton",
18
- ".unused",
19
- ".moz-text-html",
20
- ".mail-detail-content",
21
- "*edo*",
22
- "#*",
23
- ".lang*"
24
- ];
25
- const DEFAULT_OPTIONS = {
26
- backend: [{
27
- heads: "{{",
28
- tails: "}}"
29
- }, {
30
- heads: "{%",
31
- tails: "%}"
32
- }],
33
- whitelist: [...DEFAULT_SAFELIST]
34
- };
35
- /**
36
- * Remove unused CSS transformer.
37
- *
38
- * Uses `email-comb` to strip CSS selectors and corresponding class/id
39
- * references that are not matched anywhere in the HTML body.
40
- *
41
- * Enable by setting `css.purge: true` (or passing options).
42
- * The user-supplied options are merged on top of the defaults, so
43
- * `safelist` values are **appended** to the built-in safelist rather
44
- * than replacing it.
45
- *
46
- * Accepts `ChildNode[]` as input, serializes internally before passing
47
- * to email-comb (which requires a raw HTML string), then parses the
48
- * result back to `ChildNode[]` so it fits in the DOM pipeline.
49
- */
50
- function purgeCSS(dom, config = {}) {
51
- const option = config.purge;
52
- if (!option) return dom;
53
- const userOptions = typeof option === "object" ? option : {};
54
- const userSafelist = Array.isArray(userOptions.safelist) ? userOptions.safelist : [];
55
- const { safelist: _discard, ...restUserOptions } = userOptions;
56
- const options = defu({
57
- ...restUserOptions,
58
- whitelist: [...DEFAULT_SAFELIST, ...userSafelist]
59
- }, DEFAULT_OPTIONS);
60
- const { result } = comb(serialize(dom), options);
61
- return parse(result);
62
- }
63
-
64
- //#endregion
65
- export { purgeCSS };
66
- //# sourceMappingURL=purgeCSS.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"purgeCSS.mjs","names":["merge"],"sources":["../../src/transformers/purgeCSS.ts"],"sourcesContent":["import { comb } from 'email-comb'\nimport { defu as merge } from 'defu'\nimport type { ChildNode } from 'domhandler'\nimport { parse, serialize } from '../utils/ast/index.ts'\nimport type { CssConfig } from '../types/config.ts'\n\nconst DEFAULT_SAFELIST: string[] = [\n '*body*', // Gmail\n '.gmail*', // Gmail\n '.apple*', // Apple Mail\n '.ios*', // Mail on iOS\n '.ox-*', // Open-Xchange\n '.outlook*', // Outlook.com\n '[data-ogs*', // Outlook.com\n '.bloop_container', // Airmail\n '.Singleton', // Apple Mail 10\n '.unused', // Notes 8\n '.moz-text-html', // Thunderbird\n '.mail-detail-content', // Comcast, Libero webmail\n '*edo*', // Edison (all)\n '#*', // Freenet uses #msgBody\n '.lang*', // Fenced code blocks\n]\n\nconst DEFAULT_OPTIONS = {\n backend: [\n { heads: '{{', tails: '}}' },\n { heads: '{%', tails: '%}' },\n ],\n whitelist: [...DEFAULT_SAFELIST],\n}\n\n/**\n * Remove unused CSS transformer.\n *\n * Uses `email-comb` to strip CSS selectors and corresponding class/id\n * references that are not matched anywhere in the HTML body.\n *\n * Enable by setting `css.purge: true` (or passing options).\n * The user-supplied options are merged on top of the defaults, so\n * `safelist` values are **appended** to the built-in safelist rather\n * than replacing it.\n *\n * Accepts `ChildNode[]` as input, serializes internally before passing\n * to email-comb (which requires a raw HTML string), then parses the\n * result back to `ChildNode[]` so it fits in the DOM pipeline.\n */\nexport function purgeCSS(dom: ChildNode[], config: CssConfig = {}): ChildNode[] {\n const option = config.purge\n\n if (!option) return dom\n\n const userOptions = typeof option === 'object' ? option : {}\n\n // Merge user options on top of defaults.\n // defu merges objects deeply; for arrays it appends user values.\n // We want the user safelist appended to the default safelist,\n // so we build whitelist manually.\n const userSafelist = Array.isArray((userOptions as any).safelist)\n ? (userOptions as any).safelist as string[]\n : []\n\n const { safelist: _discard, ...restUserOptions } = userOptions as any\n\n const options = merge(\n { ...restUserOptions, whitelist: [...DEFAULT_SAFELIST, ...userSafelist] },\n DEFAULT_OPTIONS,\n )\n\n const { result } = comb(serialize(dom), options)\n\n return parse(result)\n}\n"],"mappings":";;;;;;;AAMA,MAAM,mBAA6B;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,kBAAkB;CACtB,SAAS,CACP;EAAE,OAAO;EAAM,OAAO;EAAM,EAC5B;EAAE,OAAO;EAAM,OAAO;EAAM,CAC7B;CACD,WAAW,CAAC,GAAG,iBAAiB;CACjC;;;;;;;;;;;;;;;;AAiBD,SAAgB,SAAS,KAAkB,SAAoB,EAAE,EAAe;CAC9E,MAAM,SAAS,OAAO;AAEtB,KAAI,CAAC,OAAQ,QAAO;CAEpB,MAAM,cAAc,OAAO,WAAW,WAAW,SAAS,EAAE;CAM5D,MAAM,eAAe,MAAM,QAAS,YAAoB,SAAS,GAC5D,YAAoB,WACrB,EAAE;CAEN,MAAM,EAAE,UAAU,UAAU,GAAG,oBAAoB;CAEnD,MAAM,UAAUA,KACd;EAAE,GAAG;EAAiB,WAAW,CAAC,GAAG,kBAAkB,GAAG,aAAa;EAAE,EACzE,gBACD;CAED,MAAM,EAAE,WAAW,KAAK,UAAU,IAAI,EAAE,QAAQ;AAEhD,QAAO,MAAM,OAAO"}
@@ -1,31 +0,0 @@
1
- import { AttributesConfig } from "../types/config.mjs";
2
- import { ChildNode } from "domhandler";
3
-
4
- //#region src/transformers/removeAttributes.d.ts
5
- /**
6
- * Remove attributes transformer.
7
- *
8
- * Removes specified HTML attributes from elements.
9
- *
10
- * By default, removes empty `style` and `class` attributes.
11
- *
12
- * Supports:
13
- * - String: removes attribute when empty (boolean or empty string)
14
- * - Object with name and value: removes when attribute matches exactly
15
- * - Object with name and RegExp value: removes when attribute value matches regex
16
- *
17
- * Configured via `remove` array:
18
- * ```js
19
- * {
20
- * remove: [
21
- * 'data-src', // Remove empty data-src attributes
22
- * { name: 'id', value: 'test' }, // Remove id="test" exactly
23
- * { name: 'data-id', value: /\d/ } // Remove data-id when value contains digits
24
- * ]
25
- * }
26
- * ```
27
- */
28
- declare function removeAttributes(dom: ChildNode[], config?: AttributesConfig): ChildNode[];
29
- //#endregion
30
- export { removeAttributes };
31
- //# sourceMappingURL=removeAttributes.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"removeAttributes.d.mts","names":[],"sources":["../../src/transformers/removeAttributes.ts"],"mappings":";;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;iBAAgB,gBAAA,CAAiB,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,gBAAA,GAAwB,SAAA"}
@@ -1,63 +0,0 @@
1
- import { walk } from "../utils/ast/walker.mjs";
2
- import "../utils/ast/index.mjs";
3
-
4
- //#region src/transformers/removeAttributes.ts
5
- /**
6
- * Remove attributes transformer.
7
- *
8
- * Removes specified HTML attributes from elements.
9
- *
10
- * By default, removes empty `style` and `class` attributes.
11
- *
12
- * Supports:
13
- * - String: removes attribute when empty (boolean or empty string)
14
- * - Object with name and value: removes when attribute matches exactly
15
- * - Object with name and RegExp value: removes when attribute value matches regex
16
- *
17
- * Configured via `remove` array:
18
- * ```js
19
- * {
20
- * remove: [
21
- * 'data-src', // Remove empty data-src attributes
22
- * { name: 'id', value: 'test' }, // Remove id="test" exactly
23
- * { name: 'data-id', value: /\d/ } // Remove data-id when value contains digits
24
- * ]
25
- * }
26
- * ```
27
- */
28
- function removeAttributes(dom, config = {}) {
29
- const removeOptions = config.remove;
30
- const alwaysRemove = ["style", "class"];
31
- let userOptions = [];
32
- if (Array.isArray(removeOptions)) userOptions = removeOptions;
33
- const attributesToRemove = [...alwaysRemove, ...userOptions];
34
- if (attributesToRemove.length === 0) return dom;
35
- walk(dom, (node) => {
36
- const el = node;
37
- if (!el.attribs) return;
38
- for (const attr of attributesToRemove) {
39
- let attrName;
40
- let attrValue;
41
- if (typeof attr === "string") {
42
- attrName = attr;
43
- attrValue = true;
44
- } else {
45
- attrName = attr.name;
46
- attrValue = attr.value;
47
- }
48
- const currentValue = el.attribs[attrName];
49
- if (currentValue === void 0) continue;
50
- let shouldRemove = false;
51
- if (typeof attrValue === "boolean") shouldRemove = currentValue === "" || currentValue === true;
52
- else if (typeof attrValue === "string") shouldRemove = currentValue === attrValue;
53
- else if (attrValue instanceof RegExp) shouldRemove = attrValue.test(currentValue);
54
- else shouldRemove = currentValue === "";
55
- if (shouldRemove) delete el.attribs[attrName];
56
- }
57
- });
58
- return dom;
59
- }
60
-
61
- //#endregion
62
- export { removeAttributes };
63
- //# sourceMappingURL=removeAttributes.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"removeAttributes.mjs","names":[],"sources":["../../src/transformers/removeAttributes.ts"],"sourcesContent":["import type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\nimport type { AttributesConfig } from '../types/config.ts'\n\ninterface RemoveAttributeConfig {\n name: string\n value?: string | RegExp | boolean\n}\n\ntype RemoveAttributeOption = string | RemoveAttributeConfig\n\n/**\n * Remove attributes transformer.\n *\n * Removes specified HTML attributes from elements.\n *\n * By default, removes empty `style` and `class` attributes.\n *\n * Supports:\n * - String: removes attribute when empty (boolean or empty string)\n * - Object with name and value: removes when attribute matches exactly\n * - Object with name and RegExp value: removes when attribute value matches regex\n *\n * Configured via `remove` array:\n * ```js\n * {\n * remove: [\n * 'data-src', // Remove empty data-src attributes\n * { name: 'id', value: 'test' }, // Remove id=\"test\" exactly\n * { name: 'data-id', value: /\\d/ } // Remove data-id when value contains digits\n * ]\n * }\n * ```\n */\nexport function removeAttributes(dom: ChildNode[], config: AttributesConfig = {}): ChildNode[] {\n const removeOptions = config.remove\n\n // Always remove empty style and class attributes by default\n const alwaysRemove: RemoveAttributeOption[] = ['style', 'class']\n\n // Parse user options\n let userOptions: RemoveAttributeOption[] = []\n if (Array.isArray(removeOptions)) {\n userOptions = removeOptions as RemoveAttributeOption[]\n }\n\n // Combine default and user options\n const attributesToRemove: RemoveAttributeOption[] = [...alwaysRemove, ...userOptions]\n\n if (attributesToRemove.length === 0) {\n return dom\n }\n\n walk(dom, (node) => {\n const el = node as Element\n if (!el.attribs) return\n\n for (const attr of attributesToRemove) {\n let attrName: string\n let attrValue: string | RegExp | boolean | undefined\n\n if (typeof attr === 'string') {\n attrName = attr\n attrValue = true // Remove when value is empty (boolean true or empty string)\n } else {\n attrName = attr.name\n attrValue = attr.value\n }\n\n const currentValue = el.attribs[attrName]\n\n // Skip if attribute doesn't exist\n if (currentValue === undefined) continue\n\n let shouldRemove = false\n\n if (typeof attrValue === 'boolean') {\n // Remove if value is empty (boolean true is treated as no-value attribute)\n shouldRemove = currentValue === '' || (currentValue as unknown) === true\n } else if (typeof attrValue === 'string') {\n // Remove if value matches exactly\n shouldRemove = currentValue === attrValue\n } else if (attrValue instanceof RegExp) {\n // Remove if value matches regex\n shouldRemove = attrValue.test(currentValue)\n } else {\n // Default: remove if empty\n shouldRemove = currentValue === ''\n }\n\n if (shouldRemove) {\n delete el.attribs[attrName]\n }\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,SAAgB,iBAAiB,KAAkB,SAA2B,EAAE,EAAe;CAC7F,MAAM,gBAAgB,OAAO;CAG7B,MAAM,eAAwC,CAAC,SAAS,QAAQ;CAGhE,IAAI,cAAuC,EAAE;AAC7C,KAAI,MAAM,QAAQ,cAAc,CAC9B,eAAc;CAIhB,MAAM,qBAA8C,CAAC,GAAG,cAAc,GAAG,YAAY;AAErF,KAAI,mBAAmB,WAAW,EAChC,QAAO;AAGT,MAAK,MAAM,SAAS;EAClB,MAAM,KAAK;AACX,MAAI,CAAC,GAAG,QAAS;AAEjB,OAAK,MAAM,QAAQ,oBAAoB;GACrC,IAAI;GACJ,IAAI;AAEJ,OAAI,OAAO,SAAS,UAAU;AAC5B,eAAW;AACX,gBAAY;UACP;AACL,eAAW,KAAK;AAChB,gBAAY,KAAK;;GAGnB,MAAM,eAAe,GAAG,QAAQ;AAGhC,OAAI,iBAAiB,OAAW;GAEhC,IAAI,eAAe;AAEnB,OAAI,OAAO,cAAc,UAEvB,gBAAe,iBAAiB,MAAO,iBAA6B;YAC3D,OAAO,cAAc,SAE9B,gBAAe,iBAAiB;YACvB,qBAAqB,OAE9B,gBAAe,UAAU,KAAK,aAAa;OAG3C,gBAAe,iBAAiB;AAGlC,OAAI,aACF,QAAO,GAAG,QAAQ;;GAGtB;AAEF,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"replaceStrings.d.mts","names":[],"sources":["../../src/transformers/replaceStrings.ts"],"mappings":";;;;;AAWA;;;;;;;iBAAgB,cAAA,CAAe,IAAA,UAAc,MAAA,GAAQ,aAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"replaceStrings.mjs","names":[],"sources":["../../src/transformers/replaceStrings.ts"],"sourcesContent":["import type { MaizzleConfig } from '../types/config.ts'\n\n/**\n * Replace strings transformer.\n *\n * Replaces strings in the HTML using the key-value pairs defined in\n * `config.replaceStrings`. Each key is treated as a regular expression\n * pattern (case-insensitive, global), and the value is the replacement.\n *\n * Character classes must be escaped in keys, e.g. `\\\\s` for `\\s`.\n */\nexport function replaceStrings(html: string, config: MaizzleConfig = {}): string {\n const replacements = config.replaceStrings\n\n if (!replacements || Object.keys(replacements).length === 0) return html\n\n return Object.entries(replacements).reduce(\n (result, [pattern, replacement]) => result.replace(new RegExp(pattern, 'gi'), replacement),\n html,\n )\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,eAAe,MAAc,SAAwB,EAAE,EAAU;CAC/E,MAAM,eAAe,OAAO;AAE5B,KAAI,CAAC,gBAAgB,OAAO,KAAK,aAAa,CAAC,WAAW,EAAG,QAAO;AAEpE,QAAO,OAAO,QAAQ,aAAa,CAAC,QACjC,QAAQ,CAAC,SAAS,iBAAiB,OAAO,QAAQ,IAAI,OAAO,SAAS,KAAK,EAAE,YAAY,EAC1F,KACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"safeClassNames.d.mts","names":[],"sources":["../../src/transformers/safeClassNames.ts"],"mappings":";;;;;;AAsGA;;;;;;;;;;;;iBAAgB,cAAA,CAAe,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,SAAA,GAAiB,SAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"safeClassNames.mjs","names":[],"sources":["../../src/transformers/safeClassNames.ts"],"sourcesContent":["import postcss from 'postcss'\nimport safeParser from 'postcss-safe-parser'\nimport type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\nimport type { CssConfig } from '../types/config.ts'\n\nconst DEFAULT_REPLACEMENTS: Record<string, string> = {\n ':': '-',\n '/': '-',\n '%': 'pc',\n '.': '_',\n ',': '_',\n '#': '_',\n '[': '',\n ']': '',\n '(': '',\n ')': '',\n '{': '',\n '}': '',\n '!': '-i',\n '&': 'and-',\n '<': 'lt-',\n '=': 'eq-',\n '>': 'gt-',\n '|': 'or-',\n '@': 'at-',\n '?': 'q-',\n '\\\\': '-',\n '\"': '-',\n \"'\": '-',\n '*': '-',\n '+': '-',\n ';': '-',\n '^': '-',\n '`': '-',\n '~': '-',\n '$': '-',\n}\n\nfunction escapeForRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Replace escaped special characters in CSS selectors.\n *\n * Tailwind generates selectors like `.sm\\:text-base`. This function\n * replaces the `\\:` with `-` (or whatever the configured replacement is)\n * so the selector becomes `.sm-text-base`, which is safe for email clients.\n */\nfunction processCssSelectors(css: string, replacements: Record<string, string>): string {\n // Matches \\<char> in CSS selectors — e.g. \\: \\/ \\. \\[ etc.\n const selectorRegex = new RegExp(\n `\\\\\\\\(${Object.keys(replacements).map(escapeForRegex).join('|')})`,\n 'g',\n )\n\n return postcss([\n (root: postcss.Root) => {\n root.walkRules((rule: postcss.Rule) => {\n rule.selector = rule.selector\n .replace(selectorRegex, (_matched, char) => replacements[char] ?? _matched)\n // Handle CSS unicode escape for comma (\\2c → _)\n .replaceAll('\\\\2c ', '_')\n })\n },\n ]).process(css, { parser: safeParser }).css\n}\n\n/**\n * Replace unsafe special characters in a class attribute value.\n *\n * Splits on whitespace and replaces each char from the replacements map\n * in each class token individually.\n */\nfunction processClassAttr(classStr: string, replacements: Record<string, string>): string {\n return classStr\n .split(/\\s+/)\n .filter(Boolean)\n .map((cls) => {\n for (const [from, to] of Object.entries(replacements)) {\n cls = cls.split(from).join(to)\n }\n return cls\n })\n .join(' ')\n}\n\n/**\n * Safe class names transformer.\n *\n * Replaces unsafe characters (`:`, `/`, `[`, `]`, etc.) in:\n * - CSS selectors inside `<style>` tags\n * - HTML `class` attributes\n *\n * This makes Tailwind utility classes like `sm:text-base` safe for\n * email clients that cannot handle escaped characters in class names.\n *\n * Enabled by default. Disable by setting `css.safe` to `false`.\n * Customize replacements by passing a `Record<string, string>` — user\n * values are merged on top of the defaults.\n */\nexport function safeClassNames(dom: ChildNode[], config: CssConfig = {}): ChildNode[] {\n const option = config.safe ?? true\n\n if (!option) return dom\n\n const replacements: Record<string, string> =\n option && typeof option === 'object'\n ? { ...DEFAULT_REPLACEMENTS, ...option }\n : DEFAULT_REPLACEMENTS\n\n walk(dom, (node) => {\n const el = node as Element\n\n // Process CSS selectors inside <style> tags\n if (el.name === 'style' && el.children?.length) {\n const text = el.children.find((c) => c.type === 'text') as any\n if (text?.data?.trim()) {\n text.data = processCssSelectors(text.data, replacements)\n }\n }\n\n // Replace special chars in class attributes\n if ('attribs' in el && el.attribs?.class) {\n el.attribs.class = processClassAttr(el.attribs.class, replacements)\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;AAMA,MAAM,uBAA+C;CACnD,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,MAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACN;AAED,SAAS,eAAe,GAAmB;AACzC,QAAO,EAAE,QAAQ,uBAAuB,OAAO;;;;;;;;;AAUjD,SAAS,oBAAoB,KAAa,cAA8C;CAEtF,MAAM,gBAAgB,IAAI,OACxB,QAAQ,OAAO,KAAK,aAAa,CAAC,IAAI,eAAe,CAAC,KAAK,IAAI,CAAC,IAChE,IACD;AAED,QAAO,QAAQ,EACZ,SAAuB;AACtB,OAAK,WAAW,SAAuB;AACrC,QAAK,WAAW,KAAK,SAClB,QAAQ,gBAAgB,UAAU,SAAS,aAAa,SAAS,SAAS,CAE1E,WAAW,SAAS,IAAI;IAC3B;GAEL,CAAC,CAAC,QAAQ,KAAK,EAAE,QAAQ,YAAY,CAAC,CAAC;;;;;;;;AAS1C,SAAS,iBAAiB,UAAkB,cAA8C;AACxF,QAAO,SACJ,MAAM,MAAM,CACZ,OAAO,QAAQ,CACf,KAAK,QAAQ;AACZ,OAAK,MAAM,CAAC,MAAM,OAAO,OAAO,QAAQ,aAAa,CACnD,OAAM,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG;AAEhC,SAAO;GACP,CACD,KAAK,IAAI;;;;;;;;;;;;;;;;AAiBd,SAAgB,eAAe,KAAkB,SAAoB,EAAE,EAAe;CACpF,MAAM,SAAS,OAAO,QAAQ;AAE9B,KAAI,CAAC,OAAQ,QAAO;CAEpB,MAAM,eACJ,UAAU,OAAO,WAAW,WACxB;EAAE,GAAG;EAAsB,GAAG;EAAQ,GACtC;AAEN,MAAK,MAAM,SAAS;EAClB,MAAM,KAAK;AAGX,MAAI,GAAG,SAAS,WAAW,GAAG,UAAU,QAAQ;GAC9C,MAAM,OAAO,GAAG,SAAS,MAAM,MAAM,EAAE,SAAS,OAAO;AACvD,OAAI,MAAM,MAAM,MAAM,CACpB,MAAK,OAAO,oBAAoB,KAAK,MAAM,aAAa;;AAK5D,MAAI,aAAa,MAAM,GAAG,SAAS,MACjC,IAAG,QAAQ,QAAQ,iBAAiB,GAAG,QAAQ,OAAO,aAAa;GAErE;AAEF,QAAO"}
@@ -1,24 +0,0 @@
1
- import { CssConfig } from "../types/config.mjs";
2
- import { ChildNode } from "domhandler";
3
-
4
- //#region src/transformers/shorthandCSS.d.ts
5
- /**
6
- * Shorthand CSS transformer.
7
- *
8
- * Rewrites longhand CSS inside `style` attributes with shorthand syntax.
9
- * Works with margin, padding, and border when all sides are specified.
10
- *
11
- * For example:
12
- * `margin-left: 2px; margin-right: 2px; margin-top: 4px; margin-bottom: 4px`
13
- * becomes:
14
- * `margin: 4px 2px`
15
- *
16
- * Enabled via `css.shorthand`:
17
- * - `true`: enable for all tags
18
- * - `{ tags: ['td', 'div'] }`: enable only for specified tags
19
- * - `false` or omitted: disabled
20
- */
21
- declare function shorthandCSS(dom: ChildNode[], config?: CssConfig): ChildNode[];
22
- //#endregion
23
- export { shorthandCSS };
24
- //# sourceMappingURL=shorthandCSS.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shorthandCSS.d.mts","names":[],"sources":["../../src/transformers/shorthandCSS.ts"],"mappings":";;;;;;AA2BA;;;;;;;;;;;;;;iBAAgB,YAAA,CAAa,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,SAAA,GAAiB,SAAA"}
@@ -1,48 +0,0 @@
1
- import { walk } from "../utils/ast/walker.mjs";
2
- import "../utils/ast/index.mjs";
3
- import postcss from "postcss";
4
- import safeParser from "postcss-safe-parser";
5
- import mergeLonghand from "postcss-merge-longhand";
6
-
7
- //#region src/transformers/shorthandCSS.ts
8
- /**
9
- * Shorthand CSS transformer.
10
- *
11
- * Rewrites longhand CSS inside `style` attributes with shorthand syntax.
12
- * Works with margin, padding, and border when all sides are specified.
13
- *
14
- * For example:
15
- * `margin-left: 2px; margin-right: 2px; margin-top: 4px; margin-bottom: 4px`
16
- * becomes:
17
- * `margin: 4px 2px`
18
- *
19
- * Enabled via `css.shorthand`:
20
- * - `true`: enable for all tags
21
- * - `{ tags: ['td', 'div'] }`: enable only for specified tags
22
- * - `false` or omitted: disabled
23
- */
24
- function shorthandCSS(dom, config = {}) {
25
- const option = config.shorthand;
26
- if (!option) return dom;
27
- const allowedTags = (typeof option === "object" ? option : {}).tags ?? [];
28
- const hasTagFilter = allowedTags.length > 0;
29
- walk(dom, (node) => {
30
- const el = node;
31
- if (!el.attribs?.style) return;
32
- if (hasTagFilter && !allowedTags.includes(el.name)) return;
33
- const styleValue = el.attribs.style;
34
- try {
35
- const { css } = postcss().use(mergeLonghand).process(`div { ${styleValue} }`, { parser: safeParser });
36
- const match = css.match(/div\s*\{\s*([^}]+)\s*\}/);
37
- if (match && match[1]) {
38
- const newStyle = match[1].trim();
39
- if (newStyle !== styleValue) el.attribs.style = newStyle;
40
- }
41
- } catch {}
42
- });
43
- return dom;
44
- }
45
-
46
- //#endregion
47
- export { shorthandCSS };
48
- //# sourceMappingURL=shorthandCSS.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shorthandCSS.mjs","names":[],"sources":["../../src/transformers/shorthandCSS.ts"],"sourcesContent":["import postcss from 'postcss'\nimport safeParser from 'postcss-safe-parser'\nimport mergeLonghand from 'postcss-merge-longhand'\nimport type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\nimport type { CssConfig } from '../types/config.ts'\n\ninterface ShorthandCssOptions {\n tags?: string[]\n}\n\n/**\n * Shorthand CSS transformer.\n *\n * Rewrites longhand CSS inside `style` attributes with shorthand syntax.\n * Works with margin, padding, and border when all sides are specified.\n *\n * For example:\n * `margin-left: 2px; margin-right: 2px; margin-top: 4px; margin-bottom: 4px`\n * becomes:\n * `margin: 4px 2px`\n *\n * Enabled via `css.shorthand`:\n * - `true`: enable for all tags\n * - `{ tags: ['td', 'div'] }`: enable only for specified tags\n * - `false` or omitted: disabled\n */\nexport function shorthandCSS(dom: ChildNode[], config: CssConfig = {}): ChildNode[] {\n const option = config.shorthand\n\n // Disabled by default\n if (!option) {\n return dom\n }\n\n // Parse options\n const options: ShorthandCssOptions = typeof option === 'object' ? option : {}\n const allowedTags = options.tags ?? []\n const hasTagFilter = allowedTags.length > 0\n\n walk(dom, (node) => {\n const el = node as Element\n\n // Skip if no attribs or no style\n if (!el.attribs?.style) {\n return\n }\n\n // Skip if tag filter is active and this tag is not allowed\n if (hasTagFilter && !allowedTags.includes(el.name)) {\n return\n }\n\n const styleValue = el.attribs.style\n\n try {\n // Process the style with postcss-merge-longhand\n // Wrap in a dummy selector since postcss needs a rule\n const { css } = postcss()\n .use(mergeLonghand)\n .process(`div { ${styleValue} }`, { parser: safeParser })\n\n // Extract the content between the braces\n const match = css.match(/div\\s*\\{\\s*([^}]+)\\s*\\}/)\n if (match && match[1]) {\n const newStyle = match[1].trim()\n if (newStyle !== styleValue) {\n el.attribs.style = newStyle\n }\n }\n } catch {\n // If processing fails, keep the original style\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,aAAa,KAAkB,SAAoB,EAAE,EAAe;CAClF,MAAM,SAAS,OAAO;AAGtB,KAAI,CAAC,OACH,QAAO;CAKT,MAAM,eAD+B,OAAO,WAAW,WAAW,SAAS,EAAE,EACjD,QAAQ,EAAE;CACtC,MAAM,eAAe,YAAY,SAAS;AAE1C,MAAK,MAAM,SAAS;EAClB,MAAM,KAAK;AAGX,MAAI,CAAC,GAAG,SAAS,MACf;AAIF,MAAI,gBAAgB,CAAC,YAAY,SAAS,GAAG,KAAK,CAChD;EAGF,MAAM,aAAa,GAAG,QAAQ;AAE9B,MAAI;GAGF,MAAM,EAAE,QAAQ,SAAS,CACtB,IAAI,cAAc,CAClB,QAAQ,SAAS,WAAW,KAAK,EAAE,QAAQ,YAAY,CAAC;GAG3D,MAAM,QAAQ,IAAI,MAAM,0BAA0B;AAClD,OAAI,SAAS,MAAM,IAAI;IACrB,MAAM,WAAW,MAAM,GAAG,MAAM;AAChC,QAAI,aAAa,WACf,IAAG,QAAQ,QAAQ;;UAGjB;GAGR;AAEF,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tailwindcss.d.mts","names":[],"sources":["../../src/transformers/tailwindcss.ts"],"mappings":";;;;;;AA6FA;;;;;;;;;;iBAAsB,WAAA,CAAY,GAAA,EAAK,SAAA,IAAa,MAAA,EAAQ,aAAA,EAAe,QAAA,YAAoB,OAAA,CAAQ,SAAA"}
@@ -1,136 +0,0 @@
1
- import { walk } from "../utils/ast/walker.mjs";
2
- import "../utils/ast/index.mjs";
3
- import pruneVars_default from "../plugins/postcss/pruneVars.mjs";
4
- import { tailwindCleanup } from "../plugins/postcss/tailwindCleanup.mjs";
5
- import { mergeMediaQueries } from "../plugins/postcss/mergeMediaQueries.mjs";
6
- import { dirname, relative, resolve } from "node:path";
7
- import postcss from "postcss";
8
- import tailwindcssPostcss from "@tailwindcss/postcss";
9
- import customProperties from "postcss-custom-properties";
10
- import safeParser from "postcss-safe-parser";
11
- import { transform } from "lightningcss";
12
-
13
- //#region src/transformers/tailwindcss.ts
14
- function createProcessor(config) {
15
- return postcss([
16
- tailwindcssPostcss({
17
- base: config.css?.base,
18
- transformAssetUrls: false,
19
- optimize: false
20
- }),
21
- customProperties({ preserve: false }),
22
- pruneVars_default()
23
- ]);
24
- }
25
- /**
26
- * Decode HTML entities that Vue SSR encodes inside <style> tags.
27
- *
28
- * Vue's renderToString HTML-encodes quotes and other characters
29
- * inside <style> tags within templates, breaking CSS like
30
- * `@import "@maizzle/tailwindcss"` → `@import &quot;...&quot;`
31
- */
32
- function decodeEntities(str) {
33
- return str.replace(/&quot;/g, "\"").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&#39;/g, "'").replace(/&apos;/g, "'");
34
- }
35
- /**
36
- * Lower modern CSS syntax using lightningcss.
37
- *
38
- * Targets IE 1 to maximize syntax lowering — converts modern features
39
- * like nesting, oklch(), color-mix(), @property, etc. into simple CSS
40
- * that email clients can understand.
41
- */
42
- function lowerSyntax(css) {
43
- return transform({
44
- filename: "email.css",
45
- code: Buffer.from(css),
46
- minify: false,
47
- targets: { ie: 128 }
48
- }).code.toString();
49
- }
50
- /**
51
- * Run cleanup and media query merging on the compiled CSS.
52
- *
53
- * Removes unwanted selectors (:host, :lang) and at-rules (@layer, @property),
54
- * then sorts and merges media queries.
55
- */
56
- async function optimizeCss(css, config) {
57
- const plugins = [...tailwindCleanup(config)];
58
- const mediaPlugin = mergeMediaQueries(config);
59
- if (mediaPlugin) plugins.push(mediaPlugin);
60
- return (await postcss(plugins).process(css, { from: void 0 })).css;
61
- }
62
- /**
63
- * Tailwind CSS transformer.
64
- *
65
- * Compiles CSS inside <style> tags in the DOM using
66
- * @tailwindcss/postcss, then lowers modern CSS syntax with lightningcss.
67
- *
68
- * Uses the AST walker to find <style> tags and decodes HTML entities
69
- * that Vue SSR encodes (e.g. &quot;) before CSS processing.
70
- *
71
- * Runs as the first transformer in the pipeline so that subsequent
72
- * transformers (inliner, purge, etc.) work with fully compiled CSS.
73
- */
74
- async function tailwindcss(dom, config, filePath) {
75
- const sourceNotPaths = [resolve(config.output?.path ?? "dist"), ...(config.css?.exclude ?? []).map((p) => resolve(p))];
76
- const styleTags = [];
77
- walk(dom, (node) => {
78
- if (node.name !== "style") return;
79
- const el = node;
80
- const attrs = el.attribs || {};
81
- const markerAttr = [
82
- "raw",
83
- "embed",
84
- "data-embed"
85
- ].find((attr) => attr in attrs);
86
- if (markerAttr) {
87
- delete el.attribs[markerAttr];
88
- return;
89
- }
90
- const rawContent = el.children.filter((child) => child.type === "text").map((child) => child.data).join("");
91
- if (!rawContent.trim()) return;
92
- let cssContent = decodeEntities(rawContent);
93
- if (filePath) {
94
- if (sourceNotPaths.length) {
95
- const fileDir = dirname(filePath);
96
- const exclusions = sourceNotPaths.map((p) => `@source not "${relative(fileDir, resolve(p))}";`).join("\n");
97
- cssContent = `${cssContent}\n${exclusions}`;
98
- }
99
- } else {
100
- const classes = [];
101
- walk(dom, (n) => {
102
- const cls = n.attribs?.class;
103
- if (cls) classes.push(cls);
104
- });
105
- if (classes.length) cssContent = `${cssContent}\n@source inline("${classes.join(" ")}");`;
106
- }
107
- styleTags.push({
108
- node: el,
109
- cssContent
110
- });
111
- });
112
- for (let i = 0; i < styleTags.length; i++) {
113
- const { node, cssContent } = styleTags[i];
114
- try {
115
- node.children = [{
116
- type: "text",
117
- data: await optimizeCss(lowerSyntax((await createProcessor(config).process(cssContent, {
118
- from: `${filePath ?? resolve(process.cwd(), "template.vue")}?style=${i}`,
119
- parser: safeParser
120
- })).css), config),
121
- parent: node
122
- }];
123
- } catch {
124
- node.children = [{
125
- type: "text",
126
- data: cssContent,
127
- parent: node
128
- }];
129
- }
130
- }
131
- return dom;
132
- }
133
-
134
- //#endregion
135
- export { tailwindcss };
136
- //# sourceMappingURL=tailwindcss.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tailwindcss.mjs","names":["pruneVars"],"sources":["../../src/transformers/tailwindcss.ts"],"sourcesContent":["import postcss from 'postcss'\nimport tailwindcssPostcss from '@tailwindcss/postcss'\nimport customProperties from 'postcss-custom-properties'\nimport pruneVars from '../plugins/postcss/pruneVars.ts'\nimport safeParser from 'postcss-safe-parser'\nimport { transform } from 'lightningcss'\nimport { resolve, dirname, relative } from 'node:path'\nimport type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\nimport { tailwindCleanup } from '../plugins/postcss/tailwindCleanup.ts'\nimport { mergeMediaQueries } from '../plugins/postcss/mergeMediaQueries.ts'\nimport type { MaizzleConfig } from '../types/config.ts'\n\nfunction createProcessor(config: MaizzleConfig) {\n return postcss([\n tailwindcssPostcss({\n base: config.css?.base,\n transformAssetUrls: false,\n optimize: false, // we run Lightning CSS manually\n }),\n customProperties({\n preserve: false,\n }),\n pruneVars(),\n ])\n}\n\n/**\n * Decode HTML entities that Vue SSR encodes inside <style> tags.\n *\n * Vue's renderToString HTML-encodes quotes and other characters\n * inside <style> tags within templates, breaking CSS like\n * `@import \"@maizzle/tailwindcss\"` → `@import &quot;...&quot;`\n */\nfunction decodeEntities(str: string): string {\n return str\n .replace(/&quot;/g, '\"')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/g, \"'\")\n}\n\n/**\n * Lower modern CSS syntax using lightningcss.\n *\n * Targets IE 1 to maximize syntax lowering — converts modern features\n * like nesting, oklch(), color-mix(), @property, etc. into simple CSS\n * that email clients can understand.\n */\nfunction lowerSyntax(css: string): string {\n const result = transform({\n filename: 'email.css',\n code: Buffer.from(css),\n minify: false,\n targets: {\n ie: 4 << 5,\n },\n })\n\n return result.code.toString()\n}\n\n/**\n * Run cleanup and media query merging on the compiled CSS.\n *\n * Removes unwanted selectors (:host, :lang) and at-rules (@layer, @property),\n * then sorts and merges media queries.\n */\nasync function optimizeCss(css: string, config: MaizzleConfig): Promise<string> {\n const plugins: postcss.Plugin[] = [...tailwindCleanup(config)]\n\n const mediaPlugin = mergeMediaQueries(config)\n if (mediaPlugin) plugins.push(mediaPlugin)\n\n const result = await postcss(plugins).process(css, { from: undefined })\n\n return result.css\n}\n\n/**\n * Tailwind CSS transformer.\n *\n * Compiles CSS inside <style> tags in the DOM using\n * @tailwindcss/postcss, then lowers modern CSS syntax with lightningcss.\n *\n * Uses the AST walker to find <style> tags and decodes HTML entities\n * that Vue SSR encodes (e.g. &quot;) before CSS processing.\n *\n * Runs as the first transformer in the pipeline so that subsequent\n * transformers (inliner, purge, etc.) work with fully compiled CSS.\n */\nexport async function tailwindcss(dom: ChildNode[], config: MaizzleConfig, filePath?: string): Promise<ChildNode[]> {\n const sourceNotPaths = [\n resolve(config.output?.path ?? 'dist'),\n ...(config.css?.exclude ?? []).map(p => resolve(p)),\n ]\n\n const styleTags: { node: Element; cssContent: string }[] = []\n\n walk(dom, (node) => {\n if ((node as Element).name !== 'style') return\n\n const el = node as Element\n const attrs = el.attribs || {}\n\n // Skip marked style tags, but remove the marker attribute first\n const markerAttr = ['raw', 'embed', 'data-embed'].find(attr => attr in attrs)\n if (markerAttr) {\n delete el.attribs[markerAttr]\n return\n }\n\n // Get text content from children and decode HTML entities\n const rawContent = el.children\n .filter(child => child.type === 'text')\n .map(child => (child as any).data)\n .join('')\n\n if (!rawContent.trim()) return\n\n let cssContent = decodeEntities(rawContent)\n\n if (filePath) {\n if (sourceNotPaths.length) {\n const fileDir = dirname(filePath)\n const exclusions = sourceNotPaths\n .map(p => `@source not \"${relative(fileDir, resolve(p))}\";`)\n .join('\\n')\n\n cssContent = `${cssContent}\\n${exclusions}`\n }\n } else {\n // No file path (e.g. component input) — extract classes from the DOM\n // and tell Tailwind to scan them via @source inline()\n const classes: string[] = []\n walk(dom, (n) => {\n const cls = (n as Element).attribs?.class\n if (cls) classes.push(cls)\n })\n\n if (classes.length) {\n cssContent = `${cssContent}\\n@source inline(\"${classes.join(' ')}\");`\n }\n }\n\n styleTags.push({ node: el, cssContent })\n })\n\n for (let i = 0; i < styleTags.length; i++) {\n const { node, cssContent } = styleTags[i]\n try {\n const processor = createProcessor(config)\n const result = await processor.process(\n cssContent,\n {\n from: `${filePath ?? resolve(process.cwd(), 'template.vue')}?style=${i}`,\n parser: safeParser,\n }\n )\n\n const lowered = lowerSyntax(result.css)\n const optimized = await optimizeCss(lowered, config)\n\n // Replace the style tag's children with the compiled CSS\n node.children = [{\n type: 'text',\n data: optimized,\n parent: node,\n } as any]\n } catch {\n // If CSS processing fails, still replace with decoded content\n // so HTML entities don't break the CSS\n node.children = [{\n type: 'text',\n data: cssContent,\n parent: node,\n } as any]\n }\n }\n\n return dom\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,gBAAgB,QAAuB;AAC9C,QAAO,QAAQ;EACb,mBAAmB;GACjB,MAAM,OAAO,KAAK;GAClB,oBAAoB;GACpB,UAAU;GACX,CAAC;EACF,iBAAiB,EACf,UAAU,OACX,CAAC;EACFA,mBAAW;EACZ,CAAC;;;;;;;;;AAUJ,SAAS,eAAe,KAAqB;AAC3C,QAAO,IACJ,QAAQ,WAAW,KAAI,CACvB,QAAQ,UAAU,IAAI,CACtB,QAAQ,SAAS,IAAI,CACrB,QAAQ,SAAS,IAAI,CACrB,QAAQ,UAAU,IAAI,CACtB,QAAQ,WAAW,IAAI;;;;;;;;;AAU5B,SAAS,YAAY,KAAqB;AAUxC,QATe,UAAU;EACvB,UAAU;EACV,MAAM,OAAO,KAAK,IAAI;EACtB,QAAQ;EACR,SAAS,EACP,IAAI,KACL;EACF,CAAC,CAEY,KAAK,UAAU;;;;;;;;AAS/B,eAAe,YAAY,KAAa,QAAwC;CAC9E,MAAM,UAA4B,CAAC,GAAG,gBAAgB,OAAO,CAAC;CAE9D,MAAM,cAAc,kBAAkB,OAAO;AAC7C,KAAI,YAAa,SAAQ,KAAK,YAAY;AAI1C,SAFe,MAAM,QAAQ,QAAQ,CAAC,QAAQ,KAAK,EAAE,MAAM,QAAW,CAAC,EAEzD;;;;;;;;;;;;;;AAehB,eAAsB,YAAY,KAAkB,QAAuB,UAAyC;CAClH,MAAM,iBAAiB,CACrB,QAAQ,OAAO,QAAQ,QAAQ,OAAO,EACtC,IAAI,OAAO,KAAK,WAAW,EAAE,EAAE,KAAI,MAAK,QAAQ,EAAE,CAAC,CACpD;CAED,MAAM,YAAqD,EAAE;AAE7D,MAAK,MAAM,SAAS;AAClB,MAAK,KAAiB,SAAS,QAAS;EAExC,MAAM,KAAK;EACX,MAAM,QAAQ,GAAG,WAAW,EAAE;EAG9B,MAAM,aAAa;GAAC;GAAO;GAAS;GAAa,CAAC,MAAK,SAAQ,QAAQ,MAAM;AAC7E,MAAI,YAAY;AACd,UAAO,GAAG,QAAQ;AAClB;;EAIF,MAAM,aAAa,GAAG,SACnB,QAAO,UAAS,MAAM,SAAS,OAAO,CACtC,KAAI,UAAU,MAAc,KAAK,CACjC,KAAK,GAAG;AAEX,MAAI,CAAC,WAAW,MAAM,CAAE;EAExB,IAAI,aAAa,eAAe,WAAW;AAE3C,MAAI,UACF;OAAI,eAAe,QAAQ;IACzB,MAAM,UAAU,QAAQ,SAAS;IACjC,MAAM,aAAa,eAChB,KAAI,MAAK,gBAAgB,SAAS,SAAS,QAAQ,EAAE,CAAC,CAAC,IAAI,CAC3D,KAAK,KAAK;AAEb,iBAAa,GAAG,WAAW,IAAI;;SAE5B;GAGL,MAAM,UAAoB,EAAE;AAC5B,QAAK,MAAM,MAAM;IACf,MAAM,MAAO,EAAc,SAAS;AACpC,QAAI,IAAK,SAAQ,KAAK,IAAI;KAC1B;AAEF,OAAI,QAAQ,OACV,cAAa,GAAG,WAAW,oBAAoB,QAAQ,KAAK,IAAI,CAAC;;AAIrE,YAAU,KAAK;GAAE,MAAM;GAAI;GAAY,CAAC;GACxC;AAEF,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;EACzC,MAAM,EAAE,MAAM,eAAe,UAAU;AACvC,MAAI;AAcF,QAAK,WAAW,CAAC;IACf,MAAM;IACN,MALgB,MAAM,YADR,aARD,MADG,gBAAgB,OAAO,CACV,QAC7B,YACA;KACE,MAAM,GAAG,YAAY,QAAQ,QAAQ,KAAK,EAAE,eAAe,CAAC,SAAS;KACrE,QAAQ;KACT,CACF,EAEkC,IAAI,EACM,OAAO;IAMlD,QAAQ;IACT,CAAQ;UACH;AAGN,QAAK,WAAW,CAAC;IACf,MAAM;IACN,MAAM;IACN,QAAQ;IACT,CAAQ;;;AAIb,QAAO"}
@@ -1,24 +0,0 @@
1
- import { UrlConfig } from "../types/config.mjs";
2
- import { ChildNode } from "domhandler";
3
-
4
- //#region src/transformers/urlQuery.d.ts
5
- /**
6
- * URL query transformer.
7
- *
8
- * Appends query parameters to URLs found in specified attributes of
9
- * specified HTML tags.
10
- *
11
- * Reads config from the `config.url` object in `MaizzleConfig` (pass
12
- * `config.url` directly when calling as a standalone transformer).
13
- * The `_options` key inside `query` controls behaviour:
14
- * - `tags` — CSS selectors for elements to process. Default: `['a']`
15
- * - `attributes` — attribute names to process. Default: `['src', 'href', 'poster', 'srcset', 'background']`
16
- * - `strict` — only append to absolute URLs. Default: `true`
17
- * - `qs` — options forwarded to query-string. Default: `{ encode: false }`
18
- *
19
- * All non-`_options` keys inside `query` are treated as URL parameters to append.
20
- */
21
- declare function urlQuery(dom: ChildNode[], config?: UrlConfig): ChildNode[];
22
- //#endregion
23
- export { urlQuery };
24
- //# sourceMappingURL=urlQuery.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"urlQuery.d.mts","names":[],"sources":["../../src/transformers/urlQuery.ts"],"mappings":";;;;;;AA0CA;;;;;;;;;;;;;;iBAAgB,QAAA,CAAS,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,SAAA,GAAiB,SAAA"}