@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
package/dist/server/ui/App.vue
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { ref, computed, onMounted, onUnmounted, watch, watchEffect } from 'vue'
|
|
3
3
|
import { RouterLink, RouterView, useRoute, useRouter } from 'vue-router'
|
|
4
|
-
import { Monitor, CodeXml, Smartphone, ChevronDown, ArrowUp, ArrowDown, CornerDownLeft, Check,
|
|
4
|
+
import { Monitor, CodeXml, Smartphone, ChevronDown, ArrowUp, ArrowDown, CornerDownLeft, Check, Search, FileCode, FileText, Code, BookText, MailQuestion, Moon, Sun } from 'lucide-vue-next'
|
|
5
|
+
import SidebarClose from '@/components/SidebarClose.vue'
|
|
5
6
|
import logoUrl from '@/logo.svg'
|
|
6
7
|
import logoGradientUrl from '@/logo-gradient.svg'
|
|
7
8
|
import { Kbd } from '@/components/ui/kbd'
|
|
@@ -21,7 +22,9 @@ import {
|
|
|
21
22
|
CommandInput,
|
|
22
23
|
CommandItem,
|
|
23
24
|
CommandList,
|
|
25
|
+
CommandShortcut,
|
|
24
26
|
} from '@/components/ui/command'
|
|
27
|
+
import { useFilter } from 'reka-ui'
|
|
25
28
|
import {
|
|
26
29
|
Sidebar,
|
|
27
30
|
SidebarContent,
|
|
@@ -36,7 +39,6 @@ import {
|
|
|
36
39
|
SidebarMenuButton,
|
|
37
40
|
SidebarProvider,
|
|
38
41
|
SidebarTrigger,
|
|
39
|
-
SidebarInput,
|
|
40
42
|
} from '@/components/ui/sidebar'
|
|
41
43
|
|
|
42
44
|
|
|
@@ -54,7 +56,6 @@ watchEffect(() => {
|
|
|
54
56
|
})
|
|
55
57
|
|
|
56
58
|
const templates = ref<Template[]>([])
|
|
57
|
-
const search = ref('')
|
|
58
59
|
const loading = ref(true)
|
|
59
60
|
const viewMode = ref<'preview' | 'source'>('preview')
|
|
60
61
|
const sidebarOpen = ref(localStorage.getItem('maizzle:sidebar') !== 'closed')
|
|
@@ -76,8 +77,14 @@ const devicePresets: DevicePreset[] = [
|
|
|
76
77
|
]
|
|
77
78
|
|
|
78
79
|
const selectedDevice = ref<DevicePreset | null>(null)
|
|
80
|
+
const deviceMenuOpen = ref(false)
|
|
81
|
+
const darkMode = ref(false)
|
|
79
82
|
const panelWidth = ref(0)
|
|
80
83
|
const panelHeight = ref(0)
|
|
84
|
+
const iframeWidth = ref<number | null>(null)
|
|
85
|
+
const iframeHeight = ref<number | null>(null)
|
|
86
|
+
const maxIframeWidth = ref(0)
|
|
87
|
+
const maxIframeHeight = ref(0)
|
|
81
88
|
const isDragging = ref(false)
|
|
82
89
|
const isFullSize = ref(true)
|
|
83
90
|
const resetKey = ref(0)
|
|
@@ -87,6 +94,31 @@ function selectDevice(device: DevicePreset) {
|
|
|
87
94
|
viewMode.value = 'preview'
|
|
88
95
|
}
|
|
89
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Writable proxies for the toolbar's size-indicator inputs. Display falls back
|
|
99
|
+
* to the measured panel size when the iframe dimension is null (the axis
|
|
100
|
+
* hasn't been explicitly set yet — e.g. user only dragged one axis).
|
|
101
|
+
* Setter rejects non-finite/non-positive values and clamps to
|
|
102
|
+
* [200, maxIframeWidth] / [100, maxIframeHeight] so users
|
|
103
|
+
* can't push the drag handles off-screen via the input.
|
|
104
|
+
*/
|
|
105
|
+
const widthInput = computed<number>({
|
|
106
|
+
get: () => Math.round(iframeWidth.value ?? panelWidth.value),
|
|
107
|
+
set: (v) => {
|
|
108
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v <= 0) return
|
|
109
|
+
const max = maxIframeWidth.value || v
|
|
110
|
+
iframeWidth.value = Math.max(200, Math.min(max, Math.round(v)))
|
|
111
|
+
},
|
|
112
|
+
})
|
|
113
|
+
const heightInput = computed<number>({
|
|
114
|
+
get: () => Math.round(iframeHeight.value ?? panelHeight.value),
|
|
115
|
+
set: (v) => {
|
|
116
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v <= 0) return
|
|
117
|
+
const max = maxIframeHeight.value || v
|
|
118
|
+
iframeHeight.value = Math.max(100, Math.min(max, Math.round(v)))
|
|
119
|
+
},
|
|
120
|
+
})
|
|
121
|
+
|
|
90
122
|
watch(sidebarOpen, (open) => {
|
|
91
123
|
localStorage.setItem('maizzle:sidebar', open ? 'open' : 'closed')
|
|
92
124
|
})
|
|
@@ -104,14 +136,9 @@ if ((import.meta as any).hot) {
|
|
|
104
136
|
}
|
|
105
137
|
|
|
106
138
|
const grouped = computed(() => {
|
|
107
|
-
const filtered = templates.value.filter(t =>
|
|
108
|
-
t.name.toLowerCase().includes(search.value.toLowerCase())
|
|
109
|
-
|| t.path.toLowerCase().includes(search.value.toLowerCase())
|
|
110
|
-
)
|
|
111
|
-
|
|
112
139
|
const groups: Record<string, Template[]> = {}
|
|
113
140
|
|
|
114
|
-
for (const t of
|
|
141
|
+
for (const t of templates.value) {
|
|
115
142
|
const parts = t.path.split('/')
|
|
116
143
|
const dir = parts.length > 1 ? parts.slice(0, -1).join('/') : '.'
|
|
117
144
|
if (!groups[dir]) groups[dir] = []
|
|
@@ -131,7 +158,42 @@ const isPreviewRoute = computed(() => route.path !== '/')
|
|
|
131
158
|
|
|
132
159
|
// Command palette
|
|
133
160
|
const router = useRouter()
|
|
161
|
+
const isMac = typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent)
|
|
162
|
+
const modKey = isMac ? '⌘' : 'Ctrl'
|
|
134
163
|
const commandOpen = ref(false)
|
|
164
|
+
const commandSearch = ref('')
|
|
165
|
+
|
|
166
|
+
watch(commandOpen, (open) => {
|
|
167
|
+
if (!open) commandSearch.value = ''
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
async function copyHtml() {
|
|
172
|
+
commandOpen.value = false
|
|
173
|
+
const slug = route.params.template as string
|
|
174
|
+
if (!slug) return
|
|
175
|
+
const res = await fetch(`/__maizzle/render/${slug}`)
|
|
176
|
+
await navigator.clipboard.writeText(await res.text())
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async function copyPlaintext() {
|
|
180
|
+
commandOpen.value = false
|
|
181
|
+
const slug = route.params.template as string
|
|
182
|
+
if (!slug) return
|
|
183
|
+
const res = await fetch(`/__maizzle/plaintext/${slug}`)
|
|
184
|
+
await navigator.clipboard.writeText(await res.text())
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async function copySource() {
|
|
188
|
+
commandOpen.value = false
|
|
189
|
+
const slug = route.params.template as string
|
|
190
|
+
if (!slug) return
|
|
191
|
+
const res = await fetch(`/__maizzle/vue-source/${slug}`)
|
|
192
|
+
const html = await res.text()
|
|
193
|
+
const el = document.createElement('div')
|
|
194
|
+
el.innerHTML = html
|
|
195
|
+
await navigator.clipboard.writeText(el.textContent || '')
|
|
196
|
+
}
|
|
135
197
|
|
|
136
198
|
const commandGrouped = computed(() => {
|
|
137
199
|
const groups: Record<string, Template[]> = {}
|
|
@@ -146,6 +208,20 @@ const commandGrouped = computed(() => {
|
|
|
146
208
|
return groups
|
|
147
209
|
})
|
|
148
210
|
|
|
211
|
+
const { contains } = useFilter({ sensitivity: 'base' })
|
|
212
|
+
|
|
213
|
+
const filteredTemplatesCount = computed(() => {
|
|
214
|
+
const tokens = commandSearch.value.split(/\s+/).filter(Boolean)
|
|
215
|
+
if (tokens.length === 0) return 0
|
|
216
|
+
let count = 0
|
|
217
|
+
for (const t of templates.value) {
|
|
218
|
+
const haystack = `${getFileName(t.path)} ${t.path.split('/').join(' ')}`
|
|
219
|
+
if (tokens.every(token => contains(haystack, token))) count++
|
|
220
|
+
}
|
|
221
|
+
return count
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
|
|
149
225
|
function getFileName(path: string) {
|
|
150
226
|
return path.split('/').pop() || path
|
|
151
227
|
}
|
|
@@ -155,6 +231,11 @@ function onCommandSelect(href: string) {
|
|
|
155
231
|
router.push(href)
|
|
156
232
|
}
|
|
157
233
|
|
|
234
|
+
function openExternal(url: string) {
|
|
235
|
+
commandOpen.value = false
|
|
236
|
+
window.open(url, '_blank', 'noopener')
|
|
237
|
+
}
|
|
238
|
+
|
|
158
239
|
function onKeydown(e: KeyboardEvent) {
|
|
159
240
|
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
|
|
160
241
|
e.preventDefault()
|
|
@@ -162,15 +243,28 @@ function onKeydown(e: KeyboardEvent) {
|
|
|
162
243
|
return
|
|
163
244
|
}
|
|
164
245
|
|
|
165
|
-
if (
|
|
246
|
+
if (e.key === '/' && !isInputFocused()) {
|
|
166
247
|
e.preventDefault()
|
|
167
|
-
|
|
248
|
+
commandOpen.value = true
|
|
168
249
|
return
|
|
169
250
|
}
|
|
170
251
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
252
|
+
// Copy shortcuts (Cmd on Mac, Alt on Win/Linux)
|
|
253
|
+
if ((isMac ? e.metaKey : e.altKey) && !e.shiftKey && isPreviewRoute.value) {
|
|
254
|
+
switch (e.key.toLowerCase()) {
|
|
255
|
+
case 'c':
|
|
256
|
+
e.preventDefault()
|
|
257
|
+
copyHtml()
|
|
258
|
+
return
|
|
259
|
+
case 'p':
|
|
260
|
+
e.preventDefault()
|
|
261
|
+
copyPlaintext()
|
|
262
|
+
return
|
|
263
|
+
case 'u':
|
|
264
|
+
e.preventDefault()
|
|
265
|
+
copySource()
|
|
266
|
+
return
|
|
267
|
+
}
|
|
174
268
|
}
|
|
175
269
|
}
|
|
176
270
|
|
|
@@ -181,8 +275,23 @@ function isInputFocused() {
|
|
|
181
275
|
return tag === 'input' || tag === 'textarea' || (el as HTMLElement).isContentEditable
|
|
182
276
|
}
|
|
183
277
|
|
|
184
|
-
|
|
185
|
-
|
|
278
|
+
function onWindowBlur() {
|
|
279
|
+
deviceMenuOpen.value = false
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function toggleDarkMode() {
|
|
283
|
+
commandOpen.value = false
|
|
284
|
+
darkMode.value = !darkMode.value
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
onMounted(() => {
|
|
288
|
+
document.addEventListener('keydown', onKeydown)
|
|
289
|
+
window.addEventListener('blur', onWindowBlur)
|
|
290
|
+
})
|
|
291
|
+
onUnmounted(() => {
|
|
292
|
+
document.removeEventListener('keydown', onKeydown)
|
|
293
|
+
window.removeEventListener('blur', onWindowBlur)
|
|
294
|
+
})
|
|
186
295
|
</script>
|
|
187
296
|
|
|
188
297
|
<template>
|
|
@@ -193,27 +302,16 @@ onUnmounted(() => document.removeEventListener('keydown', onKeydown))
|
|
|
193
302
|
<img :src="logoUrl" alt="Maizzle" class="h-4 dark:hidden">
|
|
194
303
|
<img :src="logoGradientUrl" alt="Maizzle" class="hidden h-4 dark:block">
|
|
195
304
|
</RouterLink>
|
|
196
|
-
<
|
|
305
|
+
<button class="hidden md:inline-flex items-center gap-1.5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300" @click="commandOpen = true">
|
|
306
|
+
<Search class="size-3.5" />
|
|
307
|
+
<kbd class="flex items-center gap-0.5 text-[10px] font-sans">
|
|
308
|
+
<span>{{ modKey }}</span>
|
|
309
|
+
<span class="text-gray-300 dark:text-gray-600">K</span>
|
|
310
|
+
</kbd>
|
|
311
|
+
</button>
|
|
312
|
+
<SidebarClose />
|
|
197
313
|
</SidebarHeader>
|
|
198
314
|
|
|
199
|
-
<div class="px-3 pt-3 pb-1">
|
|
200
|
-
<div class="relative flex items-center">
|
|
201
|
-
<SidebarInput
|
|
202
|
-
v-model="search"
|
|
203
|
-
placeholder="Search emails..."
|
|
204
|
-
class="text-xs! pr-7"
|
|
205
|
-
@keydown.esc="search && (search = '')"
|
|
206
|
-
/>
|
|
207
|
-
<button
|
|
208
|
-
v-if="search"
|
|
209
|
-
class="absolute right-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"
|
|
210
|
-
@click="search = ''"
|
|
211
|
-
>
|
|
212
|
-
<X class="size-3.5" />
|
|
213
|
-
</button>
|
|
214
|
-
</div>
|
|
215
|
-
</div>
|
|
216
|
-
|
|
217
315
|
<SidebarContent>
|
|
218
316
|
<ScrollArea class="flex-1">
|
|
219
317
|
<SidebarGroup v-if="loading">
|
|
@@ -257,24 +355,17 @@ onUnmounted(() => document.removeEventListener('keydown', onKeydown))
|
|
|
257
355
|
<SidebarInset>
|
|
258
356
|
<!-- Header toolbar -->
|
|
259
357
|
<header class="grid h-12 grid-cols-[1fr_auto_1fr] items-center border-b px-4">
|
|
260
|
-
<div>
|
|
261
|
-
<
|
|
262
|
-
enter-from-class="opacity-0"
|
|
263
|
-
enter-active-class="transition-opacity duration-150 delay-200"
|
|
264
|
-
leave-active-class="transition-opacity duration-0"
|
|
265
|
-
leave-to-class="opacity-0"
|
|
266
|
-
>
|
|
267
|
-
<SidebarTrigger v-show="!sidebarOpen" />
|
|
268
|
-
</Transition>
|
|
358
|
+
<div class="flex items-center">
|
|
359
|
+
<SidebarTrigger />
|
|
269
360
|
</div>
|
|
270
361
|
|
|
271
362
|
<!-- View mode toggles (centered) -->
|
|
272
363
|
<ToggleGroup v-if="isPreviewRoute" v-model="viewMode" type="single" variant="outline" size="sm">
|
|
273
364
|
<ToggleGroupItem value="preview">
|
|
274
|
-
<Monitor class="size-4" />
|
|
365
|
+
<Monitor class="size-4 dark:text-gray-400" :stroke-width="1" />
|
|
275
366
|
</ToggleGroupItem>
|
|
276
367
|
<ToggleGroupItem value="source">
|
|
277
|
-
<CodeXml class="size-4" />
|
|
368
|
+
<CodeXml class="size-4 dark:text-gray-400" :stroke-width="1" />
|
|
278
369
|
</ToggleGroupItem>
|
|
279
370
|
</ToggleGroup>
|
|
280
371
|
<div v-else />
|
|
@@ -282,65 +373,147 @@ onUnmounted(() => document.removeEventListener('keydown', onKeydown))
|
|
|
282
373
|
<div class="flex items-center justify-end gap-3">
|
|
283
374
|
<span
|
|
284
375
|
v-if="isPreviewRoute && (!isFullSize || selectedDevice) && panelWidth"
|
|
285
|
-
class="text-xs font-medium tabular-nums text-gray-500 dark:text-gray-400 select-none"
|
|
376
|
+
class="hidden min-[430px]:inline text-xs font-medium tabular-nums text-gray-500 dark:text-gray-400 select-none"
|
|
286
377
|
>
|
|
287
|
-
|
|
378
|
+
<input
|
|
379
|
+
v-model.number="widthInput"
|
|
380
|
+
type="number"
|
|
381
|
+
min="200"
|
|
382
|
+
:max="maxIframeWidth || undefined"
|
|
383
|
+
aria-label="Preview width"
|
|
384
|
+
class="bg-transparent border-0 outline-none p-0 m-0 text-inherit font-inherit text-center tabular-nums w-[4.5ch] focus:outline-none focus:ring-0 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
|
385
|
+
>
|
|
386
|
+
<button class="hover:text-gray-700 dark:hover:text-gray-300" @click="selectedDevice = null; isFullSize = true; viewMode = 'preview'; resetKey++">×</button>
|
|
387
|
+
<input
|
|
388
|
+
v-model.number="heightInput"
|
|
389
|
+
type="number"
|
|
390
|
+
min="100"
|
|
391
|
+
:max="maxIframeHeight || undefined"
|
|
392
|
+
aria-label="Preview height"
|
|
393
|
+
class="bg-transparent border-0 outline-none p-0 m-0 text-inherit font-inherit text-center tabular-nums w-[4.5ch] focus:outline-none focus:ring-0 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
|
394
|
+
>
|
|
288
395
|
</span>
|
|
289
|
-
<
|
|
396
|
+
<div v-if="isPreviewRoute" class="flex items-center gap-1">
|
|
397
|
+
<DropdownMenu v-model:open="deviceMenuOpen" :modal="false">
|
|
290
398
|
<DropdownMenuTrigger as-child>
|
|
291
|
-
<Button variant="
|
|
292
|
-
<Smartphone class="size-4" />
|
|
399
|
+
<Button variant="ghost" size="sm" class="hidden min-[430px]:inline-flex gap-1.5 shadow-none border-none hover:bg-transparent">
|
|
400
|
+
<Smartphone class="size-4 dark:text-gray-400" :stroke-width="1" />
|
|
293
401
|
<span v-if="selectedDevice" class="text-xs">{{ selectedDevice.name }}</span>
|
|
294
|
-
<ChevronDown class="size-3 opacity-50" />
|
|
402
|
+
<ChevronDown class="size-3 opacity-50" :stroke-width="1" />
|
|
295
403
|
</Button>
|
|
296
404
|
</DropdownMenuTrigger>
|
|
297
|
-
<DropdownMenuContent align="end">
|
|
298
|
-
<DropdownMenuItem @click="selectedDevice = null; viewMode = 'preview'; resetKey++">
|
|
299
|
-
<Check v-if="!selectedDevice" class="size-3
|
|
300
|
-
<span :class="!selectedDevice ? '' : 'pl-5
|
|
405
|
+
<DropdownMenuContent align="end" class="min-w-52 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md dark:border-white/10">
|
|
406
|
+
<DropdownMenuItem class="text-xs font-medium text-gray-600 dark:text-gray-400 focus:text-gray-900 dark:focus:text-gray-200" @click="selectedDevice = null; isFullSize = true; viewMode = 'preview'; resetKey++">
|
|
407
|
+
<Check v-if="!selectedDevice && isFullSize" class="size-3 text-gray-900 dark:text-gray-200" />
|
|
408
|
+
<span :class="[!selectedDevice && isFullSize ? 'text-gray-900 dark:text-gray-200' : 'pl-5']">Full size</span>
|
|
301
409
|
</DropdownMenuItem>
|
|
302
410
|
<DropdownMenuItem
|
|
303
411
|
v-for="device in devicePresets"
|
|
304
412
|
:key="device.name"
|
|
413
|
+
class="text-xs font-medium text-gray-600 dark:text-gray-400 focus:text-gray-900 dark:focus:text-gray-200"
|
|
305
414
|
@click="selectDevice(device)"
|
|
306
415
|
>
|
|
307
|
-
<Check v-if="selectedDevice?.name === device.name" class="size-3
|
|
308
|
-
<span :class="selectedDevice?.name === device.name ? '' : 'pl-5
|
|
309
|
-
<span class="ml-auto text-
|
|
416
|
+
<Check v-if="selectedDevice?.name === device.name" class="size-3 text-gray-900 dark:text-gray-200" />
|
|
417
|
+
<span :class="[selectedDevice?.name === device.name ? 'text-gray-900 dark:text-gray-200' : 'pl-5']">{{ device.name }}</span>
|
|
418
|
+
<span class="ml-auto text-[11px] text-gray-400 dark:text-gray-500 tabular-nums tracking-tight">{{ device.width }}×{{ device.height }}</span>
|
|
310
419
|
</DropdownMenuItem>
|
|
311
420
|
</DropdownMenuContent>
|
|
312
|
-
|
|
421
|
+
</DropdownMenu>
|
|
422
|
+
</div>
|
|
313
423
|
</div>
|
|
314
424
|
</header>
|
|
315
425
|
|
|
316
426
|
<!-- Main content -->
|
|
317
427
|
<div class="flex-1 overflow-hidden">
|
|
318
428
|
<RouterView v-slot="{ Component }">
|
|
319
|
-
<component :is="Component" v-model:view-mode="viewMode" :device="selectedDevice" :reset-key="resetKey" v-model:panel-width="panelWidth" v-model:panel-height="panelHeight" v-model:is-dragging="isDragging" v-model:is-full-size="isFullSize" @clear-device="selectedDevice = null" />
|
|
429
|
+
<component :is="Component" v-model:view-mode="viewMode" :device="selectedDevice" :reset-key="resetKey" :templates="templates" v-model:panel-width="panelWidth" v-model:panel-height="panelHeight" v-model:iframe-width="iframeWidth" v-model:iframe-height="iframeHeight" v-model:max-iframe-width="maxIframeWidth" v-model:max-iframe-height="maxIframeHeight" v-model:is-dragging="isDragging" v-model:is-full-size="isFullSize" v-model:dark-mode="darkMode" @clear-device="selectedDevice = null; isFullSize = false" />
|
|
320
430
|
</RouterView>
|
|
321
431
|
</div>
|
|
322
432
|
</SidebarInset>
|
|
323
433
|
|
|
324
|
-
<CommandDialog v-model:open="commandOpen" title="
|
|
325
|
-
<CommandInput placeholder="
|
|
326
|
-
<CommandList>
|
|
327
|
-
<CommandEmpty>No
|
|
328
|
-
|
|
434
|
+
<CommandDialog v-model:open="commandOpen" title="Command palette" description="Run commands or search emails">
|
|
435
|
+
<CommandInput v-model="commandSearch" placeholder="Type a command or find an email..." />
|
|
436
|
+
<CommandList class="max-h-[400px]">
|
|
437
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
438
|
+
|
|
439
|
+
<!-- Preview commands -->
|
|
440
|
+
<CommandGroup v-if="isPreviewRoute && viewMode === 'preview'" heading="Preview">
|
|
441
|
+
<CommandItem
|
|
442
|
+
:value="darkMode ? 'Disable dark mode' : 'Emulate dark mode'"
|
|
443
|
+
@select="toggleDarkMode"
|
|
444
|
+
>
|
|
445
|
+
<Sun v-if="darkMode" class="size-3 shrink-0 opacity-50" />
|
|
446
|
+
<Moon v-else class="size-3 shrink-0 opacity-50" />
|
|
447
|
+
<span>{{ darkMode ? 'Disable dark mode' : 'Emulate dark mode' }}</span>
|
|
448
|
+
</CommandItem>
|
|
449
|
+
</CommandGroup>
|
|
450
|
+
|
|
451
|
+
<!-- Copy to clipboard commands -->
|
|
452
|
+
<CommandGroup v-if="isPreviewRoute" heading="Copy to clipboard">
|
|
329
453
|
<CommandItem
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
:value="t.path"
|
|
333
|
-
@select="onCommandSelect(t.href)"
|
|
454
|
+
value="HTML"
|
|
455
|
+
@select="copyHtml"
|
|
334
456
|
>
|
|
335
|
-
<
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
457
|
+
<FileCode class="size-3 shrink-0 opacity-50" />
|
|
458
|
+
<span>HTML</span>
|
|
459
|
+
<CommandShortcut>{{ isMac ? '⌘' : 'ALT+' }}C</CommandShortcut>
|
|
460
|
+
</CommandItem>
|
|
461
|
+
<CommandItem
|
|
462
|
+
value="Plaintext"
|
|
463
|
+
@select="copyPlaintext"
|
|
464
|
+
>
|
|
465
|
+
<FileText class="size-3 shrink-0 opacity-50" />
|
|
466
|
+
<span>Plaintext</span>
|
|
467
|
+
<CommandShortcut>{{ isMac ? '⌘' : 'ALT+' }}P</CommandShortcut>
|
|
468
|
+
</CommandItem>
|
|
469
|
+
<CommandItem
|
|
470
|
+
value="Vue source"
|
|
471
|
+
@select="copySource"
|
|
472
|
+
>
|
|
473
|
+
<Code class="size-3 shrink-0 opacity-50" />
|
|
474
|
+
<span>Vue source</span>
|
|
475
|
+
<CommandShortcut>{{ isMac ? '⌘' : 'ALT+' }}U</CommandShortcut>
|
|
476
|
+
</CommandItem>
|
|
477
|
+
</CommandGroup>
|
|
478
|
+
|
|
479
|
+
<!-- Resources -->
|
|
480
|
+
<CommandGroup heading="Resources">
|
|
481
|
+
<CommandItem
|
|
482
|
+
value="Documentation"
|
|
483
|
+
@select="openExternal('https://maizzle.com')"
|
|
484
|
+
>
|
|
485
|
+
<BookText class="size-3 shrink-0 opacity-50" />
|
|
486
|
+
<span>Documentation</span>
|
|
487
|
+
</CommandItem>
|
|
488
|
+
<CommandItem
|
|
489
|
+
value="Can I Email"
|
|
490
|
+
@select="openExternal('https://www.caniemail.com')"
|
|
491
|
+
>
|
|
492
|
+
<MailQuestion class="size-3 shrink-0 opacity-50" />
|
|
493
|
+
<span>Can I Email</span>
|
|
340
494
|
</CommandItem>
|
|
341
495
|
</CommandGroup>
|
|
496
|
+
|
|
497
|
+
<!-- Templates -->
|
|
498
|
+
<template v-if="commandSearch">
|
|
499
|
+
<CommandGroup v-for="(items, dir) in commandGrouped" :key="dir" :heading="String(dir)">
|
|
500
|
+
<CommandItem
|
|
501
|
+
v-for="t in items"
|
|
502
|
+
:key="t.path"
|
|
503
|
+
:value="t.path"
|
|
504
|
+
@select="onCommandSelect(t.href)"
|
|
505
|
+
>
|
|
506
|
+
<svg class="size-3 shrink-0 opacity-50" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
507
|
+
<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
|
|
508
|
+
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
|
|
509
|
+
</svg>
|
|
510
|
+
<span>{{ getFileName(t.path) }}</span>
|
|
511
|
+
<span class="sr-only">{{ ' ' + t.path.split('/').join(' ') }}</span>
|
|
512
|
+
</CommandItem>
|
|
513
|
+
</CommandGroup>
|
|
514
|
+
</template>
|
|
342
515
|
</CommandList>
|
|
343
|
-
<div class="flex items-center gap-4 border-t px-3 py-2 text-xs text-gray-500 dark:text-gray-400">
|
|
516
|
+
<div class="flex items-center gap-4 border-t px-3 py-2 text-xs text-gray-500 dark:text-gray-400 cursor-default select-none">
|
|
344
517
|
<span class="inline-flex items-center gap-1">
|
|
345
518
|
<Kbd><ArrowUp class="size-3" /></Kbd>
|
|
346
519
|
<Kbd><ArrowDown class="size-3" /></Kbd>
|
|
@@ -348,12 +521,15 @@ onUnmounted(() => document.removeEventListener('keydown', onKeydown))
|
|
|
348
521
|
</span>
|
|
349
522
|
<span class="inline-flex items-center gap-1">
|
|
350
523
|
<Kbd><CornerDownLeft class="size-3" /></Kbd>
|
|
351
|
-
|
|
524
|
+
{{ commandSearch ? 'View' : 'Run' }}
|
|
352
525
|
</span>
|
|
353
526
|
<span class="inline-flex items-center gap-1">
|
|
354
527
|
<Kbd>Esc</Kbd>
|
|
355
528
|
Close
|
|
356
529
|
</span>
|
|
530
|
+
<span v-if="commandSearch" class="ml-auto">
|
|
531
|
+
{{ filteredTemplatesCount }} {{ filteredTemplatesCount === 1 ? 'result' : 'results' }}
|
|
532
|
+
</span>
|
|
357
533
|
</div>
|
|
358
534
|
</CommandDialog>
|
|
359
535
|
</SidebarProvider>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { PanelRightOpen } from 'lucide-vue-next'
|
|
3
|
+
import { useSidebar } from '@/components/ui/sidebar'
|
|
4
|
+
|
|
5
|
+
const { setOpenMobile } = useSidebar()
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<button class="md:hidden text-gray-400 hover:text-gray-600 dark:hover:text-gray-300" @click="setOpenMobile(false)">
|
|
10
|
+
<PanelRightOpen class="size-4" :stroke-width="1" />
|
|
11
|
+
</button>
|
|
12
|
+
</template>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CheckboxRootEmits, CheckboxRootProps } from "reka-ui"
|
|
3
|
+
import type { HTMLAttributes } from "vue"
|
|
4
|
+
import { reactiveOmit } from "@vueuse/core"
|
|
5
|
+
import { Check } from "lucide-vue-next"
|
|
6
|
+
import { CheckboxIndicator, CheckboxRoot, useForwardPropsEmits } from "reka-ui"
|
|
7
|
+
import { cn } from "@/lib/utils"
|
|
8
|
+
|
|
9
|
+
const props = defineProps<CheckboxRootProps & { class?: HTMLAttributes["class"] }>()
|
|
10
|
+
const emits = defineEmits<CheckboxRootEmits>()
|
|
11
|
+
|
|
12
|
+
const delegatedProps = reactiveOmit(props, "class")
|
|
13
|
+
|
|
14
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<CheckboxRoot
|
|
19
|
+
v-slot="slotProps"
|
|
20
|
+
data-slot="checkbox"
|
|
21
|
+
v-bind="forwarded"
|
|
22
|
+
:class="
|
|
23
|
+
cn('peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
|
|
24
|
+
props.class)"
|
|
25
|
+
>
|
|
26
|
+
<CheckboxIndicator
|
|
27
|
+
data-slot="checkbox-indicator"
|
|
28
|
+
class="grid place-content-center text-current transition-none"
|
|
29
|
+
>
|
|
30
|
+
<slot v-bind="slotProps">
|
|
31
|
+
<Check class="size-3.5" />
|
|
32
|
+
</slot>
|
|
33
|
+
</CheckboxIndicator>
|
|
34
|
+
</CheckboxRoot>
|
|
35
|
+
</template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Checkbox } from "./Checkbox.vue"
|
|
@@ -44,9 +44,12 @@ function filterItems() {
|
|
|
44
44
|
filterState.filtered.groups = new Set()
|
|
45
45
|
let itemCount = 0
|
|
46
46
|
|
|
47
|
+
// Tokenize the search by whitespace so segments match in any order
|
|
48
|
+
const tokens = filterState.search.split(/\s+/).filter(Boolean)
|
|
49
|
+
|
|
47
50
|
// Check which items should be included
|
|
48
51
|
for (const [id, value] of allItems.value) {
|
|
49
|
-
const score = contains(value,
|
|
52
|
+
const score = tokens.every(token => contains(value, token))
|
|
50
53
|
filterState.filtered.items.set(id, score ? 1 : 0)
|
|
51
54
|
if (score)
|
|
52
55
|
itemCount++
|
|
@@ -80,6 +83,7 @@ provideCommandContext({
|
|
|
80
83
|
<ListboxRoot
|
|
81
84
|
data-slot="command"
|
|
82
85
|
v-bind="forwarded"
|
|
86
|
+
highlight-on-hover
|
|
83
87
|
:class="cn('bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md', props.class)"
|
|
84
88
|
>
|
|
85
89
|
<slot />
|
|
@@ -18,7 +18,7 @@ const forwarded = useForwardPropsEmits(props, emits)
|
|
|
18
18
|
|
|
19
19
|
<template>
|
|
20
20
|
<Dialog v-slot="slotProps" v-bind="forwarded">
|
|
21
|
-
<DialogContent class="overflow-hidden p-0 ">
|
|
21
|
+
<DialogContent class="overflow-hidden p-0 shadow-2xl shadow-black/10 dark:shadow-black/40" :show-close-button="false">
|
|
22
22
|
<DialogHeader class="sr-only">
|
|
23
23
|
<DialogTitle>{{ title }}</DialogTitle>
|
|
24
24
|
<DialogDescription>{{ description }}</DialogDescription>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { ListboxFilterProps } from "reka-ui"
|
|
3
3
|
import type { HTMLAttributes } from "vue"
|
|
4
|
+
import { watch } from "vue"
|
|
4
5
|
import { reactiveOmit } from "@vueuse/core"
|
|
5
6
|
import { Search } from "lucide-vue-next"
|
|
6
7
|
import { ListboxFilter, useForwardProps } from "reka-ui"
|
|
@@ -13,13 +14,30 @@ defineOptions({
|
|
|
13
14
|
|
|
14
15
|
const props = defineProps<ListboxFilterProps & {
|
|
15
16
|
class?: HTMLAttributes["class"]
|
|
17
|
+
modelValue?: string
|
|
16
18
|
}>()
|
|
17
19
|
|
|
18
|
-
const
|
|
20
|
+
const emit = defineEmits<{
|
|
21
|
+
(e: "update:modelValue", value: string): void
|
|
22
|
+
}>()
|
|
23
|
+
|
|
24
|
+
const delegatedProps = reactiveOmit(props, "class", "modelValue")
|
|
19
25
|
|
|
20
26
|
const forwardedProps = useForwardProps(delegatedProps)
|
|
21
27
|
|
|
22
28
|
const { filterState } = useCommand()
|
|
29
|
+
|
|
30
|
+
// Sync external v-model → internal filter
|
|
31
|
+
watch(() => props.modelValue, (val) => {
|
|
32
|
+
if (val !== undefined && val !== filterState.search) {
|
|
33
|
+
filterState.search = val
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
// Sync internal filter → external v-model
|
|
38
|
+
watch(() => filterState.search, (val) => {
|
|
39
|
+
emit("update:modelValue", val)
|
|
40
|
+
})
|
|
23
41
|
</script>
|
|
24
42
|
|
|
25
43
|
<template>
|
|
@@ -66,7 +66,7 @@ onUnmounted(() => {
|
|
|
66
66
|
:id="id"
|
|
67
67
|
ref="itemRef"
|
|
68
68
|
data-slot="command-item"
|
|
69
|
-
:class="cn('data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*=\'text-\'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4', props.class)"
|
|
69
|
+
:class="cn('data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*=\'text-\'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2.5 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4', props.class)"
|
|
70
70
|
@select="() => {
|
|
71
71
|
filterState.search = ''
|
|
72
72
|
}"
|
|
@@ -16,7 +16,7 @@ const forwarded = useForwardProps(delegatedProps)
|
|
|
16
16
|
<ListboxContent
|
|
17
17
|
data-slot="command-list"
|
|
18
18
|
v-bind="forwarded"
|
|
19
|
-
:class="cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', props.class)"
|
|
19
|
+
:class="cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto p-2', props.class)"
|
|
20
20
|
>
|
|
21
21
|
<div role="presentation">
|
|
22
22
|
<slot />
|
|
@@ -10,7 +10,7 @@ const props = defineProps<{
|
|
|
10
10
|
<template>
|
|
11
11
|
<span
|
|
12
12
|
data-slot="command-shortcut"
|
|
13
|
-
:class="cn('
|
|
13
|
+
:class="cn('ml-auto text-[10px] tracking-widest text-gray-400 dark:text-gray-500', props.class)"
|
|
14
14
|
>
|
|
15
15
|
<slot />
|
|
16
16
|
</span>
|