@maizzle/framework 6.0.0-rc.9 → 6.0.1
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.
- package/README.md +3 -3
- package/bin/maizzle.mjs +1 -1
- package/dist/build.d.ts +38 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +234 -0
- package/dist/build.js.map +1 -0
- package/dist/components/Body.vue +32 -3
- package/dist/components/Button.vue +91 -62
- package/dist/components/CodeBlock.vue +6 -4
- package/dist/components/CodeInline.vue +77 -6
- package/dist/components/Column.vue +67 -31
- package/dist/components/Container.vue +73 -12
- package/dist/components/Font.vue +96 -0
- package/dist/components/Head.vue +1 -1
- package/dist/components/Heading.vue +1 -1
- package/dist/components/Hr.vue +33 -0
- package/dist/components/Html.vue +36 -3
- package/dist/components/Img.vue +332 -0
- package/dist/components/Layout.vue +73 -21
- package/dist/components/Link.vue +1 -1
- package/dist/components/Markdown.vue +51 -24
- package/dist/components/MarkdownLayout.vue +39 -0
- package/dist/components/NotPlaintext.vue +14 -0
- package/dist/components/Outlook.vue +38 -11
- package/dist/components/OutlookBg.vue +241 -0
- package/dist/components/Plaintext.vue +14 -0
- package/dist/components/Preheader.vue +35 -10
- package/dist/components/QrCode.vue +157 -0
- package/dist/components/Raw.vue +28 -0
- package/dist/components/Row.vue +115 -22
- package/dist/components/Section.vue +65 -26
- package/dist/components/Spacer.vue +35 -29
- package/dist/components/Tailwind.vue +45 -0
- package/dist/components/Text.vue +3 -3
- package/dist/components/Vml.vue +207 -94
- package/dist/components/utils.d.ts +53 -0
- package/dist/components/utils.d.ts.map +1 -0
- package/dist/components/utils.js +80 -0
- package/dist/components/utils.js.map +1 -0
- package/dist/components/utils.ts +102 -0
- package/dist/composables/defineConfig.d.ts +13 -0
- package/dist/composables/defineConfig.d.ts.map +1 -0
- package/dist/composables/{defineConfig.mjs → defineConfig.js} +7 -9
- package/dist/composables/defineConfig.js.map +1 -0
- package/dist/composables/renderContext.d.ts +37 -0
- package/dist/composables/renderContext.d.ts.map +1 -0
- package/dist/composables/renderContext.js +6 -0
- package/dist/composables/renderContext.js.map +1 -0
- package/dist/composables/useBaseUrl.d.ts +19 -0
- package/dist/composables/useBaseUrl.d.ts.map +1 -0
- package/dist/composables/useBaseUrl.js +26 -0
- package/dist/composables/useBaseUrl.js.map +1 -0
- package/dist/composables/useConfig.d.ts +16 -0
- package/dist/composables/useConfig.d.ts.map +1 -0
- package/dist/composables/useConfig.js +19 -0
- package/dist/composables/useConfig.js.map +1 -0
- package/dist/composables/useCurrentTemplate.d.ts +31 -0
- package/dist/composables/useCurrentTemplate.d.ts.map +1 -0
- package/dist/composables/useCurrentTemplate.js +42 -0
- package/dist/composables/useCurrentTemplate.js.map +1 -0
- package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
- package/dist/composables/useDoctype.d.ts.map +1 -0
- package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
- package/dist/composables/useDoctype.js.map +1 -0
- package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +3 -3
- package/dist/composables/useEvent.d.ts.map +1 -0
- package/dist/composables/{useEvent.mjs → useEvent.js} +4 -5
- package/dist/composables/useEvent.js.map +1 -0
- package/dist/composables/useFont.d.ts +50 -0
- package/dist/composables/useFont.d.ts.map +1 -0
- package/dist/composables/useFont.js +92 -0
- package/dist/composables/useFont.js.map +1 -0
- package/dist/composables/useOutlookFallback.d.ts +21 -0
- package/dist/composables/useOutlookFallback.d.ts.map +1 -0
- package/dist/composables/useOutlookFallback.js +29 -0
- package/dist/composables/useOutlookFallback.js.map +1 -0
- package/dist/composables/useOutputPath.d.ts +17 -0
- package/dist/composables/useOutputPath.d.ts.map +1 -0
- package/dist/composables/useOutputPath.js +23 -0
- package/dist/composables/useOutputPath.js.map +1 -0
- package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
- package/dist/composables/usePlaintext.d.ts.map +1 -0
- package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
- package/dist/composables/usePlaintext.js.map +1 -0
- package/dist/composables/usePreheader.d.ts +25 -0
- package/dist/composables/usePreheader.d.ts.map +1 -0
- package/dist/composables/usePreheader.js +28 -0
- package/dist/composables/usePreheader.js.map +1 -0
- package/dist/composables/useTransformers.d.ts +34 -0
- package/dist/composables/useTransformers.d.ts.map +1 -0
- package/dist/composables/useTransformers.js +48 -0
- package/dist/composables/useTransformers.js.map +1 -0
- package/dist/composables/useUrlQuery.d.ts +19 -0
- package/dist/composables/useUrlQuery.d.ts.map +1 -0
- package/dist/composables/useUrlQuery.js +26 -0
- package/dist/composables/useUrlQuery.js.map +1 -0
- package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/{defaults.mjs → defaults.js} +10 -6
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +33 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +136 -0
- package/dist/config/index.js.map +1 -0
- package/dist/events/{index.d.mts → index.d.ts} +35 -12
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/{index.mjs → index.js} +31 -13
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +40 -0
- package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
- package/dist/plaintext.d.ts.map +1 -0
- package/dist/{plaintext.mjs → plaintext.js} +4 -5
- package/dist/plaintext.js.map +1 -0
- package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
- package/dist/plugin.d.ts.map +1 -0
- package/dist/{plugin.mjs → plugin.js} +8 -9
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
- package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
- package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
- package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
- package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
- package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
- package/dist/plugins/postcss/pruneVars.js.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
- package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
- package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
- package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
- package/dist/plugins/postcss/resolveProps.d.ts +8 -0
- package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveProps.js +155 -0
- package/dist/plugins/postcss/resolveProps.js.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
- package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.mjs → tailwindCleanup.js} +5 -3
- package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
- package/dist/prepare.d.ts +17 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +44 -0
- package/dist/prepare.js.map +1 -0
- package/dist/render/active.d.ts +8 -0
- package/dist/render/active.d.ts.map +1 -0
- package/dist/render/active.js +12 -0
- package/dist/render/active.js.map +1 -0
- package/dist/render/buildTemplate.d.ts +49 -0
- package/dist/render/buildTemplate.d.ts.map +1 -0
- package/dist/render/buildTemplate.js +141 -0
- package/dist/render/buildTemplate.js.map +1 -0
- package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +14 -6
- package/dist/render/createRenderer.d.ts.map +1 -0
- package/dist/render/createRenderer.js +468 -0
- package/dist/render/createRenderer.js.map +1 -0
- package/dist/render/index.d.ts +18 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +59 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/injectFonts.d.ts +15 -0
- package/dist/render/injectFonts.d.ts.map +1 -0
- package/dist/render/injectFonts.js +45 -0
- package/dist/render/injectFonts.js.map +1 -0
- package/dist/render/parallel/buildWorker.d.ts +31 -0
- package/dist/render/parallel/buildWorker.d.ts.map +1 -0
- package/dist/render/parallel/buildWorker.js +66 -0
- package/dist/render/parallel/buildWorker.js.map +1 -0
- package/dist/render/parallel/worker.mjs +28 -0
- package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
- package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
- package/dist/render/plugins/codeBlockExtract.js +38 -0
- package/dist/render/plugins/codeBlockExtract.js.map +1 -0
- package/dist/render/plugins/markdownExtract.d.ts +12 -0
- package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
- package/dist/render/plugins/markdownExtract.js +49 -0
- package/dist/render/plugins/markdownExtract.js.map +1 -0
- package/dist/render/plugins/rawExtract.d.ts +14 -0
- package/dist/render/plugins/rawExtract.d.ts.map +1 -0
- package/dist/render/plugins/rawExtract.js +34 -0
- package/dist/render/plugins/rawExtract.js.map +1 -0
- package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
- package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
- package/dist/render/plugins/rowSourceLocation.js +45 -0
- package/dist/render/plugins/rowSourceLocation.js.map +1 -0
- package/dist/{serve.d.mts → serve.d.ts} +5 -3
- package/dist/serve.d.ts.map +1 -0
- package/dist/{serve.mjs → serve.js} +248 -119
- package/dist/serve.js.map +1 -0
- package/dist/server/compatibility.d.ts +59 -0
- package/dist/server/compatibility.d.ts.map +1 -0
- package/dist/server/compatibility.js +959 -0
- package/dist/server/compatibility.js.map +1 -0
- package/dist/server/{email.d.mts → email.d.ts} +2 -2
- package/dist/server/email.d.ts.map +1 -0
- package/dist/server/{email.mjs → email.js} +2 -3
- package/dist/server/email.js.map +1 -0
- package/dist/server/linter.d.ts +20 -0
- package/dist/server/linter.d.ts.map +1 -0
- package/dist/server/linter.js +345 -0
- package/dist/server/linter.js.map +1 -0
- package/dist/server/sfc-utils.d.ts +21 -0
- package/dist/server/sfc-utils.d.ts.map +1 -0
- package/dist/server/sfc-utils.js +198 -0
- package/dist/server/sfc-utils.js.map +1 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js +44967 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js +8155 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js +1859 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -0
- package/dist/server/ui/.vite/deps/_metadata.json +78 -0
- package/dist/server/ui/.vite/deps/chunk-EAsCxrDo.js +14 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js +57 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js.map +1 -0
- package/dist/server/ui/.vite/deps/clsx.js +18 -0
- package/dist/server/ui/.vite/deps/clsx.js.map +1 -0
- package/dist/server/ui/.vite/deps/culori.js +4312 -0
- package/dist/server/ui/.vite/deps/culori.js.map +1 -0
- package/dist/server/ui/.vite/deps/package.json +3 -0
- package/dist/server/ui/.vite/deps/reka-ui.js +44464 -0
- package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js +3458 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue-router.js +6383 -0
- package/dist/server/ui/.vite/deps/vue-router.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue.js +2 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js +8800 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js.map +1 -0
- package/dist/server/ui/App.vue +106 -66
- package/dist/server/ui/components/SidebarClose.vue +12 -0
- package/dist/server/ui/components/ui/checkbox/Checkbox.vue +1 -1
- package/dist/server/ui/components/ui/command/Command.vue +5 -1
- package/dist/server/ui/components/ui/command/CommandInput.vue +2 -2
- package/dist/server/ui/components/ui/dialog/DialogContent.vue +1 -1
- package/dist/server/ui/components/ui/dialog/DialogScrollContent.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -1
- package/dist/server/ui/components/ui/input/Input.vue +1 -1
- package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
- package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +2 -2
- package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +1 -1
- package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +1 -1
- package/dist/server/ui/lib/emulated-dark-mode.ts +146 -0
- package/dist/server/ui/main.css +25 -0
- package/dist/server/ui/pages/Home.vue +1 -1
- package/dist/server/ui/pages/Preview.vue +377 -186
- package/dist/server/ui/vite-env.d.ts +1 -0
- package/dist/tests/render/_helpers.d.ts +6 -0
- package/dist/tests/render/_helpers.d.ts.map +1 -0
- package/dist/tests/render/_helpers.js +16 -0
- package/dist/tests/render/_helpers.js.map +1 -0
- package/dist/transformers/addAttributes.d.ts +42 -0
- package/dist/transformers/addAttributes.d.ts.map +1 -0
- package/dist/transformers/{addAttributes.mjs → addAttributes.js} +40 -24
- package/dist/transformers/addAttributes.js.map +1 -0
- package/dist/transformers/attributeToStyle.d.ts +38 -0
- package/dist/transformers/attributeToStyle.d.ts.map +1 -0
- package/dist/transformers/attributeToStyle.js +94 -0
- package/dist/transformers/attributeToStyle.js.map +1 -0
- package/dist/transformers/base.d.ts +71 -0
- package/dist/transformers/base.d.ts.map +1 -0
- package/dist/transformers/{base.mjs → base.js} +65 -40
- package/dist/transformers/base.js.map +1 -0
- package/dist/transformers/columnWidth.d.ts +31 -0
- package/dist/transformers/columnWidth.d.ts.map +1 -0
- package/dist/transformers/columnWidth.js +527 -0
- package/dist/transformers/columnWidth.js.map +1 -0
- package/dist/transformers/entities.d.ts +37 -0
- package/dist/transformers/entities.d.ts.map +1 -0
- package/dist/transformers/entities.js +74 -0
- package/dist/transformers/entities.js.map +1 -0
- package/dist/transformers/filters/{defaults.d.mts → defaults.d.ts} +1 -1
- package/dist/transformers/filters/defaults.d.ts.map +1 -0
- package/dist/transformers/filters/{defaults.mjs → defaults.js} +2 -2
- package/dist/transformers/filters/defaults.js.map +1 -0
- package/dist/transformers/filters/index.d.ts +43 -0
- package/dist/transformers/filters/index.d.ts.map +1 -0
- package/dist/transformers/filters/index.js +89 -0
- package/dist/transformers/filters/index.js.map +1 -0
- package/dist/transformers/format.d.ts +22 -0
- package/dist/transformers/format.d.ts.map +1 -0
- package/dist/transformers/format.js +30 -0
- package/dist/transformers/format.js.map +1 -0
- package/dist/transformers/imgWidth.d.ts +20 -0
- package/dist/transformers/imgWidth.d.ts.map +1 -0
- package/dist/transformers/imgWidth.js +76 -0
- package/dist/transformers/imgWidth.js.map +1 -0
- package/dist/transformers/{index.d.mts → index.d.ts} +4 -3
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +163 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/inlineCss.d.ts +85 -0
- package/dist/transformers/inlineCss.d.ts.map +1 -0
- package/dist/transformers/inlineCss.js +112 -0
- package/dist/transformers/inlineCss.js.map +1 -0
- package/dist/transformers/inlineLink.d.ts +35 -0
- package/dist/transformers/inlineLink.d.ts.map +1 -0
- package/dist/transformers/{inlineLink.mjs → inlineLink.js} +35 -11
- package/dist/transformers/inlineLink.js.map +1 -0
- package/dist/transformers/minify.d.ts +21 -0
- package/dist/transformers/minify.d.ts.map +1 -0
- package/dist/transformers/minify.js +25 -0
- package/dist/transformers/minify.js.map +1 -0
- package/dist/transformers/minifyCodeInline.d.ts +29 -0
- package/dist/transformers/minifyCodeInline.d.ts.map +1 -0
- package/dist/transformers/minifyCodeInline.js +36 -0
- package/dist/transformers/minifyCodeInline.js.map +1 -0
- package/dist/transformers/msoPlaceholders.d.ts +33 -0
- package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
- package/dist/transformers/msoPlaceholders.js +114 -0
- package/dist/transformers/msoPlaceholders.js.map +1 -0
- package/dist/transformers/purgeCss.d.ts +43 -0
- package/dist/transformers/purgeCss.d.ts.map +1 -0
- package/dist/transformers/purgeCss.js +207 -0
- package/dist/transformers/purgeCss.js.map +1 -0
- package/dist/transformers/removeAttributes.d.ts +54 -0
- package/dist/transformers/removeAttributes.d.ts.map +1 -0
- package/dist/transformers/removeAttributes.js +72 -0
- package/dist/transformers/removeAttributes.js.map +1 -0
- package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
- package/dist/transformers/replaceStrings.d.ts.map +1 -0
- package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
- package/dist/transformers/replaceStrings.js.map +1 -0
- package/dist/transformers/safeSelectors.d.ts +37 -0
- package/dist/transformers/safeSelectors.d.ts.map +1 -0
- package/dist/transformers/{safeClassNames.mjs → safeSelectors.js} +40 -10
- package/dist/transformers/safeSelectors.js.map +1 -0
- package/dist/transformers/shorthandCss.d.ts +47 -0
- package/dist/transformers/shorthandCss.d.ts.map +1 -0
- package/dist/transformers/shorthandCss.js +92 -0
- package/dist/transformers/shorthandCss.js.map +1 -0
- package/dist/transformers/sixHex.d.ts +25 -0
- package/dist/transformers/sixHex.d.ts.map +1 -0
- package/dist/transformers/sixHex.js +42 -0
- package/dist/transformers/sixHex.js.map +1 -0
- package/dist/transformers/tailwindComponent.d.ts +16 -0
- package/dist/transformers/tailwindComponent.d.ts.map +1 -0
- package/dist/transformers/tailwindComponent.js +101 -0
- package/dist/transformers/tailwindComponent.js.map +1 -0
- package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +2 -2
- package/dist/transformers/tailwindcss.d.ts.map +1 -0
- package/dist/transformers/{tailwindcss.mjs → tailwindcss.js} +33 -74
- package/dist/transformers/tailwindcss.js.map +1 -0
- package/dist/transformers/urlQuery.d.ts +36 -0
- package/dist/transformers/urlQuery.d.ts.map +1 -0
- package/dist/transformers/urlQuery.js +77 -0
- package/dist/transformers/urlQuery.js.map +1 -0
- package/dist/types/{config.d.mts → config.d.ts} +231 -46
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/utils/ast/index.d.ts +4 -0
- package/dist/utils/ast/index.js +4 -0
- package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
- package/dist/utils/ast/parser.d.ts.map +1 -0
- package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
- package/dist/utils/ast/parser.js.map +1 -0
- package/dist/utils/ast/{serializer.d.mts → serializer.d.ts} +1 -1
- package/dist/utils/ast/serializer.d.ts.map +1 -0
- package/dist/utils/ast/serializer.js +46 -0
- package/dist/utils/ast/serializer.js.map +1 -0
- package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
- package/dist/utils/ast/walker.d.ts.map +1 -0
- package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
- package/dist/utils/ast/walker.js.map +1 -0
- package/dist/utils/cloneConfig.d.ts +13 -0
- package/dist/utils/cloneConfig.d.ts.map +1 -0
- package/dist/utils/cloneConfig.js +21 -0
- package/dist/utils/cloneConfig.js.map +1 -0
- package/dist/utils/compileTailwindCss.d.ts +16 -0
- package/dist/utils/compileTailwindCss.d.ts.map +1 -0
- package/dist/utils/compileTailwindCss.js +55 -0
- package/dist/utils/compileTailwindCss.js.map +1 -0
- package/dist/utils/componentSources.d.ts +50 -0
- package/dist/utils/componentSources.d.ts.map +1 -0
- package/dist/utils/componentSources.js +50 -0
- package/dist/utils/componentSources.js.map +1 -0
- package/dist/utils/cssBox.d.ts +42 -0
- package/dist/utils/cssBox.d.ts.map +1 -0
- package/dist/utils/cssBox.js +151 -0
- package/dist/utils/cssBox.js.map +1 -0
- package/dist/utils/decodeStyleEntities.d.ts +15 -0
- package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
- package/dist/utils/decodeStyleEntities.js +18 -0
- package/dist/utils/decodeStyleEntities.js.map +1 -0
- package/dist/utils/{detect.d.mts → detect.d.ts} +1 -1
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/{detect.mjs → detect.js} +2 -3
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/output-markers.d.ts +29 -0
- package/dist/utils/output-markers.d.ts.map +1 -0
- package/dist/utils/output-markers.js +68 -0
- package/dist/utils/output-markers.js.map +1 -0
- package/dist/utils/{url.d.mts → url.d.ts} +1 -1
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/{url.mjs → url.js} +2 -3
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/watchPaths.d.ts +11 -0
- package/dist/utils/watchPaths.d.ts.map +1 -0
- package/dist/utils/watchPaths.js +19 -0
- package/dist/utils/watchPaths.js.map +1 -0
- package/node_modules/@clack/core/CHANGELOG.md +44 -0
- package/node_modules/@clack/core/dist/index.d.mts +125 -5
- package/node_modules/@clack/core/dist/index.mjs +972 -11
- package/node_modules/@clack/core/package.json +6 -2
- package/node_modules/@clack/prompts/CHANGELOG.md +70 -0
- package/node_modules/@clack/prompts/README.md +129 -3
- package/node_modules/@clack/prompts/dist/index.d.mts +567 -33
- package/node_modules/@clack/prompts/dist/index.mjs +1378 -133
- package/node_modules/@clack/prompts/package.json +7 -4
- package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
- package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
- package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
- package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
- package/node_modules/fast-string-truncated-width/package.json +1 -1
- package/node_modules/fast-string-truncated-width/readme.md +2 -3
- package/node_modules/fast-string-width/package.json +2 -2
- package/node_modules/fast-string-width/readme.md +0 -3
- package/node_modules/fast-wrap-ansi/lib/main.js +4 -2
- package/node_modules/fast-wrap-ansi/package.json +11 -11
- package/node_modules/maizzle/README.md +24 -0
- package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/config.mjs +8 -7
- package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
- package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
- package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
- package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
- package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
- package/node_modules/maizzle/dist/commands/new.mjs +46 -135
- package/node_modules/maizzle/dist/index.d.mts +1 -0
- package/node_modules/maizzle/dist/index.mjs +30 -7
- package/node_modules/maizzle/package.json +5 -4
- package/node_modules/nypm/dist/cli.mjs +28 -5
- package/node_modules/nypm/dist/index.d.mts +0 -8
- package/node_modules/nypm/dist/index.mjs +27 -4
- package/node_modules/nypm/package.json +12 -12
- package/node_modules/tinyexec/README.md +9 -1
- package/node_modules/tinyexec/dist/main.d.mts +22 -7
- package/node_modules/tinyexec/dist/main.mjs +189 -491
- package/node_modules/tinyexec/package.json +14 -16
- package/package.json +38 -31
- package/dist/_virtual/_rolldown/runtime.mjs +0 -32
- package/dist/build.d.mts +0 -19
- package/dist/build.d.mts.map +0 -1
- package/dist/build.mjs +0 -141
- package/dist/build.mjs.map +0 -1
- package/dist/components/Divider.vue +0 -133
- package/dist/components/Image.vue +0 -70
- package/dist/components/Overlap.vue +0 -80
- package/dist/components/utils.d.mts +0 -5
- package/dist/components/utils.d.mts.map +0 -1
- package/dist/components/utils.mjs +0 -9
- package/dist/components/utils.mjs.map +0 -1
- package/dist/composables/defineConfig.d.mts +0 -14
- package/dist/composables/defineConfig.d.mts.map +0 -1
- package/dist/composables/defineConfig.mjs.map +0 -1
- package/dist/composables/renderContext.d.mts +0 -24
- package/dist/composables/renderContext.d.mts.map +0 -1
- package/dist/composables/renderContext.mjs +0 -6
- package/dist/composables/renderContext.mjs.map +0 -1
- package/dist/composables/useConfig.d.mts +0 -9
- package/dist/composables/useConfig.d.mts.map +0 -1
- package/dist/composables/useConfig.mjs +0 -13
- package/dist/composables/useConfig.mjs.map +0 -1
- package/dist/composables/useDoctype.d.mts.map +0 -1
- package/dist/composables/useDoctype.mjs.map +0 -1
- package/dist/composables/useEvent.d.mts.map +0 -1
- package/dist/composables/useEvent.mjs.map +0 -1
- package/dist/composables/usePlaintext.d.mts.map +0 -1
- package/dist/composables/usePlaintext.mjs.map +0 -1
- package/dist/composables/usePreviewText.d.mts +0 -24
- package/dist/composables/usePreviewText.d.mts.map +0 -1
- package/dist/composables/usePreviewText.mjs +0 -29
- package/dist/composables/usePreviewText.mjs.map +0 -1
- package/dist/config/defaults.d.mts.map +0 -1
- package/dist/config/defaults.mjs.map +0 -1
- package/dist/config/index.d.mts +0 -15
- package/dist/config/index.d.mts.map +0 -1
- package/dist/config/index.mjs +0 -71
- package/dist/config/index.mjs.map +0 -1
- package/dist/events/index.d.mts.map +0 -1
- package/dist/events/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -31
- package/dist/index.mjs +0 -31
- package/dist/node_modules/picomatch/index.mjs +0 -13
- package/dist/node_modules/picomatch/index.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/constants.mjs +0 -174
- package/dist/node_modules/picomatch/lib/constants.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/parse.mjs +0 -1067
- package/dist/node_modules/picomatch/lib/parse.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/picomatch.mjs +0 -304
- package/dist/node_modules/picomatch/lib/picomatch.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/scan.mjs +0 -296
- package/dist/node_modules/picomatch/lib/scan.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/utils.mjs +0 -53
- package/dist/node_modules/picomatch/lib/utils.mjs.map +0 -1
- package/dist/plaintext.d.mts.map +0 -1
- package/dist/plaintext.mjs.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/plugin.mjs.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
- package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
- package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
- package/dist/render/createRenderer.d.mts.map +0 -1
- package/dist/render/createRenderer.mjs +0 -286
- package/dist/render/createRenderer.mjs.map +0 -1
- package/dist/render/index.d.mts +0 -26
- package/dist/render/index.d.mts.map +0 -1
- package/dist/render/index.mjs +0 -46
- package/dist/render/index.mjs.map +0 -1
- package/dist/serve.d.mts.map +0 -1
- package/dist/serve.mjs.map +0 -1
- package/dist/server/compatibility.d.mts +0 -5
- package/dist/server/compatibility.d.mts.map +0 -1
- package/dist/server/compatibility.mjs +0 -97
- package/dist/server/compatibility.mjs.map +0 -1
- package/dist/server/email.d.mts.map +0 -1
- package/dist/server/email.mjs.map +0 -1
- package/dist/server/linter.d.mts +0 -5
- package/dist/server/linter.d.mts.map +0 -1
- package/dist/server/linter.mjs +0 -189
- package/dist/server/linter.mjs.map +0 -1
- package/dist/transformers/addAttributes.d.mts +0 -32
- package/dist/transformers/addAttributes.d.mts.map +0 -1
- package/dist/transformers/addAttributes.mjs.map +0 -1
- package/dist/transformers/attributeToStyle.d.mts +0 -25
- package/dist/transformers/attributeToStyle.d.mts.map +0 -1
- package/dist/transformers/attributeToStyle.mjs +0 -80
- package/dist/transformers/attributeToStyle.mjs.map +0 -1
- package/dist/transformers/base.d.mts +0 -8
- package/dist/transformers/base.d.mts.map +0 -1
- package/dist/transformers/base.mjs.map +0 -1
- package/dist/transformers/entities.d.mts +0 -8
- package/dist/transformers/entities.d.mts.map +0 -1
- package/dist/transformers/entities.mjs +0 -41
- package/dist/transformers/entities.mjs.map +0 -1
- package/dist/transformers/filters/defaults.d.mts.map +0 -1
- package/dist/transformers/filters/defaults.mjs.map +0 -1
- package/dist/transformers/filters/index.d.mts +0 -22
- package/dist/transformers/filters/index.d.mts.map +0 -1
- package/dist/transformers/filters/index.mjs +0 -67
- package/dist/transformers/filters/index.mjs.map +0 -1
- package/dist/transformers/format.d.mts +0 -15
- package/dist/transformers/format.d.mts.map +0 -1
- package/dist/transformers/format.mjs +0 -26
- package/dist/transformers/format.mjs.map +0 -1
- package/dist/transformers/index.d.mts.map +0 -1
- package/dist/transformers/index.mjs +0 -81
- package/dist/transformers/index.mjs.map +0 -1
- package/dist/transformers/inlineCSS.d.mts +0 -17
- package/dist/transformers/inlineCSS.d.mts.map +0 -1
- package/dist/transformers/inlineCSS.mjs +0 -70
- package/dist/transformers/inlineCSS.mjs.map +0 -1
- package/dist/transformers/inlineLink.d.mts +0 -14
- package/dist/transformers/inlineLink.d.mts.map +0 -1
- package/dist/transformers/inlineLink.mjs.map +0 -1
- package/dist/transformers/minify.d.mts +0 -17
- package/dist/transformers/minify.d.mts.map +0 -1
- package/dist/transformers/minify.mjs +0 -24
- package/dist/transformers/minify.mjs.map +0 -1
- package/dist/transformers/purgeCSS.d.mts +0 -23
- package/dist/transformers/purgeCSS.d.mts.map +0 -1
- package/dist/transformers/purgeCSS.mjs +0 -132
- package/dist/transformers/purgeCSS.mjs.map +0 -1
- package/dist/transformers/removeAttributes.d.mts +0 -31
- package/dist/transformers/removeAttributes.d.mts.map +0 -1
- package/dist/transformers/removeAttributes.mjs +0 -63
- package/dist/transformers/removeAttributes.mjs.map +0 -1
- package/dist/transformers/replaceStrings.d.mts.map +0 -1
- package/dist/transformers/replaceStrings.mjs.map +0 -1
- package/dist/transformers/safeClassNames.d.mts +0 -22
- package/dist/transformers/safeClassNames.d.mts.map +0 -1
- package/dist/transformers/safeClassNames.mjs.map +0 -1
- package/dist/transformers/shorthandCSS.d.mts +0 -24
- package/dist/transformers/shorthandCSS.d.mts.map +0 -1
- package/dist/transformers/shorthandCSS.mjs +0 -48
- package/dist/transformers/shorthandCSS.mjs.map +0 -1
- package/dist/transformers/sixHex.d.mts +0 -16
- package/dist/transformers/sixHex.d.mts.map +0 -1
- package/dist/transformers/sixHex.mjs +0 -30
- package/dist/transformers/sixHex.mjs.map +0 -1
- package/dist/transformers/tailwindcss.d.mts.map +0 -1
- package/dist/transformers/tailwindcss.mjs.map +0 -1
- package/dist/transformers/urlQuery.d.mts +0 -24
- package/dist/transformers/urlQuery.d.mts.map +0 -1
- package/dist/transformers/urlQuery.mjs +0 -65
- package/dist/transformers/urlQuery.mjs.map +0 -1
- package/dist/types/config.d.mts.map +0 -1
- package/dist/types/config.mjs +0 -1
- package/dist/types/index.d.mts +0 -2
- package/dist/types/index.mjs +0 -1
- package/dist/utils/ast/index.d.mts +0 -4
- package/dist/utils/ast/index.mjs +0 -5
- package/dist/utils/ast/parser.d.mts.map +0 -1
- package/dist/utils/ast/parser.mjs.map +0 -1
- package/dist/utils/ast/serializer.d.mts.map +0 -1
- package/dist/utils/ast/serializer.mjs +0 -37
- package/dist/utils/ast/serializer.mjs.map +0 -1
- package/dist/utils/ast/walker.d.mts.map +0 -1
- package/dist/utils/ast/walker.mjs.map +0 -1
- package/dist/utils/detect.d.mts.map +0 -1
- package/dist/utils/detect.mjs.map +0 -1
- package/dist/utils/url.d.mts.map +0 -1
- package/dist/utils/url.mjs.map +0 -1
- package/node_modules/@clack/core/dist/index.mjs.map +0 -1
- package/node_modules/@clack/prompts/dist/index.mjs.map +0 -1
- package/node_modules/fast-wrap-ansi/lib/main.js.map +0 -1
- package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
- package/node_modules/tinyexec/dist/LICENSES.txt +0 -83
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwindcss.js","names":[],"sources":["../../src/transformers/tailwindcss.ts"],"sourcesContent":["import { resolve, dirname, relative } from 'pathe'\nimport type { ChildNode, Element } from 'domhandler'\nimport { walk } from '../utils/ast/index.ts'\nimport { decodeStyleEntities } from '../utils/decodeStyleEntities.ts'\nimport { compileTailwindCss } from '../utils/compileTailwindCss.ts'\nimport type { MaizzleConfig } from '../types/config.ts'\n\n/**\n * Check if CSS content uses Tailwind features that require source scanning.\n *\n * Only CSS that imports Tailwind (or @maizzle/tailwindcss) needs @source\n * directives. Plain CSS without Tailwind imports doesn't need scanning\n * and would pass through @source directives unconsumed.\n */\nfunction usesTailwind(css: string): boolean {\n return /((@import|@reference)\\s+[\"'](tailwindcss|@maizzle\\/tailwindcss)|@tailwind\\s)/.test(css)\n}\n\n/**\n * Build @source directives for Tailwind CSS scanning.\n *\n * Configures two types of sources:\n * 1. Exclusions for output dir and user-configured paths\n * 2. Inline source with all class attribute values from the rendered DOM,\n * capturing classes from all components (built-in + user), dynamic\n * expressions, and the template itself — Tailwind's scanner handles\n * the actual class extraction from these raw values\n */\nfunction buildSourceDirectives(dom: ChildNode[], config: MaizzleConfig, fromDir: string): string {\n const directives: string[] = []\n\n // Exclude output dir and user-configured paths\n const excludePaths = [\n resolve(config.output?.path ?? 'dist'),\n ...(config.css?.exclude ?? []).map(p => resolve(p)),\n ]\n\n for (const p of excludePaths) {\n directives.push(`@source not \"${relative(fromDir, resolve(p))}\";`)\n }\n\n /**\n * Inline source: collect all class attribute values from the rendered DOM.\n * After Vue SSR, the DOM contains every class from every component\n * (built-in framework components, user components, dynamic\n * bindings). We pass these raw values to Tailwind's\n * scanner via @source inline().\n */\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 directives.push(`@source inline(\"${classes.join(' ')}\");`)\n }\n\n return directives.join('\\n')\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 * Configures Tailwind sources to scan:\n * - Rendered class attributes (via `@source inline`) for all classes from all components\n * - User project files (via Tailwind's auto-detection from base/from path)\n *\n * User `@source` and `@source not directives` in style tags are preserved.\n * Source directives are only added to style tags that import Tailwind.\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 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 /**\n * `raw` opts out of compilation entirely (marker is consumed here).\n * `embed`/`data-embed` only signal \"preserve tag after inlining\"\n * — they still need to go through compile so Tailwind/@apply\n * resolves.\n */\n if ('raw' in attrs) {\n delete el.attribs.raw\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 styleTags.push({ node: el, cssContent: decodeStyleEntities(rawContent) })\n })\n\n if (!styleTags.length) return dom\n\n const fromPath = filePath ?? resolve(process.cwd(), 'template.vue')\n const fromDir = dirname(fromPath)\n\n // Only compute source directives if at least one style tag uses Tailwind\n const hasTailwindStyles = styleTags.some(({ cssContent }) => usesTailwind(cssContent))\n const sourceDirectives = hasTailwindStyles\n ? buildSourceDirectives(dom, config, fromDir)\n : ''\n\n for (let i = 0; i < styleTags.length; i++) {\n const { node, cssContent } = styleTags[i]\n\n /**\n * Only add source directives to style tags that import Tailwind —\n * plain CSS doesn't need them and @tailwindcss/postcss would\n * leave the directives unconsumed in the output.\n */\n const fullCss = usesTailwind(cssContent)\n ? `${cssContent}\\n${sourceDirectives}`\n : cssContent\n\n try {\n const optimized = await compileTailwindCss(fullCss, config, `${fromPath}?style=${i}`)\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 /**\n * If CSS processing fails, still replace with decoded content\n * so HTML entities don't break the CSS.\n */\n node.children = [{\n type: 'text',\n data: cssContent,\n parent: node,\n } as any]\n }\n }\n\n return dom\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAS,aAAa,KAAsB;CAC1C,OAAO,+EAA+E,KAAK,GAAG;AAChG;;;;;;;;;;;AAYA,SAAS,sBAAsB,KAAkB,QAAuB,SAAyB;CAC/F,MAAM,aAAuB,CAAC;CAG9B,MAAM,eAAe,CACnB,QAAQ,OAAO,QAAQ,QAAQ,MAAM,GACrC,IAAI,OAAO,KAAK,WAAW,CAAC,EAAA,CAAG,KAAI,MAAK,QAAQ,CAAC,CAAC,CACpD;CAEA,KAAK,MAAM,KAAK,cACd,WAAW,KAAK,gBAAgB,SAAS,SAAS,QAAQ,CAAC,CAAC,EAAE,GAAG;;;;;;;;CAUnE,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,MAAM;EACf,MAAM,MAAO,EAAc,SAAS;EACpC,IAAI,KAAK,QAAQ,KAAK,GAAG;CAC3B,CAAC;CAED,IAAI,QAAQ,QACV,WAAW,KAAK,mBAAmB,QAAQ,KAAK,GAAG,EAAE,IAAI;CAG3D,OAAO,WAAW,KAAK,IAAI;AAC7B;;;;;;;;;;;;;;;;;AAkBA,eAAsB,YAAY,KAAkB,QAAuB,UAAyC;CAClH,MAAM,YAAqD,CAAC;CAE5D,KAAK,MAAM,SAAS;EAClB,IAAK,KAAiB,SAAS,SAAS;EAExC,MAAM,KAAK;;;;;;;EASX,IAAI,SARU,GAAG,SAQG;GAClB,OAAO,GAAG,QAAQ;GAClB;EACF;EAGA,MAAM,aAAa,GAAG,SACnB,QAAO,UAAS,MAAM,SAAS,MAAM,CAAC,CACtC,KAAI,UAAU,MAAc,IAAI,CAAC,CACjC,KAAK,EAAE;EAEV,IAAI,CAAC,WAAW,KAAK,GAAG;EAExB,UAAU,KAAK;GAAE,MAAM;GAAI,YAAY,oBAAoB,UAAU;EAAE,CAAC;CAC1E,CAAC;CAED,IAAI,CAAC,UAAU,QAAQ,OAAO;CAE9B,MAAM,WAAW,YAAY,QAAQ,QAAQ,IAAI,GAAG,cAAc;CAClE,MAAM,UAAU,QAAQ,QAAQ;CAIhC,MAAM,mBADoB,UAAU,MAAM,EAAE,iBAAiB,aAAa,UAAU,CAC3C,IACrC,sBAAsB,KAAK,QAAQ,OAAO,IAC1C;CAEJ,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;EACzC,MAAM,EAAE,MAAM,eAAe,UAAU;;;;;;EAOvC,MAAM,UAAU,aAAa,UAAU,IACnC,GAAG,WAAW,IAAI,qBAClB;EAEJ,IAAI;GAIF,KAAK,WAAW,CAAC;IACf,MAAM;IACN,MAAM,MALgB,mBAAmB,SAAS,QAAQ,GAAG,SAAS,SAAS,GAAG;IAMlF,QAAQ;GACV,CAAQ;EACV,QAAQ;;;;;GAKN,KAAK,WAAW,CAAC;IACf,MAAM;IACN,MAAM;IACN,QAAQ;GACV,CAAQ;EACV;CACF;CAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { UrlQueryOptions } from "../types/config.js";
|
|
2
|
+
import { ChildNode } from "domhandler";
|
|
3
|
+
|
|
4
|
+
//#region src/transformers/urlQuery.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Append query parameters to URLs found in matching attributes/elements.
|
|
7
|
+
*
|
|
8
|
+
* @param html HTML string to transform.
|
|
9
|
+
* @param params Query parameters to append (e.g. `{ utm_source: 'newsletter' }`).
|
|
10
|
+
* @param options Behaviour overrides — `tags` (CSS selectors, default `['a']`),
|
|
11
|
+
* `attributes` (default `['src', 'href', 'poster', 'srcset', 'background']`),
|
|
12
|
+
* `strict` (default `true`, only rewrites absolute URLs),
|
|
13
|
+
* `qs` (forwarded to `query-string`, default `{ encode: false }`).
|
|
14
|
+
* @returns The transformed HTML string.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import { urlQuery } from '@maizzle/framework'
|
|
18
|
+
*
|
|
19
|
+
* const out = urlQuery(
|
|
20
|
+
* '<a href="https://example.com">x</a>',
|
|
21
|
+
* { utm_source: 'newsletter' },
|
|
22
|
+
* )
|
|
23
|
+
*
|
|
24
|
+
* // Restrict to specific tags / attributes:
|
|
25
|
+
* urlQuery(html, { ref: 'email' }, { tags: ['a', 'img'], attributes: ['href', 'src'] })
|
|
26
|
+
*/
|
|
27
|
+
declare function urlQuery(html: string, params?: Record<string, unknown>, options?: UrlQueryOptions): string;
|
|
28
|
+
/**
|
|
29
|
+
* DOM-form of {@link urlQuery} used by the internal transformer pipeline.
|
|
30
|
+
* Takes a parsed DOM, returns a parsed DOM — avoids redundant
|
|
31
|
+
* serialize/parse round-trips when chained with other transformers.
|
|
32
|
+
*/
|
|
33
|
+
declare function urlQueryDom(dom: ChildNode[], params?: Record<string, unknown>, options?: UrlQueryOptions): ChildNode[];
|
|
34
|
+
//#endregion
|
|
35
|
+
export { urlQuery, urlQueryDom };
|
|
36
|
+
//# sourceMappingURL=urlQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlQuery.d.ts","names":[],"sources":["../../src/transformers/urlQuery.ts"],"mappings":";;;;;;AAiDA;;;;;;;;;;AAG+B;AAU/B;;;;;;;;;iBAbgB,QAAA,CACd,IAAA,UACA,MAAA,GAAQ,MAAA,mBACR,OAAA,GAAS,eAAoB;;;;;;iBAUf,WAAA,CACd,GAAA,EAAK,SAAA,IACL,MAAA,GAAQ,MAAA,mBACR,OAAA,GAAS,eAAA,GACR,SAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { parse } from "../utils/ast/parser.js";
|
|
2
|
+
import { serialize } from "../utils/ast/serializer.js";
|
|
3
|
+
import "../utils/ast/index.js";
|
|
4
|
+
import { isAbsoluteUrl } from "../utils/url.js";
|
|
5
|
+
import queryString from "query-string";
|
|
6
|
+
import { selectAll } from "css-select";
|
|
7
|
+
//#region src/transformers/urlQuery.ts
|
|
8
|
+
const DEFAULT_ATTRIBUTES = [
|
|
9
|
+
"src",
|
|
10
|
+
"href",
|
|
11
|
+
"poster",
|
|
12
|
+
"srcset",
|
|
13
|
+
"background"
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_TAGS = ["a"];
|
|
16
|
+
/**
|
|
17
|
+
* Append query parameters to a URL string using query-string.
|
|
18
|
+
*/
|
|
19
|
+
function appendParams(url, params, qsOptions, strict) {
|
|
20
|
+
if (strict && !isAbsoluteUrl(url)) return url;
|
|
21
|
+
return queryString.stringifyUrl({
|
|
22
|
+
url,
|
|
23
|
+
query: params
|
|
24
|
+
}, qsOptions);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Append query parameters to URLs found in matching attributes/elements.
|
|
28
|
+
*
|
|
29
|
+
* @param html HTML string to transform.
|
|
30
|
+
* @param params Query parameters to append (e.g. `{ utm_source: 'newsletter' }`).
|
|
31
|
+
* @param options Behaviour overrides — `tags` (CSS selectors, default `['a']`),
|
|
32
|
+
* `attributes` (default `['src', 'href', 'poster', 'srcset', 'background']`),
|
|
33
|
+
* `strict` (default `true`, only rewrites absolute URLs),
|
|
34
|
+
* `qs` (forwarded to `query-string`, default `{ encode: false }`).
|
|
35
|
+
* @returns The transformed HTML string.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* import { urlQuery } from '@maizzle/framework'
|
|
39
|
+
*
|
|
40
|
+
* const out = urlQuery(
|
|
41
|
+
* '<a href="https://example.com">x</a>',
|
|
42
|
+
* { utm_source: 'newsletter' },
|
|
43
|
+
* )
|
|
44
|
+
*
|
|
45
|
+
* // Restrict to specific tags / attributes:
|
|
46
|
+
* urlQuery(html, { ref: 'email' }, { tags: ['a', 'img'], attributes: ['href', 'src'] })
|
|
47
|
+
*/
|
|
48
|
+
function urlQuery(html, params = {}, options = {}) {
|
|
49
|
+
return serialize(urlQueryDom(parse(html), params, options));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* DOM-form of {@link urlQuery} used by the internal transformer pipeline.
|
|
53
|
+
* Takes a parsed DOM, returns a parsed DOM — avoids redundant
|
|
54
|
+
* serialize/parse round-trips when chained with other transformers.
|
|
55
|
+
*/
|
|
56
|
+
function urlQueryDom(dom, params = {}, options = {}) {
|
|
57
|
+
if (!params || Object.keys(params).length === 0) return dom;
|
|
58
|
+
const tags = options.tags ?? DEFAULT_TAGS;
|
|
59
|
+
const attributes = options.attributes ?? DEFAULT_ATTRIBUTES;
|
|
60
|
+
const strict = options.strict ?? true;
|
|
61
|
+
const qsOptions = {
|
|
62
|
+
encode: false,
|
|
63
|
+
...options.qs ?? {}
|
|
64
|
+
};
|
|
65
|
+
const elements = selectAll(tags.join(", "), dom);
|
|
66
|
+
for (const el of elements) for (const attr of attributes) {
|
|
67
|
+
const value = el.attribs[attr];
|
|
68
|
+
if (!value) continue;
|
|
69
|
+
const updated = appendParams(value, params, qsOptions, strict);
|
|
70
|
+
if (updated !== value) el.attribs[attr] = updated;
|
|
71
|
+
}
|
|
72
|
+
return dom;
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { urlQuery, urlQueryDom };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=urlQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlQuery.js","names":[],"sources":["../../src/transformers/urlQuery.ts"],"sourcesContent":["import queryString from 'query-string'\nimport { selectAll } from 'css-select'\nimport type { ChildNode, Element } from 'domhandler'\nimport { parse, serialize } from '../utils/ast/index.ts'\nimport { isAbsoluteUrl } from '../utils/url.ts'\nimport type { UrlQueryOptions } from '../types/config.ts'\n\nconst DEFAULT_ATTRIBUTES = ['src', 'href', 'poster', 'srcset', 'background']\nconst DEFAULT_TAGS = ['a']\n\n/**\n * Append query parameters to a URL string using query-string.\n */\nfunction appendParams(\n url: string,\n params: Record<string, unknown>,\n qsOptions: queryString.StringifyOptions,\n strict: boolean,\n): string {\n if (strict && !isAbsoluteUrl(url)) return url\n\n return queryString.stringifyUrl(\n { url, query: params as queryString.StringifiableRecord },\n qsOptions,\n )\n}\n\n/**\n * Append query parameters to URLs found in matching attributes/elements.\n *\n * @param html HTML string to transform.\n * @param params Query parameters to append (e.g. `{ utm_source: 'newsletter' }`).\n * @param options Behaviour overrides — `tags` (CSS selectors, default `['a']`),\n * `attributes` (default `['src', 'href', 'poster', 'srcset', 'background']`),\n * `strict` (default `true`, only rewrites absolute URLs),\n * `qs` (forwarded to `query-string`, default `{ encode: false }`).\n * @returns The transformed HTML string.\n *\n * @example\n * import { urlQuery } from '@maizzle/framework'\n *\n * const out = urlQuery(\n * '<a href=\"https://example.com\">x</a>',\n * { utm_source: 'newsletter' },\n * )\n *\n * // Restrict to specific tags / attributes:\n * urlQuery(html, { ref: 'email' }, { tags: ['a', 'img'], attributes: ['href', 'src'] })\n */\nexport function urlQuery(\n html: string,\n params: Record<string, unknown> = {},\n options: UrlQueryOptions = {},\n): string {\n return serialize(urlQueryDom(parse(html), params, options))\n}\n\n/**\n * DOM-form of {@link urlQuery} 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 urlQueryDom(\n dom: ChildNode[],\n params: Record<string, unknown> = {},\n options: UrlQueryOptions = {},\n): ChildNode[] {\n if (!params || Object.keys(params).length === 0) return dom\n\n const tags = options.tags ?? DEFAULT_TAGS\n const attributes = options.attributes ?? DEFAULT_ATTRIBUTES\n const strict = options.strict ?? true\n const qsOptions: queryString.StringifyOptions = { encode: false, ...((options.qs ?? {}) as queryString.StringifyOptions) }\n\n // Use css-select to find all elements matching any of the tag selectors\n const selector = tags.join(', ')\n const elements = selectAll(selector, dom) as Element[]\n\n for (const el of elements) {\n for (const attr of attributes) {\n const value = el.attribs[attr]\n if (!value) continue\n\n const updated = appendParams(value, params, qsOptions, strict)\n if (updated !== value) {\n el.attribs[attr] = updated\n }\n }\n }\n\n return dom\n}\n"],"mappings":";;;;;;;AAOA,MAAM,qBAAqB;CAAC;CAAO;CAAQ;CAAU;CAAU;AAAY;AAC3E,MAAM,eAAe,CAAC,GAAG;;;;AAKzB,SAAS,aACP,KACA,QACA,WACA,QACQ;CACR,IAAI,UAAU,CAAC,cAAc,GAAG,GAAG,OAAO;CAE1C,OAAO,YAAY,aACjB;EAAE;EAAK,OAAO;CAA0C,GACxD,SACF;AACF;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,SACd,MACA,SAAkC,CAAC,GACnC,UAA2B,CAAC,GACpB;CACR,OAAO,UAAU,YAAY,MAAM,IAAI,GAAG,QAAQ,OAAO,CAAC;AAC5D;;;;;;AAOA,SAAgB,YACd,KACA,SAAkC,CAAC,GACnC,UAA2B,CAAC,GACf;CACb,IAAI,CAAC,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,WAAW,GAAG,OAAO;CAExD,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,YAA0C;EAAE,QAAQ;EAAO,GAAK,QAAQ,MAAM,CAAC;CAAoC;CAIzH,MAAM,WAAW,UADA,KAAK,KAAK,IACO,GAAG,GAAG;CAExC,KAAK,MAAM,MAAM,UACf,KAAK,MAAM,QAAQ,YAAY;EAC7B,MAAM,QAAQ,GAAG,QAAQ;EACzB,IAAI,CAAC,OAAO;EAEZ,MAAM,UAAU,aAAa,OAAO,QAAQ,WAAW,MAAM;EAC7D,IAAI,YAAY,OACd,GAAG,QAAQ,QAAQ;CAEvB;CAGF,OAAO;AACT"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { RemoveValue } from "../plugins/postcss/removeDeclarations.
|
|
1
|
+
import { RemoveValue } from "../plugins/postcss/removeDeclarations.js";
|
|
2
|
+
import { TemplateInfo } from "../events/index.js";
|
|
2
3
|
import { Directive, Plugin } from "vue";
|
|
3
|
-
import { Options } from "juice";
|
|
4
|
-
import * as oxfmt from "oxfmt";
|
|
5
4
|
import { InlineConfig } from "vite";
|
|
6
|
-
import
|
|
7
|
-
import { Options
|
|
5
|
+
import juice from "juice";
|
|
6
|
+
import { Options } from "unplugin-vue-markdown/types";
|
|
8
7
|
|
|
9
8
|
//#region src/types/config.d.ts
|
|
9
|
+
type JuiceOptions = NonNullable<Parameters<typeof juice>[1]>;
|
|
10
10
|
interface UrlQueryOptions {
|
|
11
11
|
/**
|
|
12
12
|
* CSS selectors for elements to process.
|
|
@@ -95,7 +95,7 @@ interface CssConfig {
|
|
|
95
95
|
* }
|
|
96
96
|
* }
|
|
97
97
|
*/
|
|
98
|
-
inline?: boolean |
|
|
98
|
+
inline?: boolean | JuiceOptions & {
|
|
99
99
|
/**
|
|
100
100
|
* Convert HTML attributes like `width`, `height`, `bgcolor`, and `valign`
|
|
101
101
|
* to inline CSS styles. Set to `true` for all, or pass an array of attribute names.
|
|
@@ -186,25 +186,13 @@ interface CssConfig {
|
|
|
186
186
|
sort?: 'mobile-first' | 'desktop-first' | ((a: string, b: string) => number);
|
|
187
187
|
};
|
|
188
188
|
/**
|
|
189
|
-
*
|
|
189
|
+
* Strip units from zero values in inlined styles.
|
|
190
190
|
*
|
|
191
|
-
* For example, `
|
|
191
|
+
* For example, `padding: 0px 16px` becomes `padding: 0 16px`.
|
|
192
192
|
*
|
|
193
193
|
* @default true
|
|
194
194
|
*/
|
|
195
195
|
preferUnitless?: boolean;
|
|
196
|
-
/**
|
|
197
|
-
* Resolve CSS `calc()` expressions to static values where possible.
|
|
198
|
-
*
|
|
199
|
-
* @default true
|
|
200
|
-
*/
|
|
201
|
-
resolveCalc?: boolean;
|
|
202
|
-
/**
|
|
203
|
-
* Resolve CSS custom properties (`var()`) to their computed values.
|
|
204
|
-
*
|
|
205
|
-
* @default true
|
|
206
|
-
*/
|
|
207
|
-
resolveProps?: boolean;
|
|
208
196
|
/**
|
|
209
197
|
* Replace unsafe CSS class names with email-safe equivalents.
|
|
210
198
|
*
|
|
@@ -241,7 +229,11 @@ interface CssConfig {
|
|
|
241
229
|
*/
|
|
242
230
|
removeDeclarations?: Record<string, RemoveValue>;
|
|
243
231
|
/**
|
|
244
|
-
*
|
|
232
|
+
* Glob patterns or paths excluded from Tailwind's `@source` scanner.
|
|
233
|
+
*
|
|
234
|
+
* Tailwind won't generate utilities for classes used in these files.
|
|
235
|
+
* Useful for ignoring AMP variants or any templates whose classes
|
|
236
|
+
* shouldn't end up in the output CSS.
|
|
245
237
|
*
|
|
246
238
|
* @example
|
|
247
239
|
* css: {
|
|
@@ -254,6 +246,10 @@ interface AttributesConfig {
|
|
|
254
246
|
/**
|
|
255
247
|
* Add attributes to HTML elements.
|
|
256
248
|
*
|
|
249
|
+
* Set the whole map to `false` to disable auto-add. Set a selector
|
|
250
|
+
* entry to `false` to skip that selector. Set an individual attribute
|
|
251
|
+
* to `false` to skip just that attribute while keeping the rest.
|
|
252
|
+
*
|
|
257
253
|
* @example
|
|
258
254
|
* html: {
|
|
259
255
|
* attributes: {
|
|
@@ -264,14 +260,25 @@ interface AttributesConfig {
|
|
|
264
260
|
* }
|
|
265
261
|
* }
|
|
266
262
|
*/
|
|
267
|
-
add?: false | Record<string, Record<string, string | boolean | number>>;
|
|
263
|
+
add?: false | Record<string, false | Record<string, false | string | boolean | number>>;
|
|
268
264
|
/**
|
|
269
|
-
* Remove attributes from HTML elements
|
|
265
|
+
* Remove attributes from HTML elements.
|
|
266
|
+
*
|
|
267
|
+
* Empty `style` and `class` attributes are always stripped, regardless
|
|
268
|
+
* of config. Entries added here are appended to those defaults.
|
|
269
|
+
*
|
|
270
|
+
* - String — remove when the attribute's value is empty.
|
|
271
|
+
* - `{ name, value: 'literal' }` — remove when the value matches exactly.
|
|
272
|
+
* - `{ name, value: /regex/ }` — remove when the value matches the regex.
|
|
270
273
|
*
|
|
271
274
|
* @example
|
|
272
275
|
* html: {
|
|
273
276
|
* attributes: {
|
|
274
|
-
* remove: [
|
|
277
|
+
* remove: [
|
|
278
|
+
* 'data-foo',
|
|
279
|
+
* { name: 'role', value: 'none' },
|
|
280
|
+
* { name: 'class', value: /^js-/ },
|
|
281
|
+
* ],
|
|
275
282
|
* }
|
|
276
283
|
* }
|
|
277
284
|
*/
|
|
@@ -281,6 +288,28 @@ interface AttributesConfig {
|
|
|
281
288
|
}>;
|
|
282
289
|
}
|
|
283
290
|
type EntitiesConfig = boolean | Record<string, string>;
|
|
291
|
+
/**
|
|
292
|
+
* caniemail.com client family slugs. Maintained manually from
|
|
293
|
+
* https://www.caniemail.com/api/data.json — update this list when caniemail
|
|
294
|
+
* adds new clients.
|
|
295
|
+
*/
|
|
296
|
+
type CaniemailClient = 'gmail' | 'outlook' | 'yahoo' | 'apple-mail' | 'aol' | 'thunderbird' | 'microsoft' | 'samsung-email' | 'sfr' | 'orange' | 'protonmail' | 'hey' | 'mail-ru' | 'fastmail' | 'laposte' | 't-online-de' | 'free-fr' | 'gmx' | 'web-de' | 'ionos-1and1' | 'rainloop' | 'wp-pl';
|
|
297
|
+
interface ChecksConfig {
|
|
298
|
+
/**
|
|
299
|
+
* Client families to check against. Defaults to the four majors:
|
|
300
|
+
* Gmail, Apple Mail, Outlook, Yahoo. Pass `'all'` to check every client
|
|
301
|
+
* in the caniemail dataset.
|
|
302
|
+
*/
|
|
303
|
+
clients?: CaniemailClient[] | 'all';
|
|
304
|
+
/**
|
|
305
|
+
* Filter which severities are reported. Omit to show everything.
|
|
306
|
+
*
|
|
307
|
+
* - `'error'` — only errors (unsupported features, hard lint errors)
|
|
308
|
+
* - `'warning'` — only warnings (partial / unknown support, lint warnings)
|
|
309
|
+
* - `'lint'` — only lint items (both severities, no compat items)
|
|
310
|
+
*/
|
|
311
|
+
level?: 'error' | 'warning' | 'lint';
|
|
312
|
+
}
|
|
284
313
|
interface PostcssConfig {
|
|
285
314
|
/**
|
|
286
315
|
* Selector prefixes to strip from compiled CSS.
|
|
@@ -321,32 +350,129 @@ interface HtmlConfig {
|
|
|
321
350
|
*
|
|
322
351
|
* Set to `true` to enable with defaults, or pass options.
|
|
323
352
|
*/
|
|
324
|
-
format?: boolean | oxfmt.FormatOptions;
|
|
353
|
+
format?: boolean | import('oxfmt').FormatOptions;
|
|
325
354
|
/**
|
|
326
355
|
* Minify the HTML output.
|
|
327
356
|
*
|
|
328
|
-
* Set to `true` to enable with defaults, or pass
|
|
357
|
+
* Set to `true` to enable with defaults, or pass `html-crush`
|
|
358
|
+
* options to customize.
|
|
359
|
+
*
|
|
360
|
+
* @see https://codsen.com/os/html-crush
|
|
329
361
|
*/
|
|
330
|
-
minify?: boolean |
|
|
362
|
+
minify?: boolean | Partial<import('html-crush').Opts>;
|
|
331
363
|
}
|
|
332
364
|
type FilterFunction = (str: string, value: string) => string;
|
|
333
365
|
type FiltersConfig = false | Record<string, FilterFunction>;
|
|
334
|
-
interface MarkdownConfig extends Options
|
|
366
|
+
interface MarkdownConfig extends Options {
|
|
335
367
|
/**
|
|
336
368
|
* The shiki theme to use for syntax highlighting in Markdown fenced code blocks.
|
|
337
369
|
*
|
|
338
370
|
* @default 'github-light'
|
|
339
371
|
*/
|
|
340
|
-
shikiTheme?: shiki.BundledTheme;
|
|
372
|
+
shikiTheme?: import('shiki').BundledTheme;
|
|
341
373
|
}
|
|
342
374
|
interface VueConfig {
|
|
343
|
-
/**
|
|
344
|
-
|
|
375
|
+
/**
|
|
376
|
+
* Vue plugins to register on the app instance before rendering.
|
|
377
|
+
*
|
|
378
|
+
* Pass a factory (`() => Plugin[]`) for stateful plugins like vue-i18n
|
|
379
|
+
* or Pinia to get a fresh instance per render — otherwise state leaks
|
|
380
|
+
* across templates (e.g. one template setting `locale.value = 'fr'`
|
|
381
|
+
* affects the next render).
|
|
382
|
+
*/
|
|
383
|
+
plugins?: Plugin[] | (() => Plugin[]);
|
|
345
384
|
/** Custom Vue directives to register globally. */
|
|
346
385
|
directives?: Record<string, Directive>;
|
|
347
386
|
/** Properties added to `app.config.globalProperties`, available in all templates. */
|
|
348
387
|
globalProperties?: Record<string, unknown>;
|
|
349
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Per-transformer toggle map for `useTransformers`.
|
|
391
|
+
*
|
|
392
|
+
* - `false` skips the listed transformer.
|
|
393
|
+
* - `true` force-enables it for this run (only meaningful for boolean-driven
|
|
394
|
+
* transformers: inlineCss, purgeCss, prettify, minify, shorthandCss,
|
|
395
|
+
* sixHex, safeSelectors, entities). Layers on the matching
|
|
396
|
+
* `css.*` / `html.*` config slice.
|
|
397
|
+
* - missing keys keep their default behavior.
|
|
398
|
+
*
|
|
399
|
+
* Data-driven transformers (filters, baseURL, urlQuery, addAttributes,
|
|
400
|
+
* removeAttributes, replaceStrings, attributeToStyle) require actual
|
|
401
|
+
* config values — a bare `true` is a no-op for them.
|
|
402
|
+
*
|
|
403
|
+
* Transformers without a toggle (Tailwind, MSO placeholder resolution,
|
|
404
|
+
* column width math, link inlining) always run; they're driven by markup
|
|
405
|
+
* or framework state, not user opt-in.
|
|
406
|
+
*/
|
|
407
|
+
interface TransformerToggles {
|
|
408
|
+
safeSelectors?: boolean;
|
|
409
|
+
attributeToStyle?: boolean;
|
|
410
|
+
inlineCss?: boolean;
|
|
411
|
+
removeAttributes?: boolean;
|
|
412
|
+
shorthandCss?: boolean;
|
|
413
|
+
sixHex?: boolean;
|
|
414
|
+
addAttributes?: boolean;
|
|
415
|
+
filters?: boolean;
|
|
416
|
+
baseURL?: boolean;
|
|
417
|
+
urlQuery?: boolean;
|
|
418
|
+
purgeCss?: boolean;
|
|
419
|
+
entities?: boolean;
|
|
420
|
+
replaceStrings?: boolean;
|
|
421
|
+
prettify?: boolean;
|
|
422
|
+
minify?: boolean;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Plaintext generation options.
|
|
426
|
+
*
|
|
427
|
+
* Control where plaintext files are written, what extension they use,
|
|
428
|
+
* and the options forwarded to `string-strip-html`.
|
|
429
|
+
*/
|
|
430
|
+
interface PlaintextConfig {
|
|
431
|
+
/**
|
|
432
|
+
* Output directory for plaintext files. When omitted, files are written
|
|
433
|
+
* next to their HTML counterpart in `build.output.path`.
|
|
434
|
+
*/
|
|
435
|
+
destination?: string;
|
|
436
|
+
/**
|
|
437
|
+
* File extension for plaintext files (without the leading dot).
|
|
438
|
+
*
|
|
439
|
+
* @default 'txt'
|
|
440
|
+
*/
|
|
441
|
+
extension?: string;
|
|
442
|
+
/**
|
|
443
|
+
* Options forwarded to `string-strip-html`.
|
|
444
|
+
*
|
|
445
|
+
* @see https://codsen.com/os/string-strip-html
|
|
446
|
+
*/
|
|
447
|
+
options?: Partial<import('string-strip-html').Opts>;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Source directory entry for component auto-import.
|
|
451
|
+
*
|
|
452
|
+
* String → folder name becomes a namespace prefix automatically
|
|
453
|
+
* (e.g. `widgets/Button.vue` → `<WidgetsButton />`).
|
|
454
|
+
*
|
|
455
|
+
* Object → custom prefix overrides the folder-derived name. With
|
|
456
|
+
* `pathPrefix: false`, intermediate subfolders are dropped from the
|
|
457
|
+
* resolved name (useful for icon sets organized by category).
|
|
458
|
+
*/
|
|
459
|
+
type ComponentSource = string | {
|
|
460
|
+
/** Directory to scan, resolved relative to `cwd`. */path: string;
|
|
461
|
+
/**
|
|
462
|
+
* Custom prefix prepended to every resolved component name.
|
|
463
|
+
* Empty string disables the auto folder-name prefix.
|
|
464
|
+
*/
|
|
465
|
+
prefix?: string;
|
|
466
|
+
/**
|
|
467
|
+
* Include intermediate subfolder names in the resolved component
|
|
468
|
+
* name. Defaults to `true`.
|
|
469
|
+
*
|
|
470
|
+
* @example
|
|
471
|
+
* // pathPrefix: true → icons/social/twitter.vue → <IconSocialTwitter />
|
|
472
|
+
* // pathPrefix: false → icons/social/twitter.vue → <IconTwitter />
|
|
473
|
+
*/
|
|
474
|
+
pathPrefix?: boolean;
|
|
475
|
+
};
|
|
350
476
|
interface MaizzleConfig {
|
|
351
477
|
/**
|
|
352
478
|
* Root directory for the Maizzle email project.
|
|
@@ -393,6 +519,27 @@ interface MaizzleConfig {
|
|
|
393
519
|
*/
|
|
394
520
|
extension?: string;
|
|
395
521
|
};
|
|
522
|
+
/**
|
|
523
|
+
* Build templates in parallel across worker threads.
|
|
524
|
+
*
|
|
525
|
+
* - omitted (default): parallel when there are more than 50 templates
|
|
526
|
+
* - `true`: always parallel, using min(CPU count − 1, 8) workers
|
|
527
|
+
* - `false`: always sequential
|
|
528
|
+
* - `{ workers, threshold }`: parallel when the template count exceeds
|
|
529
|
+
* `threshold` (default 50), using `workers` threads (default
|
|
530
|
+
* min(CPU count − 1, 8)). Set `threshold: 0` to always parallelize.
|
|
531
|
+
*
|
|
532
|
+
* Note: more workers is not faster — each runs a full renderer, so ~8 is the
|
|
533
|
+
* sweet spot and over-provisioning slows builds down.
|
|
534
|
+
*
|
|
535
|
+
* Only applies to file-based configs (the CLI / a config path); an inline
|
|
536
|
+
* config object always builds sequentially. SFC-registered `afterBuild`
|
|
537
|
+
* handlers can't run in a worker — use the config `afterBuild` hook instead.
|
|
538
|
+
*/
|
|
539
|
+
parallel?: boolean | {
|
|
540
|
+
workers?: number;
|
|
541
|
+
threshold?: number;
|
|
542
|
+
};
|
|
396
543
|
/** Static file copying configuration. */
|
|
397
544
|
static?: {
|
|
398
545
|
/**
|
|
@@ -416,12 +563,20 @@ interface MaizzleConfig {
|
|
|
416
563
|
* Resolved relative to `cwd` (not `root`), so paths outside the
|
|
417
564
|
* email root directory work as expected.
|
|
418
565
|
*
|
|
566
|
+
* String entries use the folder name as a namespace prefix
|
|
567
|
+
* automatically (e.g. `widgets/Button.vue` → `<WidgetsButton />`).
|
|
568
|
+
* Object entries override that with a custom prefix.
|
|
569
|
+
*
|
|
419
570
|
* @example
|
|
420
571
|
* components: {
|
|
421
|
-
* source: [
|
|
572
|
+
* source: [
|
|
573
|
+
* 'resources/js/components/email',
|
|
574
|
+
* { path: 'src/widgets', prefix: 'W' },
|
|
575
|
+
* { path: 'src/icons', prefix: 'Icon', pathPrefix: false },
|
|
576
|
+
* ],
|
|
422
577
|
* }
|
|
423
578
|
*/
|
|
424
|
-
source?:
|
|
579
|
+
source?: ComponentSource | ComponentSource[];
|
|
425
580
|
};
|
|
426
581
|
/** Dev server configuration. */
|
|
427
582
|
server?: {
|
|
@@ -467,25 +622,52 @@ interface MaizzleConfig {
|
|
|
467
622
|
subject?: string; /** Nodemailer transport options (SMTP, SES, etc.). Omit to use Ethereal. */
|
|
468
623
|
transport?: Record<string, unknown>;
|
|
469
624
|
};
|
|
625
|
+
/**
|
|
626
|
+
* Configure or disable the Checks tab in the dev UI.
|
|
627
|
+
*
|
|
628
|
+
* Set to `false` to disable checks entirely (the tab is hidden).
|
|
629
|
+
*
|
|
630
|
+
* @example
|
|
631
|
+
* server: {
|
|
632
|
+
* checks: {
|
|
633
|
+
* clients: ['gmail', 'outlook', 'apple-mail'],
|
|
634
|
+
* level: 'error',
|
|
635
|
+
* }
|
|
636
|
+
* }
|
|
637
|
+
*/
|
|
638
|
+
checks?: false | ChecksConfig;
|
|
470
639
|
};
|
|
471
640
|
/** Tailwind CSS and email CSS optimization settings. */
|
|
472
641
|
css?: CssConfig;
|
|
473
642
|
/**
|
|
474
643
|
* Generate a plaintext version of the email.
|
|
475
644
|
*
|
|
476
|
-
* Set to `true` to enable, or pass
|
|
645
|
+
* Set to `true` to enable with defaults, or pass an object to configure
|
|
646
|
+
* destination directory, file extension, and `string-strip-html` options.
|
|
477
647
|
*
|
|
478
648
|
* @default false
|
|
649
|
+
* @example
|
|
650
|
+
* plaintext: {
|
|
651
|
+
* destination: 'build_production/plaintext',
|
|
652
|
+
* extension: 'txt',
|
|
653
|
+
* options: { ignoreTags: ['br'] },
|
|
654
|
+
* }
|
|
479
655
|
*/
|
|
480
|
-
plaintext?: boolean |
|
|
656
|
+
plaintext?: boolean | PlaintextConfig;
|
|
481
657
|
/** PostCSS processing options. */
|
|
482
658
|
postcss?: PostcssConfig;
|
|
483
659
|
/**
|
|
484
660
|
* Enable the transformer pipeline (CSS inlining, purging, shorthand, etc).
|
|
485
661
|
*
|
|
662
|
+
* Pass `false` to skip the entire pipeline. Pass an object to opt out of
|
|
663
|
+
* specific transformers while keeping the rest active — only keys set
|
|
664
|
+
* to `false` are skipped.
|
|
665
|
+
*
|
|
486
666
|
* @default true
|
|
667
|
+
* @example
|
|
668
|
+
* useTransformers: { inlineCss: false, minify: false }
|
|
487
669
|
*/
|
|
488
|
-
useTransformers?: boolean;
|
|
670
|
+
useTransformers?: boolean | TransformerToggles;
|
|
489
671
|
/**
|
|
490
672
|
* Replace strings in the final HTML output.
|
|
491
673
|
*
|
|
@@ -514,9 +696,10 @@ interface MaizzleConfig {
|
|
|
514
696
|
/**
|
|
515
697
|
* Vite configuration options passed to the internal Vite SSR server.
|
|
516
698
|
*
|
|
517
|
-
* Use this to add custom Vite plugins or other Vite options.
|
|
518
|
-
*
|
|
519
|
-
*
|
|
699
|
+
* Use this to add custom Vite plugins or other Vite options. The internal
|
|
700
|
+
* SSR server never loads a project `vite.config.{ts,js}` (it runs with
|
|
701
|
+
* `configFile: false`), so pass anything it needs here. These options are
|
|
702
|
+
* merged underneath Maizzle's required settings, which take precedence.
|
|
520
703
|
*
|
|
521
704
|
* @example
|
|
522
705
|
* vite: {
|
|
@@ -532,7 +715,9 @@ interface MaizzleConfig {
|
|
|
532
715
|
*
|
|
533
716
|
* @example
|
|
534
717
|
* vue: {
|
|
535
|
-
* plugins
|
|
718
|
+
* // Use a factory for stateful plugins (vue-i18n, Pinia, vue-router)
|
|
719
|
+
* // so each render gets a fresh instance.
|
|
720
|
+
* plugins: () => [createI18n({ locale: 'en', messages })],
|
|
536
721
|
* directives: { focus: vFocus },
|
|
537
722
|
* globalProperties: { $format: dateFormat },
|
|
538
723
|
* }
|
|
@@ -542,21 +727,21 @@ interface MaizzleConfig {
|
|
|
542
727
|
beforeCreate?: (params: {
|
|
543
728
|
config: MaizzleConfig;
|
|
544
729
|
}) => void | Promise<void>;
|
|
545
|
-
/** Called before each template is rendered. Return a string to replace
|
|
730
|
+
/** Called before each template is rendered. Return a string to replace `template.source`. */
|
|
546
731
|
beforeRender?: (params: {
|
|
547
732
|
config: MaizzleConfig;
|
|
548
|
-
template:
|
|
733
|
+
template: TemplateInfo;
|
|
549
734
|
}) => string | void | Promise<string | void>;
|
|
550
735
|
/** Called after each template is rendered but before transformers run. Return a string to replace the output HTML. */
|
|
551
736
|
afterRender?: (params: {
|
|
552
737
|
config: MaizzleConfig;
|
|
553
|
-
template:
|
|
738
|
+
template: TemplateInfo;
|
|
554
739
|
html: string;
|
|
555
740
|
}) => string | void | Promise<string | void>;
|
|
556
741
|
/** Called after transformers have run on each template. Return a string to replace the output HTML. */
|
|
557
742
|
afterTransform?: (params: {
|
|
558
743
|
config: MaizzleConfig;
|
|
559
|
-
template:
|
|
744
|
+
template: TemplateInfo;
|
|
560
745
|
html: string;
|
|
561
746
|
}) => string | void | Promise<string | void>;
|
|
562
747
|
/** Called after all templates have been built. */
|
|
@@ -567,5 +752,5 @@ interface MaizzleConfig {
|
|
|
567
752
|
[key: string]: any;
|
|
568
753
|
}
|
|
569
754
|
//#endregion
|
|
570
|
-
export { AttributesConfig, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, MarkdownConfig, PostcssConfig, UrlConfig, UrlQuery, UrlQueryOptions, VueConfig };
|
|
571
|
-
//# sourceMappingURL=config.d.
|
|
755
|
+
export { AttributesConfig, CaniemailClient, ChecksConfig, ComponentSource, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, MarkdownConfig, PlaintextConfig, PostcssConfig, TransformerToggles, UrlConfig, UrlQuery, UrlQueryOptions, VueConfig };
|
|
756
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","names":[],"sources":["../../src/types/config.ts"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { AttributesConfig, CaniemailClient, ChecksConfig, ComponentSource, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, MarkdownConfig, PlaintextConfig, PostcssConfig, TransformerToggles, UrlConfig, UrlQuery, UrlQueryOptions } from "./config.js";
|
|
2
|
+
export type { AttributesConfig, CaniemailClient, ChecksConfig, ComponentSource, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, MarkdownConfig, PlaintextConfig, PostcssConfig, TransformerToggles, UrlConfig, UrlQuery, UrlQueryOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","names":[],"sources":["../../../src/utils/ast/parser.ts"],"mappings":";;;iBAIgB,KAAA,CAAM,IAAA,UAAc,OAAA,GAAS,iBAAA,GAAyB,SAAS"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Parser } from "htmlparser2";
|
|
2
2
|
import { DomHandler } from "domhandler";
|
|
3
|
-
|
|
4
3
|
//#region src/utils/ast/parser.ts
|
|
5
4
|
function parse(html, options = {}) {
|
|
6
5
|
const handler = new DomHandler();
|
|
@@ -9,7 +8,7 @@ function parse(html, options = {}) {
|
|
|
9
8
|
parser.end();
|
|
10
9
|
return handler.dom;
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
//#endregion
|
|
14
12
|
export { parse };
|
|
15
|
-
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","names":[],"sources":["../../../src/utils/ast/parser.ts"],"sourcesContent":["import { Parser } from 'htmlparser2'\nimport { DomHandler } from 'domhandler'\nimport type { ChildNode, DomHandlerOptions } from 'domhandler'\n\nexport function parse(html: string, options: DomHandlerOptions = {}): ChildNode[] {\n const handler = new DomHandler()\n const parser = new Parser(handler, options)\n parser.write(html)\n parser.end()\n return handler.dom\n}\n"],"mappings":";;;AAIA,SAAgB,MAAM,MAAc,UAA6B,CAAC,GAAgB;CAChF,MAAM,UAAU,IAAI,WAAW;CAC/B,MAAM,SAAS,IAAI,OAAO,SAAS,OAAO;CAC1C,OAAO,MAAM,IAAI;CACjB,OAAO,IAAI;CACX,OAAO,QAAQ;AACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","names":[],"sources":["../../../src/utils/ast/serializer.ts"],"mappings":";;;;iBA0CgB,SAAA,CAAU,GAAA,EAAK,SAAA,IAAa,OAAA,GAAU,oBAAoB"}
|