From bf3146bafd095fc2461cb4708935ef55908ddca8 Mon Sep 17 00:00:00 2001 From: Younes Barrad Date: Sat, 22 Jun 2024 19:11:47 +0100 Subject: [PATCH] feat: Project Rewrite (#177) * chore: updated useRender * chore: ignore lint for now * chore: publsih to npm * chore: removed pacakge manager * chore: updated pnpm version * chore: updated pnpm version * chore: updated useRender function props * chore: added nuxt module * chore: up pack * chore: updated pnpm version * chore: removed nuxt module * test * test * chore: removed simple-git-hooks * test * test * chore: removed config, users can handle that * chore: removed config from playground * fix: Accept ETailwind without config * chore: removed config * feat: updated tailwind component * chore: removed unused config * fix: tailwind space issues * chore: imporved tailwind component withtout relying on other libraries * ci: updated tests * ci: minor test updates for tailwind * chore: redoing project * chore: updated render version * chore: adding more components * feat: added more components * feat: added more components * chore: updated components package * chore: updated exports for components * chore: updated packages * fix: tailwind not working on vue * chore: fixed wrong component name * chore: added code components * fix: updated markdown to work on edge * fix: comments in code breaks rendering * fix: reverted back to using html dom libraries for tailwind, due to how vue 3 children work * chore: minor updates --- .github/FUNDING.yml | 3 - .github/workflows/ci.yml | 53 - .github/workflows/release.yml | 54 - .gitignore | 44 +- .npmrc | 2 +- .prettierignore | 1 + .prettierrc | 1 + .vscode/settings.json | 41 - CONTRIBUTING.md | 1 - LICENSE | 21 - README.md | 76 - bin/vue-email.mjs | 2 - build.config.ts | 13 - eslint.config.js | 18 - package.json | 140 +- packages/body/package.json | 45 + packages/body/src/body.spec.ts | 15 + .../EBody.ts => packages/body/src/index.ts | 6 +- packages/body/tsconfig.json | 5 + packages/button/package.json | 45 + packages/button/src/button.spec.ts | 15 + packages/button/src/index.ts | 91 + packages/button/src/utils/index.ts | 2 + packages/button/src/utils/parse-padding.ts | 110 + packages/button/src/utils/px-to-pt.ts | 2 + packages/button/tsconfig.json | 5 + packages/code-block/package.json | 48 + .../code-block/src/code-block.spec.ts | 42 +- .../code-block/src/index.ts | 7 +- packages/code-block/tsconfig.json | 12 + packages/code-inline/package.json | 45 + .../code-inline/src/index.ts | 4 +- packages/code-inline/tsconfig.json | 5 + packages/column/package.json | 45 + packages/column/src/column.spec.ts | 15 + .../column/src/index.ts | 5 +- packages/column/tsconfig.json | 5 + packages/components/package.json | 75 + packages/components/src/index.ts | 20 + packages/components/tsconfig.json | 5 + packages/container/package.json | 45 + packages/container/src/container.spec.ts | 15 + packages/container/src/index.ts | 23 + packages/container/tsconfig.json | 5 + packages/font/package.json | 45 + packages/font/src/font.spec.ts | 20 + .../EFont.ts => packages/font/src/index.ts | 22 +- packages/font/tsconfig.json | 5 + packages/head/package.json | 45 + packages/head/src/head.spec.ts | 15 + packages/head/src/index.ts | 14 + packages/head/tsconfig.json | 5 + packages/heading/package.json | 45 + packages/heading/src/heading.spec.ts | 15 + .../heading/src/index.ts | 18 +- packages/heading/src/utils/index.ts | 1 + packages/heading/src/utils/spaces.ts | 48 + packages/heading/tsconfig.json | 5 + packages/hr/package.json | 45 + packages/hr/src/hr.spec.ts | 20 + .../EHr.ts => packages/hr/src/index.ts | 5 +- packages/hr/tsconfig.json | 5 + packages/html/package.json | 45 + packages/html/src/html.spec.ts | 15 + .../EHtml.ts => packages/html/src/index.ts | 5 +- packages/html/tsconfig.json | 5 + packages/img/package.json | 45 + packages/img/src/img.spec.ts | 24 + packages/img/src/index.ts | 36 + packages/img/tsconfig.json | 5 + packages/link/package.json | 45 + .../ELink.ts => packages/link/src/index.ts | 11 +- packages/link/src/link.spec.ts | 15 + packages/link/tsconfig.json | 5 + packages/markdown/package.json | 48 + .../src/__snapshots__/markdown.spec.ts.snap | 37 + packages/markdown/src/index.ts | 38 + packages/markdown/src/markdown.spec.ts | 117 + .../markdown/src/types.ts | 0 packages/markdown/src/utils/index.ts | 14 + .../markdown/src/utils/parseMarkdownToJSX.ts | 10 + packages/markdown/src/utils/parser.ts | 19 + .../markdown/src/utils}/styles.ts | 80 +- packages/markdown/src/utils/types.ts | 39 + packages/markdown/src/utils/utils.ts | 239 + packages/markdown/tsconfig.json | 5 + packages/preview/package.json | 45 + packages/preview/src/index.ts | 45 + packages/preview/tsconfig.json | 5 + packages/render/package.json | 76 + packages/render/src/browser/index.ts | 3 + packages/render/src/node/index.ts | 3 + packages/render/src/shared/options.ts | 19 + .../render/src/shared/plain-text-selectors.ts | 10 + packages/render/src/shared/render.spec.ts | 16 + packages/render/src/shared/render.ts | 52 + packages/render/src/shared/utils/cleanup.ts | 19 + packages/render/src/shared/utils/pretty.ts | 15 + packages/render/src/shared/utils/template.vue | 13 + packages/render/tsconfig.json | 5 + packages/render/tsup.config.ts | 16 + packages/render/vite.config.ts | 6 + packages/row/package.json | 45 + packages/row/src/index.ts | 29 + packages/row/src/row.spec.ts | 15 + packages/row/tsconfig.json | 5 + packages/section/package.json | 45 + .../section/src/index.ts | 5 +- packages/section/src/section.spec.ts | 15 + packages/section/tsconfig.json | 5 + packages/style/package.json | 45 + .../EStyle.ts => packages/style/src/index.ts | 4 +- packages/style/src/style.spec.ts | 12 + packages/style/tsconfig.json | 5 + packages/tailwind/components/TailwindTest.vue | 43 + packages/tailwind/components/Test.vue | 23 + packages/tailwind/package.json | 70 + .../tailwind/src/index.ts | 45 +- .../utils/compatibility/css-to-jsx-style.ts | 47 + .../utils/compatibility/escape-class-name.ts | 19 + .../make-all-rule-properties-important.ts | 10 + .../compatibility/sanitize-class-name.ts | 20 + .../compatibility/sanitize-rule-selector.ts | 8 + .../src/utils/compatibility/unescape-class.ts | 3 + .../use-rgb-non-spaced-syntax.ts | 16 + .../utils/css/get-css-class-properties-map.ts | 12 + .../separate-media-queries-from-css.ts | 17 + packages/tailwind/src/utils/css/minify-css.ts | 21 + packages/tailwind/src/utils/css/rules-for.ts | 17 + .../src/utils/hooks/use-style-inlining.ts | 35 + .../src/utils/hooks/use-tailwind-styles.ts | 57 + packages/tailwind/src/utils/index.ts | 17 + .../utils/tailwindcss/get-css-for-markup.ts | 44 + packages/tailwind/tailwind.spec.ts | 70 + packages/tailwind/tsconfig.json | 13 + packages/tailwind/vite.config.ts | 42 + packages/text/package.json | 45 + .../EText.ts => packages/text/src/index.ts | 11 +- packages/text/src/text.spec.ts | 15 + packages/text/tsconfig.json | 5 + packages/tsconfig/base.json | 23 + packages/tsconfig/package.json | 9 + patches/postcss-css-variables@0.19.0.patch | 38 + patches/process@0.11.10.patch | 15 + patches/tailwindcss@3.3.2.patch | 33 + playground/.gitignore | 30 - playground/env.d.ts | 1 - playground/index.html | 13 - playground/package.json | 30 - playground/postcss.config.js | 6 - playground/public/favicon.ico | Bin 4286 -> 0 bytes playground/src/App.vue | 37 - playground/src/components/BaseEmail.vue | 14 - playground/src/components/EtailwindCode.vue | 30 - playground/src/components/MyEmail.vue | 12 - playground/src/components/MyFooter.vue | 9 - playground/src/components/Test.vue | 123 - playground/src/components/Test2.vue | 43 - playground/src/main.ts | 21 - playground/tailwind.config.ts | 13 - playground/tsconfig.app.json | 13 - playground/tsconfig.json | 11 - playground/tsconfig.node.json | 17 - playground/vite.config.ts | 15 - pnpm-lock.yaml | 9681 +++++++++-------- pnpm-workspace.yaml | 3 +- public/repo-banner.png | Bin 328923 -> 0 bytes renovate.json | 5 + scripts/bump-edge.ts | 36 - scripts/release-edge.sh | 19 - scripts/release.sh | 16 - src/components/EButton.ts | 79 - src/components/EContainer.ts | 23 - src/components/EHead.ts | 10 - src/components/EImg.ts | 30 - src/components/EMarkdown.ts | 33 - src/components/EPreview.ts | 39 - src/components/ERow.ts | 22 - src/components/index.ts | 20 - src/composables/index.ts | 1 - src/composables/render.ts | 93 - src/config.ts | 3 - src/index.ts | 7 - src/plugin/index.ts | 21 - src/types/compiler.ts | 35 - src/types/index.ts | 2 - src/utils/assign-deep.ts | 36 - src/utils/cleanup.ts | 15 - src/utils/css.ts | 95 - src/utils/html-to-string.ts | 13 - src/utils/index.ts | 11 - src/utils/markdown/index.ts | 3 - src/utils/markdown/patterns.ts | 24 - src/utils/markdown/utils.ts | 228 - src/utils/px-to-pt.ts | 3 - src/utils/style-to-string.ts | 16 - src/utils/unreachable.ts | 3 - src/utils/with-margin.ts | 30 - tests/Body.spec.ts | 16 - tests/Button.spec.ts | 29 - tests/Column.spec.ts | 17 - tests/Container.spec.ts | 25 - tests/Font.spec.ts | 30 - tests/Head.spec.ts | 27 - tests/Heading.spec.ts | 24 - tests/Hr.spec.ts | 15 - tests/Html.spec.ts | 15 - tests/Img.spec.ts | 20 - tests/Link.spec.ts | 23 - tests/Markdown.spec.ts | 95 - tests/Row.spec.ts | 15 - tests/Section.spec.ts | 55 - tests/Style.spec.ts | 27 - tests/Tailwind.spec.ts | 39 - tests/Text.spec.ts | 17 - tests/components/BaseEmail.vue | 16 - tests/components/EtailwindCode.vue | 30 - tests/components/MyEmail.vue | 12 - tests/components/MyFooter.vue | 9 - tests/components/Test.vue | 84 - tests/components/Test2.vue | 43 - tsconfig.json | 6 +- turbo.json | 30 + vite.config.ts | 6 - vitest.config.ts | 14 + vitest.workspace.ts | 1 + 226 files changed, 8333 insertions(+), 7433 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/release.yml create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 .vscode/settings.json delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100755 bin/vue-email.mjs delete mode 100644 build.config.ts delete mode 100644 eslint.config.js create mode 100644 packages/body/package.json create mode 100644 packages/body/src/body.spec.ts rename src/components/EBody.ts => packages/body/src/index.ts (51%) create mode 100644 packages/body/tsconfig.json create mode 100644 packages/button/package.json create mode 100644 packages/button/src/button.spec.ts create mode 100644 packages/button/src/index.ts create mode 100644 packages/button/src/utils/index.ts create mode 100644 packages/button/src/utils/parse-padding.ts create mode 100644 packages/button/src/utils/px-to-pt.ts create mode 100644 packages/button/tsconfig.json create mode 100644 packages/code-block/package.json rename tests/CodeBlock.spec.ts => packages/code-block/src/code-block.spec.ts (73%) rename src/components/ECodeBlock.ts => packages/code-block/src/index.ts (94%) create mode 100644 packages/code-block/tsconfig.json create mode 100644 packages/code-inline/package.json rename src/components/ECodeInline.ts => packages/code-inline/src/index.ts (92%) create mode 100644 packages/code-inline/tsconfig.json create mode 100644 packages/column/package.json create mode 100644 packages/column/src/column.spec.ts rename src/components/EColumn.ts => packages/column/src/index.ts (69%) create mode 100644 packages/column/tsconfig.json create mode 100644 packages/components/package.json create mode 100644 packages/components/src/index.ts create mode 100644 packages/components/tsconfig.json create mode 100644 packages/container/package.json create mode 100644 packages/container/src/container.spec.ts create mode 100644 packages/container/src/index.ts create mode 100644 packages/container/tsconfig.json create mode 100644 packages/font/package.json create mode 100644 packages/font/src/font.spec.ts rename src/components/EFont.ts => packages/font/src/index.ts (79%) create mode 100644 packages/font/tsconfig.json create mode 100644 packages/head/package.json create mode 100644 packages/head/src/head.spec.ts create mode 100644 packages/head/src/index.ts create mode 100644 packages/head/tsconfig.json create mode 100644 packages/heading/package.json create mode 100644 packages/heading/src/heading.spec.ts rename src/components/EHeading.ts => packages/heading/src/index.ts (79%) create mode 100644 packages/heading/src/utils/index.ts create mode 100644 packages/heading/src/utils/spaces.ts create mode 100644 packages/heading/tsconfig.json create mode 100644 packages/hr/package.json create mode 100644 packages/hr/src/hr.spec.ts rename src/components/EHr.ts => packages/hr/src/index.ts (69%) create mode 100644 packages/hr/tsconfig.json create mode 100644 packages/html/package.json create mode 100644 packages/html/src/html.spec.ts rename src/components/EHtml.ts => packages/html/src/index.ts (85%) create mode 100644 packages/html/tsconfig.json create mode 100644 packages/img/package.json create mode 100644 packages/img/src/img.spec.ts create mode 100644 packages/img/src/index.ts create mode 100644 packages/img/tsconfig.json create mode 100644 packages/link/package.json rename src/components/ELink.ts => packages/link/src/index.ts (69%) create mode 100644 packages/link/src/link.spec.ts create mode 100644 packages/link/tsconfig.json create mode 100644 packages/markdown/package.json create mode 100644 packages/markdown/src/__snapshots__/markdown.spec.ts.snap create mode 100644 packages/markdown/src/index.ts create mode 100644 packages/markdown/src/markdown.spec.ts rename src/types/markdown.ts => packages/markdown/src/types.ts (100%) create mode 100644 packages/markdown/src/utils/index.ts create mode 100644 packages/markdown/src/utils/parseMarkdownToJSX.ts create mode 100644 packages/markdown/src/utils/parser.ts rename {src/utils/markdown => packages/markdown/src/utils}/styles.ts (53%) create mode 100644 packages/markdown/src/utils/types.ts create mode 100644 packages/markdown/src/utils/utils.ts create mode 100644 packages/markdown/tsconfig.json create mode 100644 packages/preview/package.json create mode 100644 packages/preview/src/index.ts create mode 100644 packages/preview/tsconfig.json create mode 100644 packages/render/package.json create mode 100644 packages/render/src/browser/index.ts create mode 100644 packages/render/src/node/index.ts create mode 100644 packages/render/src/shared/options.ts create mode 100644 packages/render/src/shared/plain-text-selectors.ts create mode 100644 packages/render/src/shared/render.spec.ts create mode 100644 packages/render/src/shared/render.ts create mode 100644 packages/render/src/shared/utils/cleanup.ts create mode 100644 packages/render/src/shared/utils/pretty.ts create mode 100644 packages/render/src/shared/utils/template.vue create mode 100644 packages/render/tsconfig.json create mode 100644 packages/render/tsup.config.ts create mode 100644 packages/render/vite.config.ts create mode 100644 packages/row/package.json create mode 100644 packages/row/src/index.ts create mode 100644 packages/row/src/row.spec.ts create mode 100644 packages/row/tsconfig.json create mode 100644 packages/section/package.json rename src/components/ESection.ts => packages/section/src/index.ts (80%) create mode 100644 packages/section/src/section.spec.ts create mode 100644 packages/section/tsconfig.json create mode 100644 packages/style/package.json rename src/components/EStyle.ts => packages/style/src/index.ts (80%) create mode 100644 packages/style/src/style.spec.ts create mode 100644 packages/style/tsconfig.json create mode 100644 packages/tailwind/components/TailwindTest.vue create mode 100644 packages/tailwind/components/Test.vue create mode 100644 packages/tailwind/package.json rename src/components/ETailwind.ts => packages/tailwind/src/index.ts (73%) create mode 100644 packages/tailwind/src/utils/compatibility/css-to-jsx-style.ts create mode 100644 packages/tailwind/src/utils/compatibility/escape-class-name.ts create mode 100644 packages/tailwind/src/utils/compatibility/make-all-rule-properties-important.ts create mode 100644 packages/tailwind/src/utils/compatibility/sanitize-class-name.ts create mode 100644 packages/tailwind/src/utils/compatibility/sanitize-rule-selector.ts create mode 100644 packages/tailwind/src/utils/compatibility/unescape-class.ts create mode 100644 packages/tailwind/src/utils/compatibility/use-rgb-non-spaced-syntax.ts create mode 100644 packages/tailwind/src/utils/css/get-css-class-properties-map.ts create mode 100644 packages/tailwind/src/utils/css/media-queries/separate-media-queries-from-css.ts create mode 100644 packages/tailwind/src/utils/css/minify-css.ts create mode 100644 packages/tailwind/src/utils/css/rules-for.ts create mode 100644 packages/tailwind/src/utils/hooks/use-style-inlining.ts create mode 100644 packages/tailwind/src/utils/hooks/use-tailwind-styles.ts create mode 100644 packages/tailwind/src/utils/index.ts create mode 100644 packages/tailwind/src/utils/tailwindcss/get-css-for-markup.ts create mode 100644 packages/tailwind/tailwind.spec.ts create mode 100644 packages/tailwind/tsconfig.json create mode 100644 packages/tailwind/vite.config.ts create mode 100644 packages/text/package.json rename src/components/EText.ts => packages/text/src/index.ts (50%) create mode 100644 packages/text/src/text.spec.ts create mode 100644 packages/text/tsconfig.json create mode 100644 packages/tsconfig/base.json create mode 100644 packages/tsconfig/package.json create mode 100644 patches/postcss-css-variables@0.19.0.patch create mode 100644 patches/process@0.11.10.patch create mode 100644 patches/tailwindcss@3.3.2.patch delete mode 100644 playground/.gitignore delete mode 100644 playground/env.d.ts delete mode 100644 playground/index.html delete mode 100644 playground/package.json delete mode 100644 playground/postcss.config.js delete mode 100644 playground/public/favicon.ico delete mode 100644 playground/src/App.vue delete mode 100644 playground/src/components/BaseEmail.vue delete mode 100644 playground/src/components/EtailwindCode.vue delete mode 100644 playground/src/components/MyEmail.vue delete mode 100644 playground/src/components/MyFooter.vue delete mode 100644 playground/src/components/Test.vue delete mode 100644 playground/src/components/Test2.vue delete mode 100644 playground/src/main.ts delete mode 100644 playground/tailwind.config.ts delete mode 100644 playground/tsconfig.app.json delete mode 100644 playground/tsconfig.json delete mode 100644 playground/tsconfig.node.json delete mode 100644 playground/vite.config.ts delete mode 100644 public/repo-banner.png create mode 100644 renovate.json delete mode 100644 scripts/bump-edge.ts delete mode 100644 scripts/release-edge.sh delete mode 100644 scripts/release.sh delete mode 100644 src/components/EButton.ts delete mode 100644 src/components/EContainer.ts delete mode 100644 src/components/EHead.ts delete mode 100644 src/components/EImg.ts delete mode 100644 src/components/EMarkdown.ts delete mode 100644 src/components/EPreview.ts delete mode 100644 src/components/ERow.ts delete mode 100644 src/components/index.ts delete mode 100644 src/composables/index.ts delete mode 100644 src/composables/render.ts delete mode 100644 src/config.ts delete mode 100644 src/index.ts delete mode 100644 src/plugin/index.ts delete mode 100644 src/types/compiler.ts delete mode 100644 src/types/index.ts delete mode 100644 src/utils/assign-deep.ts delete mode 100644 src/utils/cleanup.ts delete mode 100644 src/utils/css.ts delete mode 100644 src/utils/html-to-string.ts delete mode 100644 src/utils/index.ts delete mode 100644 src/utils/markdown/index.ts delete mode 100644 src/utils/markdown/patterns.ts delete mode 100644 src/utils/markdown/utils.ts delete mode 100644 src/utils/px-to-pt.ts delete mode 100644 src/utils/style-to-string.ts delete mode 100644 src/utils/unreachable.ts delete mode 100644 src/utils/with-margin.ts delete mode 100644 tests/Body.spec.ts delete mode 100644 tests/Button.spec.ts delete mode 100644 tests/Column.spec.ts delete mode 100644 tests/Container.spec.ts delete mode 100644 tests/Font.spec.ts delete mode 100644 tests/Head.spec.ts delete mode 100644 tests/Heading.spec.ts delete mode 100644 tests/Hr.spec.ts delete mode 100644 tests/Html.spec.ts delete mode 100644 tests/Img.spec.ts delete mode 100644 tests/Link.spec.ts delete mode 100644 tests/Markdown.spec.ts delete mode 100644 tests/Row.spec.ts delete mode 100644 tests/Section.spec.ts delete mode 100644 tests/Style.spec.ts delete mode 100644 tests/Tailwind.spec.ts delete mode 100644 tests/Text.spec.ts delete mode 100644 tests/components/BaseEmail.vue delete mode 100644 tests/components/EtailwindCode.vue delete mode 100644 tests/components/MyEmail.vue delete mode 100644 tests/components/MyFooter.vue delete mode 100644 tests/components/Test.vue delete mode 100644 tests/components/Test2.vue create mode 100644 turbo.json delete mode 100644 vite.config.ts create mode 100644 vitest.config.ts create mode 100644 vitest.workspace.ts diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index be1ed037..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -# These are supported funding model platforms - -github: vue-email diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 9b571407..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: CI - -on: - push: - branches: - - main - - pull_request: - branches: - - main - -jobs: - ci: - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: read - steps: - - uses: actions/checkout@v3 - - - name: Install pnpm - uses: pnpm/action-setup@v2 - - - name: Set node - uses: actions/setup-node@v3 - with: - node-version: lts/* - - - name: Setup - run: npm i -g @antfu/ni - - - name: Install - run: nci - - - name: Lint - run: nr lint - - - name: Typecheck - run: nr typecheck - - - name: Build - run: nr build - - - name: Test - run: nr test - - - name: Relase Edge - if: github.event_name == 'push' - run: | - chmod +x ./scripts/release-edge.sh - ./scripts/release-edge.sh - env: - NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 8414d843..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Release - -on: - push: - tags: - - 'v*' - -jobs: - release: - runs-on: ubuntu-latest - permissions: - contents: write - - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Install pnpm - uses: pnpm/action-setup@v2 - - - name: Set node - uses: actions/setup-node@v3 - with: - node-version: lts/* - - - name: Setup - run: npm i -g @antfu/ni - - - name: Install - run: nci - - - name: Lint - run: nr lint - - - name: Typecheck - run: nr typecheck - - - name: Build - run: nr build - - - name: Test - run: nr test - - - name: Release - run: | - chmod +x ./scripts/release.sh - ./scripts/release.sh - env: - NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} - - - run: npx changelogithub - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index 95f9ee9e..dc407dfa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,37 @@ -.cache -.DS_Store -.idea -*.log -*.tgz +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +.pnp +.pnp.js + +# testing coverage + +# next.js +.next/ +out/ +build dist -lib-cov -logs -node_modules -temp +.vercel + +# misc +.DS_Store +*.pem +.changeset + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# turbo +.turbo diff --git a/.npmrc b/.npmrc index ae90f705..ded82e2f 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -ignore-workspace-root-check=true +auto-install-peers = true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..849ddff3 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c5632ba7..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - // Enable the ESlint flat config support - "eslint.experimental.useFlatConfig": true, - - // Disable the default formatter, use eslint instead - "prettier.enable": false, - "editor.formatOnSave": false, - - // Auto fix - "editor.codeActionsOnSave": { - "source.fixAll": "explicit", - "source.organizeImports": "never" - }, - - // Silent the stylistic rules in you IDE, but still auto fix them - "eslint.rules.customizations": [ - { "rule": "style/*", "severity": "off" }, - { "rule": "*-indent", "severity": "off" }, - { "rule": "*-spacing", "severity": "off" }, - { "rule": "*-spaces", "severity": "off" }, - { "rule": "*-order", "severity": "off" }, - { "rule": "*-dangle", "severity": "off" }, - { "rule": "*-newline", "severity": "off" }, - { "rule": "*quotes", "severity": "off" }, - { "rule": "*semi", "severity": "off" } - ], - - // Enable eslint for all supported languages - "eslint.validate": [ - "javascript", - "javascriptreact", - "typescript", - "typescriptreact", - "vue", - "html", - "markdown", - "json", - "jsonc", - "yaml" - ] -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 6c3f5ff1..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1 +0,0 @@ -Please refer to https://github.com/antfu/contribute diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d52bbe5d..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Vue Email - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index f52d67b9..00000000 --- a/README.md +++ /dev/null @@ -1,76 +0,0 @@ -[![vue-email](/public/repo-banner.png)](https://vuemail.net) - -
- -[![npm version][npm-version-src]][npm-version-href] -[![npm downloads][npm-downloads-src]][npm-downloads-href] -[![JSDocs][jsdocs-src]][jsdocs-href] -[![License][license-src]][license-href] - -
- -# ๐Ÿ’Œ vue-email - -Simple way to build email templates in vue. - -- [โœจ  Release Notes](https://github.com/vue-email/vue-email/releases) -- [๐Ÿ“–  Read the documentation](https://vuemail.net) -- [๐Ÿ’š  Nuxt Module](https://nuxt.com/modules/vue-email) - -> [!IMPORTANT] -> Experimental and under heavy development. APIs are subject to change. - -## Features - -- ๐Ÿงฉ Build email templates with Vue components -- ๐Ÿ›ค๏ธ [SSR support](https://vuemail.net/ssr/compiler), preview/send emails both on server and client, now with support for deno and bun. -- ๐ŸŒ [i18n support](https://vuemail.net/plugins/i18n) -- ๐Ÿ“จ [Integrates with many email providers](https://vuemail.net/integrations/nodemailer) -- ๐Ÿงช Tested against popular email clients -- ๐ŸŽจ [Supports Tailwind CSS](https://vuemail.net/components/tailwind) -- ๐Ÿšš First-class support for Nuxt 3 -- โœจ Written in TypeScript - -## Ecosystem - -| Package | Version | -| --------------------------- | :------------------------------------------------------------------------------------------------- | -| [Vue-Email](https://github.com/vue-email/vue-email) | ![tres version](https://img.shields.io/npm/v/vue-email/latest.svg?label=%20&colorB=1fa669) | -| [Nuxt](https://github.com/vue-email/nuxt) | ![nuxt version](https://img.shields.io/npm/v/@vue-email/nuxt/latest.svg?label=%20&color=4f4f4f&logo=nuxt.js) | -[SSR Compiler](https://github.com/vue-email/compiler) | ![cientos version](https://img.shields.io/npm/v/@vue-email/compiler/latest.svg?label=%20&colorB=1fa669) | -| [CLI](https://github.com/vue-email/cli) | ![tres version](https://img.shields.io/npm/v/@vue-email/cli/latest.svg?label=%20&colorB=1fa669) | - -## Installation - -```bash -# Using npm -npm install vue-email - -# Using yarn -yarn add vue-email - -# Using pnpm -pnpm add vue-email -``` - -## ๐Ÿ’ป Development - -1. Clone this repository -2. Enable [Corepack](https://github.com/nodejs/corepack) using `corepack enable` -3. Install dependencies using `pnpm install` - -## ๐Ÿ›Ÿ Support -If you like our work, please feel to free to [support us](https://github.com/sponsors/vue-email)! - -## License - -[MIT](./LICENSE) License ยฉ 2023-PRESENT [Vue Email](https://vuemail.net/) - -[npm-version-src]: https://img.shields.io/npm/v/vue-email/latest?style=flat&colorA=080f12&colorB=1fa669 -[npm-version-href]: https://npmjs.com/package/vue-email -[npm-downloads-src]: https://img.shields.io/npm/dm/vue-email?style=flat&colorA=080f12&colorB=1fa669 -[npm-downloads-href]: https://npmjs.com/package/vue-email -[license-src]: https://img.shields.io/github/license/vue-email/vue-email.svg?style=flat&colorA=080f12&colorB=1fa669 -[license-href]: https://github.com/vue-email/vue-email/blob/main/LICENSE -[jsdocs-src]: https://img.shields.io/badge/jsdocs-reference-080f12?style=flat&colorA=080f12&colorB=1fa669 -[jsdocs-href]: https://www.jsdocs.io/package/vue-email diff --git a/bin/vue-email.mjs b/bin/vue-email.mjs deleted file mode 100755 index 894069aa..00000000 --- a/bin/vue-email.mjs +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -import '@vue-email/cli/cli' diff --git a/build.config.ts b/build.config.ts deleted file mode 100644 index 0f679789..00000000 --- a/build.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineBuildConfig } from 'unbuild' - -export default defineBuildConfig({ - entries: [ - 'src/index', - ], - declaration: true, - clean: true, - rollup: { - emitCJS: true, - inlineDependencies: true, - }, -}) diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index d9908738..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,18 +0,0 @@ -// @ts-check -import antfu from '@antfu/eslint-config' - -export default antfu( - { - ignores: [ - // eslint ignore globs here - // 'playground/**/*', - ], - }, - { - rules: { - // overrides - 'node/prefer-global/process': 'off', - 'vars-on-top': 'off', - }, - }, -) diff --git a/package.json b/package.json index ba8026ee..53fe7944 100644 --- a/package.json +++ b/package.json @@ -1,117 +1,35 @@ { - "name": "vue-email", - "type": "module", - "version": "0.8.11", - "packageManager": "pnpm@8.11.0", - "description": "๐Ÿ’Œ Write email templates with Vue", - "author": "David Arenas ", - "maintainers": [ - { - "name": "Dave136", - "email": "davejs136@gmail.com", - "url": "https://github.com/Dave136" - }, - { - "name": "Flowko", - "email": "younesbarraddev@gmail.com", - "url": "https://github.com/Flowko" - } - ], - "license": "MIT", - "homepage": "https://vuemail.net/", - "repository": { - "type": "git", - "url": "git+https://github.com/vue-email/vue-email.git" - }, - "bugs": "https://github.com/vue-email/vue-email/issues", - "keywords": [ - "vue", - "vue-email", - "templates", - "mailing", - "vue-templates" - ], - "sideEffects": false, - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.cjs" - } - }, - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "typesVersions": { - "*": { - "*": [ - "./dist/*", - "./dist/index.d.ts" - ] - } - }, - "bin": { - "vue-email": "bin/vue-email.mjs", - "vuemail": "bin/vue-email.mjs" - }, - "files": [ - "bin", - "dist" - ], + "name": "vue-email-monorepo", + "version": "0.0.0", + "private": true, "scripts": { - "build": "unbuild", - "dev": "unbuild --stub", - "lint": "eslint .", - "lint:fix": "eslint . --fix", - "prepublishOnly": "nr build", - "release": "bumpp", - "start": "esno src/index.ts", - "test": "vitest", - "typecheck": "tsc --noEmit", - "prepare": "simple-git-hooks" - }, - "peerDependencies": { - "vue": "^3.4.15" - }, - "dependencies": { - "@vue-email/cli": "latest", - "@vue-email/tailwind": "^0.0.6", - "isomorphic-dompurify": "^2.3.0", - "shiki": "1.0.0", - "ufo": "^1.4.0", - "vue": "^3.4.16", - "vue-i18n": "^9.9.1" + "build": "turbo run build", + "dev": "turbo run dev --parallel --concurrency 25", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "format:check": "prettier --check \"**/*.{ts,tsx,md}\"", + "lint": "turbo run lint", + "clean": "turbo run clean", + "test": "turbo run test", + "test:watch": "turbo run test:watch" }, "devDependencies": { - "@antfu/eslint-config": "^2.6.4", - "@antfu/ni": "^0.21.12", - "@antfu/utils": "^0.7.7", - "@types/html-to-text": "^9.0.4", - "@types/node": "^20.11.16", - "@types/pretty": "^2.0.3", - "@vitejs/plugin-vue": "^5.0.3", - "bumpp": "^9.3.0", - "dom-serializer": "^2.0.0", - "domutils": "^3.1.0", - "eslint": "^8.56.0", - "esno": "^4.0.0", - "html-to-text": "^9.0.5", - "htmlparser2": "^9.1.0", - "jiti": "^1.21.0", - "lint-staged": "^15.2.2", - "pnpm": "^8.15.1", - "pretty": "^2.0.0", - "rimraf": "^5.0.5", - "simple-git-hooks": "^2.9.0", - "typescript": "^5.3.3", - "unbuild": "^2.0.0", - "vite": "^5.0.12", - "vitest": "^1.2.2" - }, - "simple-git-hooks": { - "pre-commit": "pnpm lint-staged" - }, - "lint-staged": { - "*": "eslint --fix" + "@types/node": "18.18.0", + "eslint": "9.4.0", + "prettier": "3.3.2", + "tsup": "8.1.0", + "turbo": "2.0.3", + "vite": "5.2.13", + "vitest": "1.6.0", + "tsconfig": "workspace:*", + "happy-dom": "12.2.2", + "@vitejs/plugin-vue": "^5.0.5" + }, + "packageManager": "pnpm@9.1.1", + "pnpm": { + "patchedDependencies": { + "postcss-css-variables@0.19.0": "patches/postcss-css-variables@0.19.0.patch", + "process@0.11.10": "patches/process@0.11.10.patch", + "tailwindcss@3.3.2": "patches/tailwindcss@3.3.2.patch" + } } } diff --git a/packages/body/package.json b/packages/body/package.json new file mode 100644 index 00000000..0ceb990b --- /dev/null +++ b/packages/body/package.json @@ -0,0 +1,45 @@ +{ + "name": "@vue-email/body", + "version": "0.0.3", + "description": "A Vue body component to wrap emails", + "sideEffects": false, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist/**" + ], + "exports": { + ".": { + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "license": "MIT", + "scripts": { + "build": "tsup src/index.ts --format esm,cjs --dts --external vue", + "clean": "rm -rf dist", + "dev": "tsup src/index.ts --format esm,cjs --dts --external vue --watch", + "lint": "eslint .", + "test:watch": "vitest", + "test": "vitest run" + }, + "peerDependencies": { + "vue": "^3.4.27" + }, + "devDependencies": { + "@babel/core": "7.23.9", + "@vue-email/render": "workspace:*", + "typescript": "5.1.6", + "tsconfig": "workspace:*" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/body/src/body.spec.ts b/packages/body/src/body.spec.ts new file mode 100644 index 00000000..97f33a81 --- /dev/null +++ b/packages/body/src/body.spec.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'vitest' +import { h } from 'vue' +import { render } from "@vue-email/render"; +import { Body } from "./index"; + +describe(' component', () => { + it('renders children correctly', async () => { + const testMessage = "Test message"; + const component = h(Body, [ + testMessage + ]) + const html = await render(component) + expect(html).toContain(testMessage) + }) +}) diff --git a/src/components/EBody.ts b/packages/body/src/index.ts similarity index 51% rename from src/components/EBody.ts rename to packages/body/src/index.ts index dfc3b2c0..362950d8 100644 --- a/src/components/EBody.ts +++ b/packages/body/src/index.ts @@ -1,11 +1,11 @@ import type { VNode } from 'vue' import { defineComponent, h } from 'vue' -export default defineComponent({ - name: 'EBody', +export const Body = defineComponent({ + name: 'Body', setup(_, { slots }) { return () => { - const bodyNode: VNode = h('body', { 'data-id': '__vue-email-body' }, slots.default?.()) + const bodyNode: VNode = h('body', slots.default?.()) return bodyNode } diff --git a/packages/body/tsconfig.json b/packages/body/tsconfig.json new file mode 100644 index 00000000..37906aab --- /dev/null +++ b/packages/body/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/base.json", + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/packages/button/package.json b/packages/button/package.json new file mode 100644 index 00000000..779254d9 --- /dev/null +++ b/packages/button/package.json @@ -0,0 +1,45 @@ +{ + "name": "@vue-email/button", + "version": "0.0.3", + "description": "A link that is styled to look like a button", + "sideEffects": false, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist/**" + ], + "exports": { + ".": { + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "license": "MIT", + "scripts": { + "build": "tsup src/index.ts --format esm,cjs --dts --external vue", + "clean": "rm -rf dist", + "dev": "tsup src/index.ts --format esm,cjs --dts --external vue --watch", + "lint": "eslint .", + "test:watch": "vitest", + "test": "vitest run" + }, + "peerDependencies": { + "vue": "^3.4.27" + }, + "devDependencies": { + "@babel/core": "7.23.9", + "@vue-email/render": "workspace:*", + "typescript": "5.1.6", + "tsconfig": "workspace:*" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/button/src/button.spec.ts b/packages/button/src/button.spec.ts new file mode 100644 index 00000000..839c1e40 --- /dev/null +++ b/packages/button/src/button.spec.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'vitest' +import { h } from 'vue' +import { render } from "@vue-email/render"; +import { Button } from "./index"; + +describe("