@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.
- package/README.md +3 -3
- package/bin/maizzle.mjs +1 -1
- package/dist/build.d.ts +20 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/{build.mjs → build.js} +33 -19
- package/dist/build.js.map +1 -0
- package/dist/components/Body.vue +128 -0
- package/dist/components/Button.vue +148 -52
- package/dist/components/CodeBlock.vue +69 -0
- package/dist/components/CodeInline.vue +49 -0
- package/dist/components/Column.vue +108 -0
- package/dist/components/Container.vue +123 -0
- package/dist/components/Font.vue +96 -0
- package/dist/components/Head.vue +30 -0
- package/dist/components/Heading.vue +28 -0
- package/dist/components/Hr.vue +33 -0
- package/dist/components/Html.vue +137 -0
- package/dist/components/Img.vue +70 -0
- package/dist/components/Layout.vue +143 -0
- package/dist/components/Link.vue +26 -0
- package/dist/components/Markdown.vue +89 -0
- package/dist/components/MarkdownLayout.vue +39 -0
- package/dist/components/NotPlaintext.vue +14 -0
- package/dist/components/Outlook.vue +74 -11
- package/dist/components/OutlookBg.vue +241 -0
- package/dist/components/Overlap.vue +156 -0
- package/dist/components/Plaintext.vue +14 -0
- package/dist/components/Preheader.vue +15 -0
- package/dist/components/QrCode.vue +157 -0
- package/dist/components/Raw.vue +28 -0
- package/dist/components/Row.vue +184 -0
- package/dist/components/Section.vue +124 -0
- package/dist/components/Spacer.vue +70 -21
- package/dist/components/Tailwind.vue +43 -0
- package/dist/components/Text.vue +29 -0
- package/dist/components/utils.d.ts +28 -0
- package/dist/components/utils.d.ts.map +1 -0
- package/dist/components/utils.js +50 -0
- package/dist/components/utils.js.map +1 -0
- package/dist/components/utils.ts +51 -0
- package/dist/composables/{defineConfig.d.mts → defineConfig.d.ts} +2 -2
- package/dist/composables/defineConfig.d.ts.map +1 -0
- package/dist/composables/{defineConfig.mjs → defineConfig.js} +4 -5
- 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.mjs → renderContext.js} +2 -2
- 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.mts → useConfig.d.ts} +2 -2
- package/dist/composables/useConfig.d.ts.map +1 -0
- package/dist/composables/{useConfig.mjs → useConfig.js} +2 -3
- package/dist/composables/useConfig.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} +2 -2
- package/dist/composables/useEvent.d.ts.map +1 -0
- package/dist/composables/{useEvent.mjs → useEvent.js} +3 -4
- 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/{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 +24 -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.mts → index.d.ts} +4 -4
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/{index.mjs → index.js} +12 -10
- package/dist/config/index.js.map +1 -0
- package/dist/events/{index.d.mts → index.d.ts} +10 -4
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/{index.mjs → index.js} +21 -5
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +37 -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.js +57 -0
- 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 +144 -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.js +68 -0
- 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/{createRenderer.d.mts → createRenderer.d.ts} +15 -7
- package/dist/render/createRenderer.d.ts.map +1 -0
- package/dist/render/createRenderer.js +319 -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 +53 -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/plugins/codeBlockExtract.d.ts +14 -0
- package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
- package/dist/render/plugins/codeBlockExtract.js +34 -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} +4 -2
- package/dist/serve.d.ts.map +1 -0
- package/dist/{serve.mjs → serve.js} +203 -79
- 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 +911 -0
- package/dist/server/compatibility.js.map +1 -0
- package/dist/server/email.d.ts +17 -0
- package/dist/server/email.d.ts.map +1 -0
- package/dist/server/email.js +40 -0
- 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 +339 -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/App.vue +253 -77
- package/dist/server/ui/components/SidebarClose.vue +12 -0
- package/dist/server/ui/components/ui/checkbox/Checkbox.vue +35 -0
- package/dist/server/ui/components/ui/checkbox/index.ts +1 -0
- package/dist/server/ui/components/ui/command/Command.vue +5 -1
- package/dist/server/ui/components/ui/command/CommandDialog.vue +1 -1
- package/dist/server/ui/components/ui/command/CommandInput.vue +19 -1
- package/dist/server/ui/components/ui/command/CommandItem.vue +1 -1
- package/dist/server/ui/components/ui/command/CommandList.vue +1 -1
- package/dist/server/ui/components/ui/command/CommandShortcut.vue +1 -1
- package/dist/server/ui/components/ui/dialog/DialogOverlay.vue +9 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -1
- package/dist/server/ui/components/ui/input/Input.vue +1 -1
- package/dist/server/ui/components/ui/scroll-area/ScrollBar.vue +1 -1
- package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
- package/dist/server/ui/components/ui/sheet/SheetOverlay.vue +9 -1
- package/dist/server/ui/components/ui/sidebar/Sidebar.vue +8 -1
- package/dist/server/ui/components/ui/sidebar/SidebarProvider.vue +1 -1
- package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +5 -4
- package/dist/server/ui/components/ui/tags-input/TagsInput.vue +26 -0
- package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +17 -0
- package/dist/server/ui/components/ui/tags-input/TagsInputItem.vue +19 -0
- package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +22 -0
- package/dist/server/ui/components/ui/tags-input/TagsInputItemText.vue +17 -0
- package/dist/server/ui/components/ui/tags-input/index.ts +5 -0
- package/dist/server/ui/components/ui/toggle/index.ts +3 -3
- package/dist/server/ui/components/ui/toggle-group/ToggleGroup.vue +1 -1
- package/dist/server/ui/components/ui/toggle-group/ToggleGroupItem.vue +2 -2
- package/dist/server/ui/lib/emulated-dark-mode.ts +131 -0
- package/dist/server/ui/main.css +20 -20
- package/dist/server/ui/pages/Home.vue +12 -5
- package/dist/server/ui/pages/Preview.vue +716 -276
- 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.mts → addAttributes.d.ts} +2 -2
- package/dist/transformers/addAttributes.d.ts.map +1 -0
- package/dist/transformers/{addAttributes.mjs → addAttributes.js} +16 -13
- 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} +56 -30
- 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 +546 -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 +73 -0
- package/dist/transformers/entities.js.map +1 -0
- package/dist/transformers/filters/defaults.d.ts +6 -0
- package/dist/transformers/filters/defaults.d.ts.map +1 -0
- package/dist/transformers/filters/defaults.js +78 -0
- 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/{index.d.mts → index.d.ts} +14 -11
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +133 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/inlineCss.d.ts +84 -0
- package/dist/transformers/inlineCss.d.ts.map +1 -0
- package/dist/transformers/inlineCss.js +91 -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} +34 -10
- 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/msoPlaceholders.d.ts +28 -0
- package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
- package/dist/transformers/msoPlaceholders.js +88 -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 +181 -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 +70 -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/{safeClassNames.d.mts → safeClassNames.d.ts} +2 -2
- package/dist/transformers/safeClassNames.d.ts.map +1 -0
- package/dist/transformers/{safeClassNames.mjs → safeClassNames.js} +4 -5
- package/dist/transformers/safeClassNames.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 +61 -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 +92 -0
- package/dist/transformers/tailwindComponent.js.map +1 -0
- package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +8 -4
- package/dist/transformers/tailwindcss.d.ts.map +1 -0
- package/dist/transformers/tailwindcss.js +97 -0
- 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.ts +727 -0
- 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.ts +8 -0
- package/dist/utils/ast/serializer.d.ts.map +1 -0
- package/dist/utils/ast/serializer.js +36 -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/compileTailwindCss.d.ts +16 -0
- package/dist/utils/compileTailwindCss.d.ts.map +1 -0
- package/dist/utils/compileTailwindCss.js +54 -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/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.ts +5 -0
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/detect.js +10 -0
- 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/node_modules/@clack/core/CHANGELOG.md +8 -0
- package/node_modules/@clack/core/dist/index.d.mts +18 -4
- package/node_modules/@clack/core/dist/index.mjs +16 -10
- package/node_modules/@clack/core/dist/index.mjs.map +1 -1
- package/node_modules/@clack/core/package.json +5 -2
- package/node_modules/@clack/prompts/CHANGELOG.md +15 -0
- package/node_modules/@clack/prompts/README.md +107 -2
- package/node_modules/@clack/prompts/dist/index.d.mts +16 -11
- package/node_modules/@clack/prompts/dist/index.mjs +114 -107
- package/node_modules/@clack/prompts/dist/index.mjs.map +1 -1
- 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 -1
- package/node_modules/fast-wrap-ansi/lib/main.js.map +1 -1
- package/node_modules/fast-wrap-ansi/package.json +2 -2
- 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 +1 -1
- 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 +32 -52
- 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 +4 -3
- 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 +1 -1
- package/node_modules/tinyexec/dist/main.d.mts +6 -6
- package/node_modules/tinyexec/dist/main.mjs +126 -134
- package/node_modules/tinyexec/package.json +9 -9
- package/package.json +31 -21
- package/dist/build.d.mts +0 -19
- package/dist/build.d.mts.map +0 -1
- package/dist/build.mjs.map +0 -1
- package/dist/components/Divider.vue +0 -105
- package/dist/components/Vml.vue +0 -89
- 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.map +0 -1
- package/dist/composables/defineConfig.mjs.map +0 -1
- package/dist/composables/renderContext.d.mts +0 -19
- package/dist/composables/renderContext.d.mts.map +0 -1
- package/dist/composables/renderContext.mjs.map +0 -1
- package/dist/composables/useConfig.d.mts.map +0 -1
- 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/config/defaults.d.mts.map +0 -1
- package/dist/config/defaults.mjs.map +0 -1
- package/dist/config/index.d.mts.map +0 -1
- 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 -29
- package/dist/index.mjs +0 -29
- 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 +0 -41
- 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 +0 -35
- package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
- package/dist/render/createRenderer.d.mts.map +0 -1
- package/dist/render/createRenderer.mjs +0 -155
- 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 -44
- 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 -6
- package/dist/server/compatibility.d.mts.map +0 -1
- package/dist/server/compatibility.mjs +0 -83
- package/dist/server/compatibility.mjs.map +0 -1
- package/dist/server/linter.d.mts +0 -6
- package/dist/server/linter.d.mts.map +0 -1
- package/dist/server/linter.mjs +0 -200
- package/dist/server/linter.mjs.map +0 -1
- package/dist/server/ui/components/ui/resizable/ResizableHandle.vue +0 -30
- package/dist/server/ui/components/ui/resizable/ResizablePanel.vue +0 -21
- package/dist/server/ui/components/ui/resizable/ResizablePanelGroup.vue +0 -25
- package/dist/server/ui/components/ui/resizable/index.ts +0 -3
- 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 -38
- package/dist/transformers/entities.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 -73
- package/dist/transformers/index.mjs.map +0 -1
- package/dist/transformers/inlineCSS.d.mts +0 -30
- package/dist/transformers/inlineCSS.d.mts.map +0 -1
- package/dist/transformers/inlineCSS.mjs +0 -79
- 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 -66
- 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.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/tailwindcss.d.mts.map +0 -1
- package/dist/transformers/tailwindcss.mjs +0 -136
- 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 +0 -149
- 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 +0 -7
- package/dist/utils/ast/serializer.d.mts.map +0 -1
- package/dist/utils/ast/serializer.mjs +0 -13
- 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/url.d.mts.map +0 -1
- package/dist/utils/url.mjs.map +0 -1
- package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { computed, createStaticVNode } from 'vue'
|
|
3
|
+
import type { PropType } from 'vue'
|
|
4
|
+
import { normalizeToPixels } from './utils.ts'
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
name: 'OutlookBg',
|
|
8
|
+
props: {
|
|
9
|
+
/**
|
|
10
|
+
* Width of the VML rectangle.
|
|
11
|
+
*
|
|
12
|
+
* Accepts a number (treated as pixels) or a string with units.
|
|
13
|
+
*
|
|
14
|
+
* @default '600px'
|
|
15
|
+
*/
|
|
16
|
+
width: {
|
|
17
|
+
type: [String, Number],
|
|
18
|
+
default: '600px'
|
|
19
|
+
},
|
|
20
|
+
/**
|
|
21
|
+
* Height of the VML rectangle.
|
|
22
|
+
*
|
|
23
|
+
* Accepts a number (treated as pixels) or a string with units.
|
|
24
|
+
* When not set, the rectangle auto-sizes to fit its content.
|
|
25
|
+
*/
|
|
26
|
+
height: {
|
|
27
|
+
type: [String, Number],
|
|
28
|
+
default: null
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* VML fill type that controls how the background image is rendered.
|
|
32
|
+
*
|
|
33
|
+
* - `frame` — scale to fill the rectangle (default)
|
|
34
|
+
* - `tile` — repeat the image to fill the rectangle
|
|
35
|
+
* - `pattern` — tile at original size
|
|
36
|
+
* - `solid` — solid color fill, no image
|
|
37
|
+
* - `gradient` — linear gradient fill
|
|
38
|
+
* - `gradientradial` — radial gradient fill
|
|
39
|
+
*
|
|
40
|
+
* @default 'frame'
|
|
41
|
+
*/
|
|
42
|
+
type: {
|
|
43
|
+
type: String as PropType<'solid' | 'gradient' | 'gradientradial' | 'tile' | 'pattern' | 'frame'>,
|
|
44
|
+
default: 'frame'
|
|
45
|
+
},
|
|
46
|
+
/**
|
|
47
|
+
* Comma-separated dimensions for the fill image.
|
|
48
|
+
*
|
|
49
|
+
* Controls the rendered size of the background image.
|
|
50
|
+
*
|
|
51
|
+
* @example '300px,200px'
|
|
52
|
+
*/
|
|
53
|
+
sizes: {
|
|
54
|
+
type: String,
|
|
55
|
+
validator: (v: string) => /^[\d.]+(px|%|em|rem)?(,[\d.]+(px|%|em|rem)?)+$/.test(v.replace(/\s/g, ''))
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* Fill origin offset as comma-separated fractional values.
|
|
59
|
+
*
|
|
60
|
+
* Controls where the fill image anchors relative to the shape.
|
|
61
|
+
* Values are fractions of the shape's dimensions, where `0,0` is
|
|
62
|
+
* center and `-0.5,-0.5` is the top-left corner.
|
|
63
|
+
*
|
|
64
|
+
* Overridden by `backgroundPosition` if both are set.
|
|
65
|
+
*
|
|
66
|
+
* @example '0,0'
|
|
67
|
+
* @example '-0.5,-0.5'
|
|
68
|
+
*/
|
|
69
|
+
origin: {
|
|
70
|
+
type: String,
|
|
71
|
+
validator: (v: string) => /^-?[\d.]+(,-?[\d.]+)+$/.test(v.replace(/\s/g, ''))
|
|
72
|
+
},
|
|
73
|
+
/**
|
|
74
|
+
* Fill position offset as comma-separated fractional values.
|
|
75
|
+
*
|
|
76
|
+
* Controls where the fill image is positioned within the shape.
|
|
77
|
+
* Values are fractions of the shape's dimensions, where `0,0` is
|
|
78
|
+
* center and `0.5,0.5` is the bottom-right corner.
|
|
79
|
+
*
|
|
80
|
+
* Overridden by `backgroundPosition` if both are set.
|
|
81
|
+
*
|
|
82
|
+
* @example '0,0'
|
|
83
|
+
* @example '0.5,0.5'
|
|
84
|
+
*/
|
|
85
|
+
position: {
|
|
86
|
+
type: String,
|
|
87
|
+
validator: (v: string) => /^-?[\d.]+(,-?[\d.]+)+$/.test(v.replace(/\s/g, ''))
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Background image position as `vertical,horizontal`.
|
|
91
|
+
*
|
|
92
|
+
* First value is the vertical axis: `top`, `center`, or `bottom`.
|
|
93
|
+
* Second value is the horizontal axis: `left`, `center`, or `right`.
|
|
94
|
+
*
|
|
95
|
+
* Convenience prop that maps to VML `origin` and `position` attributes.
|
|
96
|
+
*
|
|
97
|
+
* @example 'top,left'
|
|
98
|
+
* @example 'center,center'
|
|
99
|
+
*/
|
|
100
|
+
backgroundPosition: {
|
|
101
|
+
type: String as PropType<
|
|
102
|
+
| 'top,left' | 'top,center' | 'top,right'
|
|
103
|
+
| 'center,left' | 'center,center' | 'center,right'
|
|
104
|
+
| 'bottom,left' | 'bottom,center' | 'bottom,right'
|
|
105
|
+
>,
|
|
106
|
+
validator: (v: string) => /^(top|center|bottom),(left|center|right)$/.test(v.replace(/\s/g, ''))
|
|
107
|
+
},
|
|
108
|
+
/**
|
|
109
|
+
* Aspect ratio constraint for the fill image.
|
|
110
|
+
*
|
|
111
|
+
* - `atleast` — image is at least as large as the shape
|
|
112
|
+
* - `atmost` — image is at most as large as the shape
|
|
113
|
+
*/
|
|
114
|
+
aspect: {
|
|
115
|
+
type: String as PropType<'atleast' | 'atmost'>,
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Fill color used for `solid` and `gradient` fill types.
|
|
119
|
+
*
|
|
120
|
+
* @example '#ffffff'
|
|
121
|
+
*/
|
|
122
|
+
color: String,
|
|
123
|
+
/**
|
|
124
|
+
* Text box inset (padding) as `top,right,bottom,left`.
|
|
125
|
+
*
|
|
126
|
+
* Controls the inner spacing of the `v:textbox` element.
|
|
127
|
+
*
|
|
128
|
+
* @default '0,0,0,0'
|
|
129
|
+
*/
|
|
130
|
+
inset: {
|
|
131
|
+
type: String,
|
|
132
|
+
default: '0,0,0,0'
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Whether the VML rectangle has a visible border.
|
|
136
|
+
*
|
|
137
|
+
* @default false
|
|
138
|
+
*/
|
|
139
|
+
stroke: {
|
|
140
|
+
type: [Boolean, String],
|
|
141
|
+
default: false
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* Border color for the VML rectangle.
|
|
145
|
+
*
|
|
146
|
+
* Setting this also enables `stroke` automatically.
|
|
147
|
+
*
|
|
148
|
+
* @example '#000000'
|
|
149
|
+
*/
|
|
150
|
+
strokecolor: String,
|
|
151
|
+
/**
|
|
152
|
+
* Whether the VML rectangle has a fill.
|
|
153
|
+
*
|
|
154
|
+
* @default true
|
|
155
|
+
*/
|
|
156
|
+
fill: {
|
|
157
|
+
type: [Boolean, String],
|
|
158
|
+
default: true
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* Background color of the VML rectangle.
|
|
162
|
+
*
|
|
163
|
+
* Used as a fallback when the background image cannot be loaded.
|
|
164
|
+
*
|
|
165
|
+
* @default 'none'
|
|
166
|
+
* @example '#3b82f6'
|
|
167
|
+
*/
|
|
168
|
+
fillcolor: {
|
|
169
|
+
type: String,
|
|
170
|
+
default: 'none'
|
|
171
|
+
},
|
|
172
|
+
/**
|
|
173
|
+
* URL of the background image.
|
|
174
|
+
*
|
|
175
|
+
* @default 'https://via.placeholder.com/600x400'
|
|
176
|
+
*/
|
|
177
|
+
src: {
|
|
178
|
+
type: String,
|
|
179
|
+
default: 'https://via.placeholder.com/600x400'
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
setup(props, { slots }) {
|
|
183
|
+
const backgroundPositionMap: Record<string, string> = {
|
|
184
|
+
'top,left': '-0.5,-0.5',
|
|
185
|
+
'top,center': '0,-0.5',
|
|
186
|
+
'top,right': '0.5,-0.5',
|
|
187
|
+
'center,left': '-0.5,0',
|
|
188
|
+
'center,center': '0,0',
|
|
189
|
+
'center,right': '0.5,0',
|
|
190
|
+
'bottom,left': '-0.5,0.5',
|
|
191
|
+
'bottom,center': '0,0.5',
|
|
192
|
+
'bottom,right': '0.5,0.5',
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const resolvedOrigin = computed(() => props.origin ?? (props.backgroundPosition ? backgroundPositionMap[props.backgroundPosition.replace(/\s/g, '')] : undefined))
|
|
196
|
+
const resolvedPosition = computed(() => props.position ?? (props.backgroundPosition ? backgroundPositionMap[props.backgroundPosition.replace(/\s/g, '')] : undefined))
|
|
197
|
+
|
|
198
|
+
const before = computed(() => {
|
|
199
|
+
const width = normalizeToPixels(props.width)
|
|
200
|
+
|
|
201
|
+
const toBool = (v: boolean | string) => v === true || v === 'true' ? 'true' : 'false'
|
|
202
|
+
|
|
203
|
+
const rectAttrs = [
|
|
204
|
+
`fill="${props.fillcolor ? 'true' : toBool(props.fill)}"`,
|
|
205
|
+
`stroke="${props.strokecolor ? 'true' : toBool(props.stroke)}"`,
|
|
206
|
+
`style="width: ${width};${props.height ? ` height: ${normalizeToPixels(props.height)};` : ''}"`,
|
|
207
|
+
props.strokecolor ? `strokecolor="${props.strokecolor}"` : '',
|
|
208
|
+
props.fillcolor ? `fillcolor="${props.fillcolor}"` : ''
|
|
209
|
+
].filter(Boolean).join(' ')
|
|
210
|
+
|
|
211
|
+
const fillAttrs = [
|
|
212
|
+
`type="${props.type}"`,
|
|
213
|
+
`src="${props.src}"`,
|
|
214
|
+
props.sizes ? `sizes="${props.sizes}"` : '',
|
|
215
|
+
props.aspect ? `aspect="${props.aspect}"` : '',
|
|
216
|
+
resolvedOrigin.value ? `origin="${resolvedOrigin.value}"` : '',
|
|
217
|
+
resolvedPosition.value ? `position="${resolvedPosition.value}"` : '',
|
|
218
|
+
props.color ? `color="${props.color}"` : ''
|
|
219
|
+
].filter(Boolean).join(' ')
|
|
220
|
+
|
|
221
|
+
return [
|
|
222
|
+
`<!--[if mso]>`,
|
|
223
|
+
`<v:rect xmlns:v="urn:schemas-microsoft-com:vml" ${rectAttrs}>`,
|
|
224
|
+
`<v:fill ${fillAttrs} />`,
|
|
225
|
+
`<v:textbox inset="${props.inset}" style="mso-fit-shape-to-text: true">`,
|
|
226
|
+
`<div><![endif]-->`
|
|
227
|
+
].join('')
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
const after = computed(() => {
|
|
231
|
+
return `<!--[if mso]></div></v:textbox></v:rect><![endif]-->`
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
return () => [
|
|
235
|
+
createStaticVNode(before.value, 1),
|
|
236
|
+
slots.default?.(),
|
|
237
|
+
createStaticVNode(after.value, 1)
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
</script>
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useAttrs, createStaticVNode } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
hasHeightInStyle,
|
|
5
|
+
hasHeightUtility,
|
|
6
|
+
hasWidthInStyle,
|
|
7
|
+
hasWidthUtility,
|
|
8
|
+
nextId,
|
|
9
|
+
normalizeToPixels,
|
|
10
|
+
outlookFallbackProp
|
|
11
|
+
} from './utils.ts'
|
|
12
|
+
import { useOutlookFallback } from '../composables/useOutlookFallback'
|
|
13
|
+
|
|
14
|
+
defineOptions({ inheritAttrs: false })
|
|
15
|
+
|
|
16
|
+
const attrs = useAttrs()
|
|
17
|
+
|
|
18
|
+
const props = defineProps({
|
|
19
|
+
/**
|
|
20
|
+
* Max height of the background (default slot) content.
|
|
21
|
+
*
|
|
22
|
+
* Applied as `max-height` on the background div and as `height`
|
|
23
|
+
* on the VML rectangle. When not set, the height is taken from
|
|
24
|
+
* a Tailwind utility (e.g. `h-50`, `max-h-[200px]`) or inline
|
|
25
|
+
* `height`/`max-height` style on the component, after CSS inlining.
|
|
26
|
+
*/
|
|
27
|
+
height: {
|
|
28
|
+
type: [String, Number],
|
|
29
|
+
default: null
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Width of the overlay table and VML rectangle.
|
|
33
|
+
*
|
|
34
|
+
* When not set, derived from a width utility class or inline
|
|
35
|
+
* style on the component itself, otherwise from the nearest
|
|
36
|
+
* sized ancestor (`Container`, `Section`, outer `Column`).
|
|
37
|
+
* Falls back to `100%` when no source is found.
|
|
38
|
+
*/
|
|
39
|
+
width: {
|
|
40
|
+
type: [String, Number],
|
|
41
|
+
default: null
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Height of the VML rectangle in Outlook.
|
|
45
|
+
*
|
|
46
|
+
* Defaults to the resolved `height`. Use this to fine-tune the
|
|
47
|
+
* overlay height specifically for Outlook rendering.
|
|
48
|
+
*/
|
|
49
|
+
msoHeight: {
|
|
50
|
+
type: [String, Number],
|
|
51
|
+
default: null
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* VML textbox inset for Outlook positioning.
|
|
55
|
+
*
|
|
56
|
+
* Controls the offset of the overlay content as `top,right,bottom,left`.
|
|
57
|
+
* Use negative values to shift content upward into the background area.
|
|
58
|
+
*
|
|
59
|
+
* @default '0,-60px,0,0'
|
|
60
|
+
*/
|
|
61
|
+
msoInset: {
|
|
62
|
+
type: String,
|
|
63
|
+
default: '0,-60px,0,0'
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* Toggle Outlook (MSO) and VML fallback markup for this
|
|
67
|
+
* component and all descendants.
|
|
68
|
+
*
|
|
69
|
+
* When `false`, skips MSO ghost tables, VML shapes,
|
|
70
|
+
* `xmlns:v`/`xmlns:o` attributes, and mso-specific CSS
|
|
71
|
+
* in all built-in components.
|
|
72
|
+
*
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
75
|
+
outlookFallback: outlookFallbackProp,
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
const outlookFallback = useOutlookFallback(props.outlookFallback)
|
|
79
|
+
|
|
80
|
+
const userStyle = computed(() => {
|
|
81
|
+
const s = attrs.style
|
|
82
|
+
if (!s) return ''
|
|
83
|
+
return typeof s === 'object'
|
|
84
|
+
? Object.entries(s).map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${v}`).join('; ')
|
|
85
|
+
: String(s)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
const userClass = computed(() => (attrs.class as string) ?? '')
|
|
89
|
+
|
|
90
|
+
const userHasWidth = computed(() =>
|
|
91
|
+
hasWidthUtility(userClass.value) || hasWidthInStyle(userStyle.value)
|
|
92
|
+
)
|
|
93
|
+
const userHasHeight = computed(() =>
|
|
94
|
+
hasHeightUtility(userClass.value) || hasHeightInStyle(userStyle.value)
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
const useWidthMarker = props.width == null
|
|
98
|
+
const useHeightMarker = props.height == null && props.msoHeight == null
|
|
99
|
+
const id = (useWidthMarker || useHeightMarker) ? nextId('o') : null
|
|
100
|
+
|
|
101
|
+
const widthValue = computed(() =>
|
|
102
|
+
useWidthMarker ? `__MAIZZLE_COLW_${id}__` : normalizeToPixels(props.width)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
const heightValue = computed(() => {
|
|
106
|
+
if (props.msoHeight != null) return normalizeToPixels(props.msoHeight)
|
|
107
|
+
if (props.height != null) return normalizeToPixels(props.height)
|
|
108
|
+
return `__MAIZZLE_OH_${id}__`
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
const backgroundStyles = computed(() => {
|
|
112
|
+
const parts: string[] = []
|
|
113
|
+
if (props.height != null) parts.push(`max-height: ${normalizeToPixels(props.height)}`)
|
|
114
|
+
parts.push('margin: 0 auto', 'text-align: center')
|
|
115
|
+
if (userStyle.value) parts.push(userStyle.value)
|
|
116
|
+
return parts.join('; ') + ';'
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
const tdStyle = computed(() =>
|
|
120
|
+
`width: ${widthValue.value}; max-width: 100%; vertical-align: top;`
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
const vmlOpen = computed(() =>
|
|
124
|
+
`<!--[if mso]><v:rect xmlns:v="urn:schemas-microsoft-com:vml" stroked="f" filled="f" style="width: ${widthValue.value}; height: ${heightValue.value};"><v:textbox inset="${props.msoInset}"><![endif]-->`
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
const restAttrs = computed(() => {
|
|
128
|
+
const { style: _, ...rest } = attrs
|
|
129
|
+
return rest
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
const VmlBefore = () => createStaticVNode(vmlOpen.value, 1)
|
|
133
|
+
const VmlAfter = () => createStaticVNode('<!--[if mso]></v:textbox></v:rect><![endif]-->', 1)
|
|
134
|
+
</script>
|
|
135
|
+
|
|
136
|
+
<template>
|
|
137
|
+
<div
|
|
138
|
+
v-bind="restAttrs"
|
|
139
|
+
:style="backgroundStyles"
|
|
140
|
+
:data-maizzle-cw-id="useWidthMarker ? id : null"
|
|
141
|
+
:data-maizzle-cw-count="useWidthMarker ? 1 : null"
|
|
142
|
+
:data-maizzle-cw-self="useWidthMarker && userHasWidth ? '' : null"
|
|
143
|
+
:data-maizzle-oh-id="useHeightMarker && userHasHeight ? id : null"
|
|
144
|
+
>
|
|
145
|
+
<slot />
|
|
146
|
+
</div>
|
|
147
|
+
<table style="max-height: 0; position: relative; opacity: 0.999;">
|
|
148
|
+
<tr>
|
|
149
|
+
<td :style="tdStyle">
|
|
150
|
+
<VmlBefore v-if="outlookFallback" />
|
|
151
|
+
<slot name="overlay" />
|
|
152
|
+
<VmlAfter v-if="outlookFallback" />
|
|
153
|
+
</td>
|
|
154
|
+
</tr>
|
|
155
|
+
</table>
|
|
156
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps({
|
|
3
|
+
/** Number of ` ͏` filler sequences to render after the preview text. */
|
|
4
|
+
spaces: {
|
|
5
|
+
type: Number,
|
|
6
|
+
default: 150
|
|
7
|
+
}
|
|
8
|
+
})
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Teleport to="body:start">
|
|
13
|
+
<div style="display: none"><slot /><template v-for="i in spaces" :key="i"> ͏ </template> </div>
|
|
14
|
+
</Teleport>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createStaticVNode, type PropType } from 'vue'
|
|
3
|
+
import { twMerge } from 'tailwind-merge'
|
|
4
|
+
import { encode } from 'uqr'
|
|
5
|
+
|
|
6
|
+
type Ecc = 'L' | 'M' | 'Q' | 'H'
|
|
7
|
+
|
|
8
|
+
const escapeAttr = (v: string) =>
|
|
9
|
+
v
|
|
10
|
+
.replace(/&/g, '&')
|
|
11
|
+
.replace(/</g, '<')
|
|
12
|
+
.replace(/>/g, '>')
|
|
13
|
+
.replace(/"/g, '"')
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Parse a Tailwind sizing token's pixel equivalent.
|
|
17
|
+
*
|
|
18
|
+
* Assumes the default v4 spacing scale (1 unit = 0.25rem),
|
|
19
|
+
* which resolves to 4px at the standard 16px root font.
|
|
20
|
+
* Arbitrary values accept `px` and `rem`; other units
|
|
21
|
+
* fall through to the caller's default.
|
|
22
|
+
*/
|
|
23
|
+
function tokenToPx(token: string): number {
|
|
24
|
+
const seg = token.split(':').at(-1) ?? ''
|
|
25
|
+
const m = seg.match(/^(?:size|w|h)-(.+)$/)
|
|
26
|
+
if (!m) return 0
|
|
27
|
+
const v = m[1]
|
|
28
|
+
if (v.startsWith('[') && v.endsWith(']')) {
|
|
29
|
+
const um = v.slice(1, -1).match(/^([\d.]+)(px|rem)?$/)
|
|
30
|
+
if (!um) return 0
|
|
31
|
+
const n = Number.parseFloat(um[1])
|
|
32
|
+
return um[2] === 'rem' ? n * 16 : n
|
|
33
|
+
}
|
|
34
|
+
if (/^\d+(?:\.\d+)?$/.test(v)) return Number.parseFloat(v) * 4
|
|
35
|
+
return 0
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Partition a class string into two buckets:
|
|
40
|
+
*
|
|
41
|
+
* - `sizing` — width/height/size utilities used for cell px math.
|
|
42
|
+
* - `neutral` — everything else; lands on the table verbatim.
|
|
43
|
+
*/
|
|
44
|
+
function partition(cls: string): { neutral: string[]; sizing: string[] } {
|
|
45
|
+
const neutral: string[] = []
|
|
46
|
+
const sizing: string[] = []
|
|
47
|
+
for (const t of cls.split(/\s+/).filter(Boolean)) {
|
|
48
|
+
const last = t.split(':').at(-1) ?? ''
|
|
49
|
+
if (/^(?:size|w|h|min-w|min-h|max-w|max-h)-/.test(last)) sizing.push(t)
|
|
50
|
+
else neutral.push(t)
|
|
51
|
+
}
|
|
52
|
+
return { neutral, sizing }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default {
|
|
56
|
+
name: 'QrCode',
|
|
57
|
+
inheritAttrs: false,
|
|
58
|
+
props: {
|
|
59
|
+
/** Data to encode (URL or arbitrary text). */
|
|
60
|
+
value: {
|
|
61
|
+
type: String,
|
|
62
|
+
required: true,
|
|
63
|
+
},
|
|
64
|
+
/**
|
|
65
|
+
* Error correction level: redundancy that keeps the code
|
|
66
|
+
* scannable when partially obscured (e.g. a logo overlay),
|
|
67
|
+
* at the cost of a larger matrix.
|
|
68
|
+
*
|
|
69
|
+
* - `L` ~7% recovery
|
|
70
|
+
* - `M` ~15% recovery (default, fine for on-screen display)
|
|
71
|
+
* - `Q` ~25% recovery
|
|
72
|
+
* - `H` ~30% recovery
|
|
73
|
+
*/
|
|
74
|
+
ecc: {
|
|
75
|
+
type: String as PropType<Ecc>,
|
|
76
|
+
default: 'M',
|
|
77
|
+
validator: (v: string) => ['L', 'M', 'Q', 'H'].includes(v),
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Width of the light "quiet zone" around the code, in modules.
|
|
81
|
+
* Spec recommends ≥ 4; 1 is plenty for on-screen scans.
|
|
82
|
+
*/
|
|
83
|
+
border: {
|
|
84
|
+
type: Number,
|
|
85
|
+
default: 1,
|
|
86
|
+
},
|
|
87
|
+
/**
|
|
88
|
+
* Accessible label exposed via `aria-label` on the table.
|
|
89
|
+
*/
|
|
90
|
+
alt: {
|
|
91
|
+
type: String,
|
|
92
|
+
default: '',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
setup(props, { attrs }) {
|
|
96
|
+
const userClass = String(attrs.class ?? '')
|
|
97
|
+
const { neutral, sizing } = partition(userClass)
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Effective pixel size from the user's sizing token, else
|
|
101
|
+
* 120px (= `size-30` on the default v4 spacing scale).
|
|
102
|
+
*/
|
|
103
|
+
const sizingToken = sizing[0]
|
|
104
|
+
const effectivePx = sizingToken ? (tokenToPx(sizingToken) || 120) : 120
|
|
105
|
+
|
|
106
|
+
const result = encode(props.value, {
|
|
107
|
+
ecc: props.ecc,
|
|
108
|
+
border: props.border,
|
|
109
|
+
boostEcc: true,
|
|
110
|
+
})
|
|
111
|
+
const matrix = result.data
|
|
112
|
+
const dim = matrix.length
|
|
113
|
+
const cellPx = Math.max(1, Math.floor(effectivePx / dim))
|
|
114
|
+
const totalPx = cellPx * dim
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Table base classes:
|
|
118
|
+
*
|
|
119
|
+
* - `size-[Npx]` matches the outer to cell math (no stripe).
|
|
120
|
+
* - `[&_td]:*` sizes each cell and zeroes its font-size.
|
|
121
|
+
* - `bg-*` paints the table; light cells stay transparent.
|
|
122
|
+
* - `qr:*` paints dark cells via the registered variant.
|
|
123
|
+
*
|
|
124
|
+
* Defaults and user tokens share each form, so `twMerge`
|
|
125
|
+
* resolves overrides cleanly.
|
|
126
|
+
*/
|
|
127
|
+
const baseTable = [
|
|
128
|
+
`size-[${totalPx}px]`,
|
|
129
|
+
`[&_td]:w-[${cellPx}px]`,
|
|
130
|
+
`[&_td]:h-[${cellPx}px]`,
|
|
131
|
+
'[&_td]:text-[0px]',
|
|
132
|
+
'bg-white',
|
|
133
|
+
'dark:bg-gray-950',
|
|
134
|
+
'qr:bg-gray-950',
|
|
135
|
+
'dark:qr:bg-white',
|
|
136
|
+
]
|
|
137
|
+
|
|
138
|
+
const merged = twMerge([...baseTable, ...neutral].join(' '))
|
|
139
|
+
|
|
140
|
+
let rows = ''
|
|
141
|
+
for (let y = 0; y < dim; y++) {
|
|
142
|
+
let cells = ''
|
|
143
|
+
const row = matrix[y]
|
|
144
|
+
for (let x = 0; x < dim; x++) {
|
|
145
|
+
cells += row[x] ? '<td class="qd"></td>' : '<td></td>'
|
|
146
|
+
}
|
|
147
|
+
rows += `<tr>${cells}</tr>`
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const altAttr = props.alt ? ` aria-label="${escapeAttr(props.alt)}"` : ''
|
|
151
|
+
const styleAttr = attrs.style ? ` style="${String(attrs.style)}"` : ''
|
|
152
|
+
const html = `<table class="${escapeAttr(merged)}" role="img"${altAttr} cellpadding="0" cellspacing="0" border="0"${styleAttr}>${rows}</table>`
|
|
153
|
+
|
|
154
|
+
return () => createStaticVNode(html, 1)
|
|
155
|
+
},
|
|
156
|
+
}
|
|
157
|
+
</script>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createStaticVNode } from 'vue'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
inheritAttrs: false,
|
|
6
|
+
props: {
|
|
7
|
+
/**
|
|
8
|
+
* Raw content to emit verbatim.
|
|
9
|
+
*
|
|
10
|
+
* Auto-populated from slot content by
|
|
11
|
+
* the `maizzle:raw-extract` Vite plugin
|
|
12
|
+
* before Vue compiles the template,
|
|
13
|
+
* so `{{ }}` and other Vue/ESP
|
|
14
|
+
* syntax pass through untouched.
|
|
15
|
+
*/
|
|
16
|
+
content: {
|
|
17
|
+
type: String,
|
|
18
|
+
default: '',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
setup(props) {
|
|
22
|
+
if (!props.content) {
|
|
23
|
+
return () => createStaticVNode('', 0)
|
|
24
|
+
}
|
|
25
|
+
return () => createStaticVNode(props.content, 1)
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
</script>
|