From 159bcade7b3b11b0b0871b2ea4eb6a57da4dc841 Mon Sep 17 00:00:00 2001
From: Mythie
Date: Fri, 9 Jun 2023 18:21:18 +1000
Subject: [PATCH] wip: refresh design
---
.dockerignore | 32 +-
.editorconfig | 9 +
.env.example | 61 +-
.eslintrc.cjs | 13 +
.gitignore | 33 +-
.npmrc | 1 +
.vscode/settings.json | 29 +-
README.md | 2 +-
apps/marketing/README.md | 1 +
apps/marketing/next-env.d.ts | 6 +
apps/marketing/next.config.js | 15 +
apps/marketing/package.json | 37 +
apps/marketing/postcss.config.js | 6 +
apps/marketing/process-env.d.ts | 13 +
.../public/android-chrome-192x192.png | Bin 0 -> 16131 bytes
.../public/android-chrome-512x512.png | Bin 0 -> 49685 bytes
apps/marketing/public/apple-touch-icon.png | Bin 0 -> 14365 bytes
.../public/documenso-supporter-pledge.pdf | Bin 0 -> 45366 bytes
apps/marketing/public/favicon-16x16.png | Bin 0 -> 529 bytes
apps/marketing/public/favicon-32x32.png | Bin 0 -> 1345 bytes
apps/marketing/public/favicon.ico | Bin 0 -> 15406 bytes
apps/marketing/public/fonts/caveat.ttf | Bin 0 -> 252080 bytes
.../logo_h.png => marketing/public/logo.png} | Bin
apps/marketing/public/next.svg | 1 +
apps/marketing/public/opengraph-image.jpg | Bin 0 -> 710015 bytes
apps/marketing/public/site.webmanifest | 19 +
apps/marketing/public/vercel.svg | 1 +
apps/marketing/src/api/claim-plan/fetcher.ts | 41 +
apps/marketing/src/api/claim-plan/types.ts | 37 +
.../src/app/(marketing)/claimed/page.tsx | 173 +
apps/marketing/src/app/(marketing)/layout.tsx | 22 +
apps/marketing/src/app/(marketing)/page.tsx | 31 +
.../src/app/(marketing)/pricing/page.tsx | 163 +
apps/marketing/src/app/globals.css | 1 +
apps/marketing/src/app/layout.tsx | 53 +
apps/marketing/src/assets/Group 1019.png | Bin 0 -> 34342 bytes
.../src/assets/background-pattern.png | Bin 0 -> 1376030 bytes
.../src/assets/card-beautiful-figure.png | Bin 0 -> 13016 bytes
.../src/assets/card-build-figure.png | Bin 0 -> 345360 bytes
.../src/assets/card-connections-figure.png | Bin 0 -> 57546 bytes
.../marketing/src/assets/card-fast-figure.png | Bin 0 -> 27968 bytes
.../marketing/src/assets/card-open-figure.png | Bin 0 -> 257438 bytes
.../marketing/src/assets/card-paid-figure.png | Bin 0 -> 17723 bytes
.../src/assets/card-sharing-figure.png | Bin 0 -> 31348 bytes
.../src/assets/card-smart-figure.png | Bin 0 -> 23780 bytes
.../src/assets/card-template-figure.png | Bin 0 -> 403733 bytes
.../src/assets/card-widget-figure.png | Bin 0 -> 23374 bytes
apps/marketing/src/assets/connections.png | Bin 0 -> 260085 bytes
.../src/components/(marketing)/callout.tsx | 56 +
.../(marketing)/claim-plan-dialog.tsx | 148 +
.../faster-smarter-beautiful-bento.tsx | 77 +
.../src/components/(marketing)/footer.tsx | 86 +
.../src/components/(marketing)/header.tsx | 32 +
.../src/components/(marketing)/hero.tsx | 217 +
.../(marketing)/open-build-template-bento.tsx | 74 +
.../(marketing)/password-reveal.tsx | 33 +
.../components/(marketing)/pricing-table.tsx | 179 +
.../share-connect-paid-widget-bento.tsx | 91 +
.../src/components/(marketing)/widget.tsx | 400 +
.../components/form/form-error-message.tsx | 35 +
.../src/components/signature-pad/canvas.ts | 321 +
.../src/components/signature-pad/helper.ts | 29 +
.../src/components/signature-pad/index.ts | 1 +
.../src/components/signature-pad/point.ts | 98 +
.../signature-pad/signature-pad.tsx | 212 +
.../src/components/ui/background.tsx | 72 +
.../src/hooks/use-copy-to-clipboard.ts | 28 +
.../src/pages/api/claim-plan/index.ts | 128 +
.../src/pages/api/stripe/webhook/index.ts | 173 +
apps/marketing/src/providers/plausible.tsx | 13 +
apps/marketing/tailwind.config.js | 11 +
apps/marketing/tsconfig.json | 26 +
apps/web/.eslintrc.json | 8 -
apps/web/.gitignore | 37 -
apps/web/README.md | 1 +
apps/web/components/billing-plans.tsx | 70 -
apps/web/components/billing-warning.tsx | 51 -
apps/web/components/editor/editable-field.tsx | 86 -
.../components/editor/field-type-selector.tsx | 68 -
apps/web/components/editor/pdf-editor.tsx | 120 -
apps/web/components/editor/pdf-signer.tsx | 186 -
apps/web/components/editor/pdf-viewer.jsx | 168 -
.../components/editor/recipient-selector.tsx | 93 -
apps/web/components/editor/signable-field.tsx | 90 -
.../components/editor/signature-dialog.tsx | 207 -
apps/web/components/layout.tsx | 53 -
apps/web/components/login.tsx | 169 -
apps/web/components/logo.tsx | 80 -
apps/web/components/navigation.tsx | 269 -
apps/web/components/settings.tsx | 297 -
apps/web/components/signup.tsx | 200 -
apps/web/hooks/use-debounced-value.ts | 18 -
apps/web/next-env.d.ts | 6 +
apps/web/next.config.js | 23 +-
apps/web/package-lock.json | 10729 ----------
apps/web/package.json | 74 +-
apps/web/pages/404.jsx | 36 -
apps/web/pages/500.jsx | 33 -
apps/web/pages/Dockerfile | 30 -
apps/web/pages/_app.tsx | 52 -
apps/web/pages/_document.tsx | 19 -
apps/web/pages/api/auth/[...nextauth].ts | 91 -
apps/web/pages/api/auth/signup.ts | 56 -
apps/web/pages/api/documents/[id].ts | 95 -
.../pages/api/documents/[id]/fields/[fid].ts | 32 -
.../pages/api/documents/[id]/fields/index.ts | 101 -
.../api/documents/[id]/recipients/[rid].ts | 29 -
.../api/documents/[id]/recipients/index.ts | 48 -
apps/web/pages/api/documents/[id]/send.ts | 72 -
apps/web/pages/api/documents/[id]/sign.ts | 191 -
apps/web/pages/api/documents/index.ts | 70 -
apps/web/pages/api/health.ts | 15 -
apps/web/pages/api/stripe/checkout-session.ts | 1 -
apps/web/pages/api/stripe/portal-session.ts | 1 -
apps/web/pages/api/stripe/subscription.ts | 1 -
apps/web/pages/api/stripe/webhook.ts | 5 -
apps/web/pages/api/test-sign/[id].ts | 23 -
apps/web/pages/api/users/index.ts | 53 -
apps/web/pages/api/users/me.ts | 23 -
apps/web/pages/dashboard.tsx | 177 -
apps/web/pages/documents.tsx | 437 -
apps/web/pages/documents/[id]/index.tsx | 130 -
apps/web/pages/documents/[id]/recipients.tsx | 376 -
apps/web/pages/documents/[id]/sign.tsx | 120 -
apps/web/pages/documents/[id]/signed.tsx | 96 -
apps/web/pages/index.tsx | 18 -
apps/web/pages/login.tsx | 34 -
apps/web/pages/settings/account.tsx | 3 -
apps/web/pages/settings/billing.tsx | 1 -
apps/web/pages/settings/index.tsx | 14 -
apps/web/pages/settings/password.tsx | 3 -
apps/web/pages/settings/profile.tsx | 3 -
apps/web/pages/signup.tsx | 42 -
apps/web/process-env.d.ts | 29 +-
.../web/public/documenso-supporter-pledge.pdf | Bin 0 -> 45366 bytes
apps/web/public/fonts/Qwigley-Regular.ttf | Bin 86916 -> 0 bytes
apps/web/public/fonts/caveat.ttf | Bin 0 -> 252080 bytes
apps/web/public/fonts/montserrat.woff2 | Bin 30928 -> 0 bytes
apps/web/public/images/signed_100.png | Bin 2543 -> 0 bytes
apps/web/public/next.svg | 1 +
apps/web/public/opengraph-image.jpg | Bin 0 -> 710015 bytes
apps/web/public/vercel.svg | 1 +
apps/web/resources/certificate.p12 | Bin 2637 -> 0 bytes
apps/web/resources/example.pdf | Bin 39842 -> 0 bytes
apps/web/src/api/claim-plan/fetcher.ts | 41 +
apps/web/src/api/claim-plan/types.ts | 37 +
apps/web/src/api/document/create/fetcher.ts | 34 +
apps/web/src/api/document/create/types.ts | 19 +
.../src/app/(dashboard)/dashboard/page.tsx | 94 +
.../(dashboard)/dashboard/upload-document.tsx | 58 +
.../documents/[id]/loadable-pdf-card.tsx | 37 +
.../app/(dashboard)/documents/[id]/page.tsx | 94 +
.../app/(dashboard)/documents/data-table.tsx | 79 +
.../src/app/(dashboard)/documents/page.tsx | 136 +
apps/web/src/app/(dashboard)/layout.tsx | 38 +
.../app/(dashboard)/settings/billing/page.tsx | 29 +
.../src/app/(dashboard)/settings/layout.tsx | 23 +
.../web/src/app/(dashboard)/settings/page.tsx | 8 +
.../(dashboard)/settings/password/page.tsx | 19 +
.../app/(dashboard)/settings/profile/page.tsx | 19 +
.../src/app/(unauthenticated)/signin/page.tsx | 37 +
.../src/app/(unauthenticated)/signup/page.tsx | 40 +
apps/web/src/app/globals.css | 1 +
apps/web/src/app/layout.tsx | 54 +
apps/web/src/app/page.tsx | 3 +
apps/web/src/assets/Group 1019.png | Bin 0 -> 34342 bytes
apps/web/src/assets/background-pattern.png | Bin 0 -> 1376030 bytes
apps/web/src/assets/card-beautiful-figure.png | Bin 0 -> 13016 bytes
apps/web/src/assets/card-build-figure.png | Bin 0 -> 345360 bytes
.../src/assets/card-connections-figure.png | Bin 0 -> 57546 bytes
apps/web/src/assets/card-fast-figure.png | Bin 0 -> 27968 bytes
apps/web/src/assets/card-open-figure.png | Bin 0 -> 257438 bytes
apps/web/src/assets/card-paid-figure.png | Bin 0 -> 17723 bytes
apps/web/src/assets/card-sharing-figure.png | Bin 0 -> 31348 bytes
apps/web/src/assets/card-smart-figure.png | Bin 0 -> 23780 bytes
apps/web/src/assets/card-template-figure.png | Bin 0 -> 403733 bytes
apps/web/src/assets/card-widget-figure.png | Bin 0 -> 23374 bytes
apps/web/src/assets/connections.png | Bin 0 -> 260085 bytes
.../document-dropzone/document-dropzone.tsx | 151 +
.../(dashboard)/layout/desktop-nav.tsx | 43 +
.../components/(dashboard)/layout/header.tsx | 48 +
.../(dashboard)/layout/mobile-nav.tsx | 0
.../(dashboard)/layout/profile-dropdown.tsx | 93 +
.../(dashboard)/metric-card/metric-card.tsx | 30 +
.../(dashboard)/pdf-viewer/pdf-viewer.tsx | 87 +
.../period-selector/period-selector.tsx | 59 +
.../(dashboard)/period-selector/types.ts | 5 +
.../settings/layout/desktop-nav.tsx | 63 +
.../settings/layout/mobile-nav.tsx | 66 +
.../src/components/(marketing)/callout.tsx | 56 +
.../(marketing)/claim-plan-dialog.tsx | 148 +
.../faster-smarter-beautiful-bento.tsx | 77 +
.../web/src/components/(marketing)/footer.tsx | 86 +
.../web/src/components/(marketing)/header.tsx | 32 +
apps/web/src/components/(marketing)/hero.tsx | 217 +
.../(marketing)/open-build-template-bento.tsx | 74 +
.../(marketing)/password-reveal.tsx | 33 +
.../components/(marketing)/pricing-table.tsx | 179 +
.../share-connect-paid-widget-bento.tsx | 91 +
.../web/src/components/(marketing)/widget.tsx | 400 +
apps/web/src/components/branding/logo.tsx | 30 +
.../components/form/form-error-message.tsx | 35 +
.../components/formatter/document-status.tsx | 45 +
.../src/components/formatter/locale-date.tsx | 21 +
apps/web/src/components/forms/password.tsx | 120 +
apps/web/src/components/forms/profile.tsx | 130 +
apps/web/src/components/forms/signin.tsx | 130 +
apps/web/src/components/forms/signup.tsx | 125 +
.../src/components/signature-pad/canvas.ts | 321 +
.../src/components/signature-pad/helper.ts | 29 +
.../web/src/components/signature-pad/index.ts | 1 +
.../web/src/components/signature-pad/point.ts | 98 +
.../signature-pad/signature-pad.tsx | 216 +
apps/web/src/components/ui/background.tsx | 72 +
apps/web/src/hooks/use-copy-to-clipboard.ts | 28 +
apps/web/src/middleware.ts | 25 +
apps/web/src/pages/api/auth/[...nextauth].ts | 17 +
apps/web/src/pages/api/claim-plan/index.ts | 128 +
apps/web/src/pages/api/document/create.ts | 90 +
.../web/src/pages/api/stripe/webhook/index.ts | 173 +
apps/web/src/pages/api/trpc/[trpc].ts | 12 +
apps/web/src/providers/next-auth.tsx | 15 +
apps/web/src/providers/plausible.tsx | 13 +
apps/web/styles/tailwind.css | 8 -
apps/web/tailwind.config.js | 85 +-
apps/web/tsconfig.json | 36 +-
package-lock.json | 16662 +++++++---------
package.json | 73 +-
packages/eslint-config/index.cjs | 42 +
packages/eslint-config/package.json | 17 +
packages/features/editor/createField.ts | 31 -
packages/features/editor/index.ts | 1 -
packages/features/ee/LICENSE | 40 -
packages/features/ee/README.md | 15 -
packages/features/index.ts | 2 -
packages/features/package.json | 8 -
packages/features/updateUser.ts | 19 -
packages/features/uploadDocument.ts | 43 -
packages/lib/api/createOrUpdateField.ts | 36 -
packages/lib/api/createOrUpdateRecipient.ts | 32 -
packages/lib/api/deleteDocument.ts | 5 -
packages/lib/api/deleteField.ts | 36 -
packages/lib/api/deleteRecipient.ts | 28 -
packages/lib/api/getDocuments.ts | 7 -
packages/lib/api/getUser.ts | 3 -
packages/lib/api/index.ts | 10 -
packages/lib/api/sendSigningRequests.ts | 29 -
packages/lib/api/signDocument.ts | 21 -
packages/lib/api/signup.ts | 12 -
packages/lib/auth.ts | 89 -
packages/lib/classNames.ts | 3 -
.../hooks/use-update-search-params.ts | 21 +
packages/lib/coloredConsole.ts | 40 -
packages/lib/constants.ts | 4 -
packages/lib/constants/auth.ts | 1 +
packages/lib/constants/features.ts | 5 +
packages/lib/env.ts | 1 -
packages/lib/errors/user-exists.ts | 5 +
packages/lib/getSafeRedirectUrl.ts | 24 -
packages/lib/helpers/index.ts | 1 -
packages/lib/helpers/strings.ts | 13 -
packages/lib/index.ts | 6 +-
packages/lib/mail/baseTemplate.ts | 36 -
packages/lib/mail/index.ts | 8 -
packages/lib/mail/sendMail.ts | 47 -
packages/lib/mail/sendSigningDoneMail.ts | 18 -
packages/lib/mail/sendSigningRequest.ts | 47 -
packages/lib/mail/signingCompleteTemplate.ts | 27 -
packages/lib/mail/signingRequestTemplate.ts | 32 -
packages/lib/next-auth/auth-options.ts | 59 +
packages/lib/next-auth/get-server-session.ts | 54 +
packages/lib/package.json | 32 +-
packages/lib/process-env.d.ts | 24 -
packages/lib/query/getDocument.ts | 31 -
.../lib/query/getDocumentsForUserFromToken.ts | 21 -
packages/lib/query/index.ts | 2 -
packages/lib/server-only/auth/hash.ts | 10 +
.../server-only/document/find-documents.ts | 66 +
.../document/get-document-by-id.ts | 15 +
.../lib/server-only/document/get-stats.ts | 30 +
.../lib/server-only/headers/get-locale.tsx | 11 +
.../server-only/pdf/insert-image-in-pdf.ts} | 6 +-
.../server-only/pdf/insert-text-in-pdf.ts} | 17 +-
packages/lib/server-only/redis/index.ts | 8 +
packages/lib/server-only/stripe/index.ts | 9 +
packages/lib/server-only/user/create-user.ts | 35 +
.../lib/server-only/user/get-user-by-email.ts | 13 +
.../lib/server-only/user/get-user-by-id.ts | 13 +
.../lib/server-only/user/update-password.ts | 32 +
.../lib/server-only/user/update-profile.ts | 33 +
packages/lib/server/defaultHandler.ts | 27 -
packages/lib/server/defaultResponder.ts | 19 -
.../lib/server/getServerErrorFromUnknown.ts | 39 -
packages/lib/server/getUserFromToken.ts | 27 -
packages/lib/server/http-error.ts | 39 -
packages/lib/server/index.ts | 5 -
packages/lib/stripe/client.ts | 7 -
packages/lib/stripe/data/plans.ts | 15 -
.../lib/stripe/fetchers/checkout-session.ts | 23 -
.../lib/stripe/fetchers/get-subscription.ts | 14 -
.../lib/stripe/fetchers/portal-session.ts | 19 -
packages/lib/stripe/guards/subscriptions.ts | 35 -
.../lib/stripe/handlers/checkout-session.ts | 92 -
.../lib/stripe/handlers/get-subscription.ts | 63 -
.../lib/stripe/handlers/portal-session.ts | 54 -
packages/lib/stripe/handlers/webhook.ts | 201 -
packages/lib/stripe/index.ts | 6 -
.../providers/subscription-provider.tsx | 89 -
packages/lib/types/find-result-set.ts | 7 +
packages/lib/types/is-document-status.ts | 5 +
packages/lib/universal/get-base-url.ts | 16 +
packages/lib/webstorage.ts | 21 -
packages/pdf/index.ts | 2 -
packages/pdf/package.json | 7 -
packages/prettier-config/index.cjs | 41 +
packages/prettier-config/package.json | 13 +
packages/prisma/.gitignore | 3 -
packages/prisma/client.ts | 1 +
packages/prisma/index.ts | 19 +-
packages/prisma/package-lock.json | 92 -
packages/prisma/package.json | 28 +-
packages/prisma/schema.prisma | 2 +-
packages/prisma/seed.ts | 61 -
packages/signing/PDFArrayCustom.js | 55 -
packages/signing/addDigitalSignature.ts | 73 -
packages/signing/index.ts | 1 -
.../signing/node-signpdf/dist/SignPdfError.js | 33 -
.../node-signpdf/dist/helpers/const.js | 24 -
.../dist/helpers/extractSignature.js | 86 -
.../dist/helpers/findByteRange.js | 50 -
.../node-signpdf/dist/helpers/index.js | 51 -
.../dist/helpers/pdfkit/abstract_reference.js | 25 -
.../dist/helpers/pdfkit/pdfobject.js | 153 -
.../dist/helpers/pdfkitAddPlaceholder.js | 139 -
.../dist/helpers/pdfkitReferenceMock.js | 30 -
.../createBufferPageWithAnnotation.js | 54 -
.../createBufferRootWithAcroform.js | 26 -
.../createBufferTrailer.js | 35 -
.../helpers/plainAddPlaceholder/findObject.js | 31 -
.../plainAddPlaceholder/getIndexFromRef.js | 34 -
.../helpers/plainAddPlaceholder/getPageRef.js | 31 -
.../getPagesDictionaryRef.js | 29 -
.../dist/helpers/plainAddPlaceholder/index.js | 129 -
.../helpers/plainAddPlaceholder/readPdf.js | 67 -
.../plainAddPlaceholder/readRefTable.js | 141 -
.../plainAddPlaceholder/xrefToRefMap.js | 65 -
.../dist/helpers/removeTrailingNewLine.js | 52 -
packages/signing/node-signpdf/dist/signpdf.js | 218 -
packages/signing/package.json | 7 -
packages/tailwind-config/index.cjs | 102 +
packages/tailwind-config/package.json | 17 +
packages/trpc/client/guards.ts | 7 +
packages/trpc/client/index.ts | 18 +
packages/trpc/index.ts | 1 +
packages/trpc/package.json | 18 +
packages/trpc/react/index.tsx | 49 +
packages/trpc/server/adapters/next.ts | 1 +
packages/trpc/server/auth-router/router.ts | 24 +
packages/trpc/server/auth-router/schema.ts | 10 +
packages/trpc/server/context.ts | 21 +
packages/trpc/server/index.ts | 1 +
packages/trpc/server/profile-router/router.ts | 52 +
packages/trpc/server/profile-router/schema.ts | 14 +
packages/trpc/server/router.ts | 11 +
packages/trpc/server/trpc.ts | 36 +
packages/trpc/tsconfig.json | 5 +
packages/tsconfig/README.md | 3 +
packages/tsconfig/base.json | 22 +
packages/tsconfig/nextjs.json | 24 +
packages/tsconfig/package.json | 11 +
packages/tsconfig/react-library.json | 15 +
packages/types/avatar-from-initials.d.ts | 4 -
packages/types/next-auth.d.ts | 19 -
.../ui/components/breadcrumb/breadcrumb.tsx | 48 -
packages/ui/components/breadcrumb/index.ts | 1 -
packages/ui/components/button/Button.tsx | 50 -
packages/ui/components/button/IconButton.tsx | 48 -
packages/ui/components/button/index.ts | 2 -
packages/ui/components/dialog/Dialog.tsx | 106 -
packages/ui/components/dialog/index.ts | 1 -
.../ui/components/selectBox/SelectBox.tsx | 75 -
packages/ui/components/selectBox/index.ts | 1 -
packages/ui/components/tooltip/Tooltip.tsx | 34 -
packages/ui/components/tooltip/index.ts | 1 -
packages/ui/index.ts | 6 +-
packages/ui/lib/utils.ts | 6 +
packages/ui/package.json | 61 +-
packages/ui/primitives/accordion.tsx | 60 +
packages/ui/primitives/alert-dialog.tsx | 136 +
packages/ui/primitives/alert.tsx | 53 +
packages/ui/primitives/aspect-ratio.tsx | 7 +
packages/ui/primitives/avatar.tsx | 51 +
packages/ui/primitives/badge.tsx | 34 +
packages/ui/primitives/button.tsx | 50 +
packages/ui/primitives/calendar.tsx | 59 +
packages/ui/primitives/card.tsx | 116 +
packages/ui/primitives/checkbox.tsx | 30 +
packages/ui/primitives/collapsible.tsx | 11 +
packages/ui/primitives/command.tsx | 149 +
packages/ui/primitives/context-menu.tsx | 199 +
.../ui/primitives/data-table-pagination.tsx | 85 +
packages/ui/primitives/data-table.tsx | 120 +
packages/ui/primitives/dialog.tsx | 114 +
packages/ui/primitives/dropdown-menu.tsx | 197 +
packages/ui/primitives/hover-card.tsx | 31 +
packages/ui/primitives/input.tsx | 25 +
packages/ui/primitives/label.tsx | 23 +
packages/ui/primitives/menubar.tsx | 233 +
packages/ui/primitives/navigation-menu.tsx | 127 +
packages/ui/primitives/popover.tsx | 33 +
packages/ui/primitives/progress.tsx | 27 +
packages/ui/primitives/radio-group.tsx | 41 +
packages/ui/primitives/scroll-area.tsx | 49 +
packages/ui/primitives/select.tsx | 126 +
packages/ui/primitives/separator.tsx | 28 +
packages/ui/primitives/sheet.tsx | 218 +
packages/ui/primitives/skeleton.tsx | 7 +
packages/ui/primitives/slider.tsx | 27 +
packages/ui/primitives/switch.tsx | 31 +
packages/ui/primitives/table.tsx | 99 +
packages/ui/primitives/tabs.tsx | 59 +
packages/ui/primitives/textarea.tsx | 24 +
packages/ui/primitives/toast.tsx | 129 +
packages/ui/primitives/toaster.tsx | 33 +
packages/ui/primitives/toggle.tsx | 44 +
packages/ui/primitives/tooltip.tsx | 32 +
packages/ui/primitives/use-toast.ts | 187 +
packages/ui/styles/theme.css | 95 +
packages/ui/tsconfig.json | 11 +
prettier.config.cjs | 1 +
prettier.config.js | 26 -
turbo.json | 39 +-
432 files changed, 19640 insertions(+), 29359 deletions(-)
create mode 100644 .editorconfig
create mode 100644 .eslintrc.cjs
create mode 100644 .npmrc
create mode 100644 apps/marketing/README.md
create mode 100644 apps/marketing/next-env.d.ts
create mode 100644 apps/marketing/next.config.js
create mode 100644 apps/marketing/package.json
create mode 100644 apps/marketing/postcss.config.js
create mode 100644 apps/marketing/process-env.d.ts
create mode 100644 apps/marketing/public/android-chrome-192x192.png
create mode 100644 apps/marketing/public/android-chrome-512x512.png
create mode 100644 apps/marketing/public/apple-touch-icon.png
create mode 100644 apps/marketing/public/documenso-supporter-pledge.pdf
create mode 100644 apps/marketing/public/favicon-16x16.png
create mode 100644 apps/marketing/public/favicon-32x32.png
create mode 100644 apps/marketing/public/favicon.ico
create mode 100644 apps/marketing/public/fonts/caveat.ttf
rename apps/{web/public/logo_h.png => marketing/public/logo.png} (100%)
create mode 100644 apps/marketing/public/next.svg
create mode 100644 apps/marketing/public/opengraph-image.jpg
create mode 100644 apps/marketing/public/site.webmanifest
create mode 100644 apps/marketing/public/vercel.svg
create mode 100644 apps/marketing/src/api/claim-plan/fetcher.ts
create mode 100644 apps/marketing/src/api/claim-plan/types.ts
create mode 100644 apps/marketing/src/app/(marketing)/claimed/page.tsx
create mode 100644 apps/marketing/src/app/(marketing)/layout.tsx
create mode 100644 apps/marketing/src/app/(marketing)/page.tsx
create mode 100644 apps/marketing/src/app/(marketing)/pricing/page.tsx
create mode 100644 apps/marketing/src/app/globals.css
create mode 100644 apps/marketing/src/app/layout.tsx
create mode 100644 apps/marketing/src/assets/Group 1019.png
create mode 100644 apps/marketing/src/assets/background-pattern.png
create mode 100644 apps/marketing/src/assets/card-beautiful-figure.png
create mode 100644 apps/marketing/src/assets/card-build-figure.png
create mode 100644 apps/marketing/src/assets/card-connections-figure.png
create mode 100644 apps/marketing/src/assets/card-fast-figure.png
create mode 100644 apps/marketing/src/assets/card-open-figure.png
create mode 100644 apps/marketing/src/assets/card-paid-figure.png
create mode 100644 apps/marketing/src/assets/card-sharing-figure.png
create mode 100644 apps/marketing/src/assets/card-smart-figure.png
create mode 100644 apps/marketing/src/assets/card-template-figure.png
create mode 100644 apps/marketing/src/assets/card-widget-figure.png
create mode 100644 apps/marketing/src/assets/connections.png
create mode 100644 apps/marketing/src/components/(marketing)/callout.tsx
create mode 100644 apps/marketing/src/components/(marketing)/claim-plan-dialog.tsx
create mode 100644 apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx
create mode 100644 apps/marketing/src/components/(marketing)/footer.tsx
create mode 100644 apps/marketing/src/components/(marketing)/header.tsx
create mode 100644 apps/marketing/src/components/(marketing)/hero.tsx
create mode 100644 apps/marketing/src/components/(marketing)/open-build-template-bento.tsx
create mode 100644 apps/marketing/src/components/(marketing)/password-reveal.tsx
create mode 100644 apps/marketing/src/components/(marketing)/pricing-table.tsx
create mode 100644 apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx
create mode 100644 apps/marketing/src/components/(marketing)/widget.tsx
create mode 100644 apps/marketing/src/components/form/form-error-message.tsx
create mode 100644 apps/marketing/src/components/signature-pad/canvas.ts
create mode 100644 apps/marketing/src/components/signature-pad/helper.ts
create mode 100644 apps/marketing/src/components/signature-pad/index.ts
create mode 100644 apps/marketing/src/components/signature-pad/point.ts
create mode 100644 apps/marketing/src/components/signature-pad/signature-pad.tsx
create mode 100644 apps/marketing/src/components/ui/background.tsx
create mode 100644 apps/marketing/src/hooks/use-copy-to-clipboard.ts
create mode 100644 apps/marketing/src/pages/api/claim-plan/index.ts
create mode 100644 apps/marketing/src/pages/api/stripe/webhook/index.ts
create mode 100644 apps/marketing/src/providers/plausible.tsx
create mode 100644 apps/marketing/tailwind.config.js
create mode 100644 apps/marketing/tsconfig.json
delete mode 100644 apps/web/.eslintrc.json
delete mode 100644 apps/web/.gitignore
create mode 100644 apps/web/README.md
delete mode 100644 apps/web/components/billing-plans.tsx
delete mode 100644 apps/web/components/billing-warning.tsx
delete mode 100644 apps/web/components/editor/editable-field.tsx
delete mode 100644 apps/web/components/editor/field-type-selector.tsx
delete mode 100644 apps/web/components/editor/pdf-editor.tsx
delete mode 100644 apps/web/components/editor/pdf-signer.tsx
delete mode 100644 apps/web/components/editor/pdf-viewer.jsx
delete mode 100644 apps/web/components/editor/recipient-selector.tsx
delete mode 100644 apps/web/components/editor/signable-field.tsx
delete mode 100644 apps/web/components/editor/signature-dialog.tsx
delete mode 100644 apps/web/components/layout.tsx
delete mode 100644 apps/web/components/login.tsx
delete mode 100644 apps/web/components/logo.tsx
delete mode 100644 apps/web/components/navigation.tsx
delete mode 100644 apps/web/components/settings.tsx
delete mode 100644 apps/web/components/signup.tsx
delete mode 100644 apps/web/hooks/use-debounced-value.ts
create mode 100644 apps/web/next-env.d.ts
delete mode 100644 apps/web/package-lock.json
delete mode 100644 apps/web/pages/404.jsx
delete mode 100644 apps/web/pages/500.jsx
delete mode 100644 apps/web/pages/Dockerfile
delete mode 100644 apps/web/pages/_app.tsx
delete mode 100644 apps/web/pages/_document.tsx
delete mode 100644 apps/web/pages/api/auth/[...nextauth].ts
delete mode 100644 apps/web/pages/api/auth/signup.ts
delete mode 100644 apps/web/pages/api/documents/[id].ts
delete mode 100644 apps/web/pages/api/documents/[id]/fields/[fid].ts
delete mode 100644 apps/web/pages/api/documents/[id]/fields/index.ts
delete mode 100644 apps/web/pages/api/documents/[id]/recipients/[rid].ts
delete mode 100644 apps/web/pages/api/documents/[id]/recipients/index.ts
delete mode 100644 apps/web/pages/api/documents/[id]/send.ts
delete mode 100644 apps/web/pages/api/documents/[id]/sign.ts
delete mode 100644 apps/web/pages/api/documents/index.ts
delete mode 100644 apps/web/pages/api/health.ts
delete mode 100644 apps/web/pages/api/stripe/checkout-session.ts
delete mode 100644 apps/web/pages/api/stripe/portal-session.ts
delete mode 100644 apps/web/pages/api/stripe/subscription.ts
delete mode 100644 apps/web/pages/api/stripe/webhook.ts
delete mode 100644 apps/web/pages/api/test-sign/[id].ts
delete mode 100644 apps/web/pages/api/users/index.ts
delete mode 100644 apps/web/pages/api/users/me.ts
delete mode 100644 apps/web/pages/dashboard.tsx
delete mode 100644 apps/web/pages/documents.tsx
delete mode 100644 apps/web/pages/documents/[id]/index.tsx
delete mode 100644 apps/web/pages/documents/[id]/recipients.tsx
delete mode 100644 apps/web/pages/documents/[id]/sign.tsx
delete mode 100644 apps/web/pages/documents/[id]/signed.tsx
delete mode 100644 apps/web/pages/index.tsx
delete mode 100644 apps/web/pages/login.tsx
delete mode 100644 apps/web/pages/settings/account.tsx
delete mode 100644 apps/web/pages/settings/billing.tsx
delete mode 100644 apps/web/pages/settings/index.tsx
delete mode 100644 apps/web/pages/settings/password.tsx
delete mode 100644 apps/web/pages/settings/profile.tsx
delete mode 100644 apps/web/pages/signup.tsx
create mode 100644 apps/web/public/documenso-supporter-pledge.pdf
delete mode 100644 apps/web/public/fonts/Qwigley-Regular.ttf
create mode 100644 apps/web/public/fonts/caveat.ttf
delete mode 100644 apps/web/public/fonts/montserrat.woff2
delete mode 100644 apps/web/public/images/signed_100.png
create mode 100644 apps/web/public/next.svg
create mode 100644 apps/web/public/opengraph-image.jpg
create mode 100644 apps/web/public/vercel.svg
delete mode 100644 apps/web/resources/certificate.p12
delete mode 100644 apps/web/resources/example.pdf
create mode 100644 apps/web/src/api/claim-plan/fetcher.ts
create mode 100644 apps/web/src/api/claim-plan/types.ts
create mode 100644 apps/web/src/api/document/create/fetcher.ts
create mode 100644 apps/web/src/api/document/create/types.ts
create mode 100644 apps/web/src/app/(dashboard)/dashboard/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/dashboard/upload-document.tsx
create mode 100644 apps/web/src/app/(dashboard)/documents/[id]/loadable-pdf-card.tsx
create mode 100644 apps/web/src/app/(dashboard)/documents/[id]/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/documents/data-table.tsx
create mode 100644 apps/web/src/app/(dashboard)/documents/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/layout.tsx
create mode 100644 apps/web/src/app/(dashboard)/settings/billing/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/settings/layout.tsx
create mode 100644 apps/web/src/app/(dashboard)/settings/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/settings/password/page.tsx
create mode 100644 apps/web/src/app/(dashboard)/settings/profile/page.tsx
create mode 100644 apps/web/src/app/(unauthenticated)/signin/page.tsx
create mode 100644 apps/web/src/app/(unauthenticated)/signup/page.tsx
create mode 100644 apps/web/src/app/globals.css
create mode 100644 apps/web/src/app/layout.tsx
create mode 100644 apps/web/src/app/page.tsx
create mode 100644 apps/web/src/assets/Group 1019.png
create mode 100644 apps/web/src/assets/background-pattern.png
create mode 100644 apps/web/src/assets/card-beautiful-figure.png
create mode 100644 apps/web/src/assets/card-build-figure.png
create mode 100644 apps/web/src/assets/card-connections-figure.png
create mode 100644 apps/web/src/assets/card-fast-figure.png
create mode 100644 apps/web/src/assets/card-open-figure.png
create mode 100644 apps/web/src/assets/card-paid-figure.png
create mode 100644 apps/web/src/assets/card-sharing-figure.png
create mode 100644 apps/web/src/assets/card-smart-figure.png
create mode 100644 apps/web/src/assets/card-template-figure.png
create mode 100644 apps/web/src/assets/card-widget-figure.png
create mode 100644 apps/web/src/assets/connections.png
create mode 100644 apps/web/src/components/(dashboard)/document-dropzone/document-dropzone.tsx
create mode 100644 apps/web/src/components/(dashboard)/layout/desktop-nav.tsx
create mode 100644 apps/web/src/components/(dashboard)/layout/header.tsx
create mode 100644 apps/web/src/components/(dashboard)/layout/mobile-nav.tsx
create mode 100644 apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
create mode 100644 apps/web/src/components/(dashboard)/metric-card/metric-card.tsx
create mode 100644 apps/web/src/components/(dashboard)/pdf-viewer/pdf-viewer.tsx
create mode 100644 apps/web/src/components/(dashboard)/period-selector/period-selector.tsx
create mode 100644 apps/web/src/components/(dashboard)/period-selector/types.ts
create mode 100644 apps/web/src/components/(dashboard)/settings/layout/desktop-nav.tsx
create mode 100644 apps/web/src/components/(dashboard)/settings/layout/mobile-nav.tsx
create mode 100644 apps/web/src/components/(marketing)/callout.tsx
create mode 100644 apps/web/src/components/(marketing)/claim-plan-dialog.tsx
create mode 100644 apps/web/src/components/(marketing)/faster-smarter-beautiful-bento.tsx
create mode 100644 apps/web/src/components/(marketing)/footer.tsx
create mode 100644 apps/web/src/components/(marketing)/header.tsx
create mode 100644 apps/web/src/components/(marketing)/hero.tsx
create mode 100644 apps/web/src/components/(marketing)/open-build-template-bento.tsx
create mode 100644 apps/web/src/components/(marketing)/password-reveal.tsx
create mode 100644 apps/web/src/components/(marketing)/pricing-table.tsx
create mode 100644 apps/web/src/components/(marketing)/share-connect-paid-widget-bento.tsx
create mode 100644 apps/web/src/components/(marketing)/widget.tsx
create mode 100644 apps/web/src/components/branding/logo.tsx
create mode 100644 apps/web/src/components/form/form-error-message.tsx
create mode 100644 apps/web/src/components/formatter/document-status.tsx
create mode 100644 apps/web/src/components/formatter/locale-date.tsx
create mode 100644 apps/web/src/components/forms/password.tsx
create mode 100644 apps/web/src/components/forms/profile.tsx
create mode 100644 apps/web/src/components/forms/signin.tsx
create mode 100644 apps/web/src/components/forms/signup.tsx
create mode 100644 apps/web/src/components/signature-pad/canvas.ts
create mode 100644 apps/web/src/components/signature-pad/helper.ts
create mode 100644 apps/web/src/components/signature-pad/index.ts
create mode 100644 apps/web/src/components/signature-pad/point.ts
create mode 100644 apps/web/src/components/signature-pad/signature-pad.tsx
create mode 100644 apps/web/src/components/ui/background.tsx
create mode 100644 apps/web/src/hooks/use-copy-to-clipboard.ts
create mode 100644 apps/web/src/middleware.ts
create mode 100644 apps/web/src/pages/api/auth/[...nextauth].ts
create mode 100644 apps/web/src/pages/api/claim-plan/index.ts
create mode 100644 apps/web/src/pages/api/document/create.ts
create mode 100644 apps/web/src/pages/api/stripe/webhook/index.ts
create mode 100644 apps/web/src/pages/api/trpc/[trpc].ts
create mode 100644 apps/web/src/providers/next-auth.tsx
create mode 100644 apps/web/src/providers/plausible.tsx
delete mode 100644 apps/web/styles/tailwind.css
create mode 100644 packages/eslint-config/index.cjs
create mode 100644 packages/eslint-config/package.json
delete mode 100644 packages/features/editor/createField.ts
delete mode 100644 packages/features/editor/index.ts
delete mode 100644 packages/features/ee/LICENSE
delete mode 100644 packages/features/ee/README.md
delete mode 100644 packages/features/index.ts
delete mode 100644 packages/features/package.json
delete mode 100644 packages/features/updateUser.ts
delete mode 100644 packages/features/uploadDocument.ts
delete mode 100644 packages/lib/api/createOrUpdateField.ts
delete mode 100644 packages/lib/api/createOrUpdateRecipient.ts
delete mode 100644 packages/lib/api/deleteDocument.ts
delete mode 100644 packages/lib/api/deleteField.ts
delete mode 100644 packages/lib/api/deleteRecipient.ts
delete mode 100644 packages/lib/api/getDocuments.ts
delete mode 100644 packages/lib/api/getUser.ts
delete mode 100644 packages/lib/api/index.ts
delete mode 100644 packages/lib/api/sendSigningRequests.ts
delete mode 100644 packages/lib/api/signDocument.ts
delete mode 100644 packages/lib/api/signup.ts
delete mode 100644 packages/lib/auth.ts
delete mode 100644 packages/lib/classNames.ts
create mode 100644 packages/lib/client-only/hooks/use-update-search-params.ts
delete mode 100644 packages/lib/coloredConsole.ts
delete mode 100644 packages/lib/constants.ts
create mode 100644 packages/lib/constants/auth.ts
create mode 100644 packages/lib/constants/features.ts
delete mode 100644 packages/lib/env.ts
create mode 100644 packages/lib/errors/user-exists.ts
delete mode 100644 packages/lib/getSafeRedirectUrl.ts
delete mode 100644 packages/lib/helpers/index.ts
delete mode 100644 packages/lib/helpers/strings.ts
delete mode 100644 packages/lib/mail/baseTemplate.ts
delete mode 100644 packages/lib/mail/index.ts
delete mode 100644 packages/lib/mail/sendMail.ts
delete mode 100644 packages/lib/mail/sendSigningDoneMail.ts
delete mode 100644 packages/lib/mail/sendSigningRequest.ts
delete mode 100644 packages/lib/mail/signingCompleteTemplate.ts
delete mode 100644 packages/lib/mail/signingRequestTemplate.ts
create mode 100644 packages/lib/next-auth/auth-options.ts
create mode 100644 packages/lib/next-auth/get-server-session.ts
delete mode 100644 packages/lib/process-env.d.ts
delete mode 100644 packages/lib/query/getDocument.ts
delete mode 100644 packages/lib/query/getDocumentsForUserFromToken.ts
delete mode 100644 packages/lib/query/index.ts
create mode 100644 packages/lib/server-only/auth/hash.ts
create mode 100644 packages/lib/server-only/document/find-documents.ts
create mode 100644 packages/lib/server-only/document/get-document-by-id.ts
create mode 100644 packages/lib/server-only/document/get-stats.ts
create mode 100644 packages/lib/server-only/headers/get-locale.tsx
rename packages/{pdf/insertImageInPDF.ts => lib/server-only/pdf/insert-image-in-pdf.ts} (84%)
rename packages/{pdf/insertTextInPDF.ts => lib/server-only/pdf/insert-text-in-pdf.ts} (78%)
create mode 100644 packages/lib/server-only/redis/index.ts
create mode 100644 packages/lib/server-only/stripe/index.ts
create mode 100644 packages/lib/server-only/user/create-user.ts
create mode 100644 packages/lib/server-only/user/get-user-by-email.ts
create mode 100644 packages/lib/server-only/user/get-user-by-id.ts
create mode 100644 packages/lib/server-only/user/update-password.ts
create mode 100644 packages/lib/server-only/user/update-profile.ts
delete mode 100644 packages/lib/server/defaultHandler.ts
delete mode 100644 packages/lib/server/defaultResponder.ts
delete mode 100644 packages/lib/server/getServerErrorFromUnknown.ts
delete mode 100644 packages/lib/server/getUserFromToken.ts
delete mode 100644 packages/lib/server/http-error.ts
delete mode 100644 packages/lib/server/index.ts
delete mode 100644 packages/lib/stripe/client.ts
delete mode 100644 packages/lib/stripe/data/plans.ts
delete mode 100644 packages/lib/stripe/fetchers/checkout-session.ts
delete mode 100644 packages/lib/stripe/fetchers/get-subscription.ts
delete mode 100644 packages/lib/stripe/fetchers/portal-session.ts
delete mode 100644 packages/lib/stripe/guards/subscriptions.ts
delete mode 100644 packages/lib/stripe/handlers/checkout-session.ts
delete mode 100644 packages/lib/stripe/handlers/get-subscription.ts
delete mode 100644 packages/lib/stripe/handlers/portal-session.ts
delete mode 100644 packages/lib/stripe/handlers/webhook.ts
delete mode 100644 packages/lib/stripe/index.ts
delete mode 100644 packages/lib/stripe/providers/subscription-provider.tsx
create mode 100644 packages/lib/types/find-result-set.ts
create mode 100644 packages/lib/types/is-document-status.ts
create mode 100644 packages/lib/universal/get-base-url.ts
delete mode 100644 packages/lib/webstorage.ts
delete mode 100644 packages/pdf/index.ts
delete mode 100644 packages/pdf/package.json
create mode 100644 packages/prettier-config/index.cjs
create mode 100644 packages/prettier-config/package.json
delete mode 100644 packages/prisma/.gitignore
create mode 100644 packages/prisma/client.ts
delete mode 100644 packages/prisma/package-lock.json
delete mode 100644 packages/prisma/seed.ts
delete mode 100644 packages/signing/PDFArrayCustom.js
delete mode 100644 packages/signing/addDigitalSignature.ts
delete mode 100644 packages/signing/index.ts
delete mode 100644 packages/signing/node-signpdf/dist/SignPdfError.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/const.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/extractSignature.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/findByteRange.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/index.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/pdfkit/abstract_reference.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/pdfkit/pdfobject.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/pdfkitAddPlaceholder.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/pdfkitReferenceMock.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/createBufferPageWithAnnotation.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/createBufferRootWithAcroform.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/createBufferTrailer.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/findObject.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/getIndexFromRef.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/getPageRef.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/getPagesDictionaryRef.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/index.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/readPdf.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/readRefTable.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/plainAddPlaceholder/xrefToRefMap.js
delete mode 100644 packages/signing/node-signpdf/dist/helpers/removeTrailingNewLine.js
delete mode 100644 packages/signing/node-signpdf/dist/signpdf.js
delete mode 100644 packages/signing/package.json
create mode 100644 packages/tailwind-config/index.cjs
create mode 100644 packages/tailwind-config/package.json
create mode 100644 packages/trpc/client/guards.ts
create mode 100644 packages/trpc/client/index.ts
create mode 100644 packages/trpc/index.ts
create mode 100644 packages/trpc/package.json
create mode 100644 packages/trpc/react/index.tsx
create mode 100644 packages/trpc/server/adapters/next.ts
create mode 100644 packages/trpc/server/auth-router/router.ts
create mode 100644 packages/trpc/server/auth-router/schema.ts
create mode 100644 packages/trpc/server/context.ts
create mode 100644 packages/trpc/server/index.ts
create mode 100644 packages/trpc/server/profile-router/router.ts
create mode 100644 packages/trpc/server/profile-router/schema.ts
create mode 100644 packages/trpc/server/router.ts
create mode 100644 packages/trpc/server/trpc.ts
create mode 100644 packages/trpc/tsconfig.json
create mode 100644 packages/tsconfig/README.md
create mode 100644 packages/tsconfig/base.json
create mode 100644 packages/tsconfig/nextjs.json
create mode 100644 packages/tsconfig/package.json
create mode 100644 packages/tsconfig/react-library.json
delete mode 100644 packages/types/avatar-from-initials.d.ts
delete mode 100644 packages/types/next-auth.d.ts
delete mode 100644 packages/ui/components/breadcrumb/breadcrumb.tsx
delete mode 100644 packages/ui/components/breadcrumb/index.ts
delete mode 100644 packages/ui/components/button/Button.tsx
delete mode 100644 packages/ui/components/button/IconButton.tsx
delete mode 100644 packages/ui/components/button/index.ts
delete mode 100644 packages/ui/components/dialog/Dialog.tsx
delete mode 100644 packages/ui/components/dialog/index.ts
delete mode 100644 packages/ui/components/selectBox/SelectBox.tsx
delete mode 100644 packages/ui/components/selectBox/index.ts
delete mode 100644 packages/ui/components/tooltip/Tooltip.tsx
delete mode 100644 packages/ui/components/tooltip/index.ts
create mode 100644 packages/ui/lib/utils.ts
create mode 100644 packages/ui/primitives/accordion.tsx
create mode 100644 packages/ui/primitives/alert-dialog.tsx
create mode 100644 packages/ui/primitives/alert.tsx
create mode 100644 packages/ui/primitives/aspect-ratio.tsx
create mode 100644 packages/ui/primitives/avatar.tsx
create mode 100644 packages/ui/primitives/badge.tsx
create mode 100644 packages/ui/primitives/button.tsx
create mode 100644 packages/ui/primitives/calendar.tsx
create mode 100644 packages/ui/primitives/card.tsx
create mode 100644 packages/ui/primitives/checkbox.tsx
create mode 100644 packages/ui/primitives/collapsible.tsx
create mode 100644 packages/ui/primitives/command.tsx
create mode 100644 packages/ui/primitives/context-menu.tsx
create mode 100644 packages/ui/primitives/data-table-pagination.tsx
create mode 100644 packages/ui/primitives/data-table.tsx
create mode 100644 packages/ui/primitives/dialog.tsx
create mode 100644 packages/ui/primitives/dropdown-menu.tsx
create mode 100644 packages/ui/primitives/hover-card.tsx
create mode 100644 packages/ui/primitives/input.tsx
create mode 100644 packages/ui/primitives/label.tsx
create mode 100644 packages/ui/primitives/menubar.tsx
create mode 100644 packages/ui/primitives/navigation-menu.tsx
create mode 100644 packages/ui/primitives/popover.tsx
create mode 100644 packages/ui/primitives/progress.tsx
create mode 100644 packages/ui/primitives/radio-group.tsx
create mode 100644 packages/ui/primitives/scroll-area.tsx
create mode 100644 packages/ui/primitives/select.tsx
create mode 100644 packages/ui/primitives/separator.tsx
create mode 100644 packages/ui/primitives/sheet.tsx
create mode 100644 packages/ui/primitives/skeleton.tsx
create mode 100644 packages/ui/primitives/slider.tsx
create mode 100644 packages/ui/primitives/switch.tsx
create mode 100644 packages/ui/primitives/table.tsx
create mode 100644 packages/ui/primitives/tabs.tsx
create mode 100644 packages/ui/primitives/textarea.tsx
create mode 100644 packages/ui/primitives/toast.tsx
create mode 100644 packages/ui/primitives/toaster.tsx
create mode 100644 packages/ui/primitives/toggle.tsx
create mode 100644 packages/ui/primitives/tooltip.tsx
create mode 100644 packages/ui/primitives/use-toast.ts
create mode 100644 packages/ui/styles/theme.css
create mode 100644 packages/ui/tsconfig.json
create mode 100644 prettier.config.cjs
delete mode 100644 prettier.config.js
diff --git a/.dockerignore b/.dockerignore
index 636f6f165..d1595af42 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,19 +1,17 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-**/node_modules
-**/.pnp
-**.pnp.js
+node_modules
+.pnp
+.pnp.js
# testing
-**/coverage
+coverage
# next.js
-**/.next/
-**/out/
-
-# production
-**/build
+.next/
+out/
+build
# misc
.DS_Store
@@ -23,16 +21,16 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-.pnpm-debug.log*
# local env files
-.env*.local
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# turbo
+.turbo
# vercel
.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-.env
-.env.example
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..79621be8e
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = space
+indent_size = 2
diff --git a/.env.example b/.env.example
index f5c2486fe..fea246621 100644
--- a/.env.example
+++ b/.env.example
@@ -1,54 +1,19 @@
-# Database
-# Option 1: You can use the provided remote test database, courtesy of the documenso team: postgres://documenso_test_user:GnmLG14u12sd9zHsd4vVWwP40WneFJMo@dpg-cf2hljh4reb5o45oqpq0-a.oregon-postgres.render.com/documenso_test_e2i3
-# Option 2: Set up a local Postgres SQL instance (RECOMMENDED)
-# Option 3: Use the provided dx setup (RECOMMENDED)
-# => postgres://documenso:password@127.0.0.1:54320/documenso
-#
-# ⚠ WARNING: The test database can be reset or taken offline at any point.
-# ⚠ WARNING: Please be aware that nothing written to the test database is private.
-DATABASE_URL=''
+NEXTAUTH_URL="http://localhost:3000"
+NEXTAUTH_SECRET="secret"
-# URL
-NEXT_PUBLIC_WEBAPP_URL='http://localhost:3000'
+NEXT_PUBLIC_SITE_URL="http://localhost:3000"
+NEXT_PUBLIC_APP_URL="http://localhost:3000"
-# AUTH
-# For more see here: https://next-auth.js.org
-NEXTAUTH_SECRET='lorem ipsum sit dolor random string for encryption this could literally be anything'
-NEXTAUTH_URL='http://localhost:3000'
+NEXT_PRIVATE_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/documenso"
-# SIGNING
-CERT_FILE_PATH=
-CERT_PASSPHRASE=
-CERT_FILE_ENCODING=
-
-# MAIL (NODEMAILER)
-# SENDGRID
-# Get a Sendgrid Api key here: https://signup.sendgrid.com
-SENDGRID_API_KEY=''
-
-# SMTP
-# Set SMTP credentials to use SMTP instead of the Sendgrid API.
-# If you're using the dx setup you can use the following values:
-#
-# SMTP_MAIL_HOST='127.0.0.1'
-# SMTP_MAIL_PORT='2500'
-# SMTP_MAIL_USER='documenso'
-# SMTP_MAIL_PASSWORD='documenso'
-SMTP_MAIL_HOST=''
-SMTP_MAIL_PORT=''
-SMTP_MAIL_USER=''
-SMTP_MAIL_PASSWORD=''
-
-# Sender for signing requests and completion mails.
-MAIL_FROM='documenso@localhost.com'
-
-# STRIPE
-STRIPE_API_KEY=
-STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID=
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID=
-#FEATURE FLAGS
-# Allow users to register via the /signup page. Otherwise they will be redirect to the home page.
-NEXT_PUBLIC_ALLOW_SIGNUP=true
-NEXT_PUBLIC_ALLOW_SUBSCRIPTIONS=false
+NEXT_PRIVATE_STRIPE_API_KEY=
+NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET=
+
+NEXT_PUBLIC_SUBSCRIPTIONS_ENABLED=false
+
+# This is only required for the marketing site
+NEXT_PRIVATE_REDIS_URL=
+NEXT_PRIVATE_REDIS_TOKEN=
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 000000000..8113ada52
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,13 @@
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ root: true,
+ extends: ['@documenso/eslint-config'],
+ rules: {
+ '@next/next/no-img-element': 'off',
+ },
+ settings: {
+ next: {
+ rootDir: ['apps/*/'],
+ },
+ },
+};
diff --git a/.gitignore b/.gitignore
index d7f66a11a..d1595af42 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,17 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-/node_modules
-/.pnp
+node_modules
+.pnp
.pnp.js
# testing
-/coverage
+coverage
# next.js
-/.next/
-/out/
-
-# production
-/build
+.next/
+out/
+build
# misc
.DS_Store
@@ -23,19 +21,16 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-.pnpm-debug.log*
# local env files
-.env*.local
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# turbo
+.turbo
# vercel
.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-.env
-.env.example
-
-# turborepo
-.turbo
\ No newline at end of file
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 000000000..ded82e2f6
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+auto-install-peers = true
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 36b7f475c..38d6f1e73 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,25 +1,10 @@
{
- "files.autoSave": "afterDelay",
- "editor.formatOnSave": true,
- "editor.formatOnPaste": true,
- "editor.formatOnType": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode",
- "[html]": {
- "editor.defaultFormatter": "vscode.html-language-features"
- },
- "[prisma]": {
- "editor.defaultFormatter": "Prisma.prisma"
- },
- "editor.codeActionsOnSave": {
- "source.removeUnusedImports": false
- },
"typescript.tsdk": "node_modules/typescript/lib",
- "spellright.language": [
- "de"
- ],
- "spellright.documentTypes": [
- "markdown",
- "latex",
- "plaintext"
- ]
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": true
+ },
+ "eslint.validate": ["typescript", "typescriptreact", "javascript", "javascriptreact"],
+ "javascript.preferences.importModuleSpecifier": "non-relative",
+ "javascript.preferences.useAliasesForRenames": false,
+ "typescript.enablePromptUseWorkspaceTsdk": true
}
diff --git a/README.md b/README.md
index 98f11d736..bfcd6aabf 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
-
+
diff --git a/apps/marketing/README.md b/apps/marketing/README.md
new file mode 100644
index 000000000..950b58aee
--- /dev/null
+++ b/apps/marketing/README.md
@@ -0,0 +1 @@
+# @documenso/marketing
diff --git a/apps/marketing/next-env.d.ts b/apps/marketing/next-env.d.ts
new file mode 100644
index 000000000..fd36f9494
--- /dev/null
+++ b/apps/marketing/next-env.d.ts
@@ -0,0 +1,6 @@
+///
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/apps/marketing/next.config.js b/apps/marketing/next.config.js
new file mode 100644
index 000000000..b57b41780
--- /dev/null
+++ b/apps/marketing/next.config.js
@@ -0,0 +1,15 @@
+/* eslint-disable @typescript-eslint/no-var-requires */
+const path = require('path');
+
+const { parsed: env } = require('dotenv').config({
+ path: path.join(__dirname, '../../.env.local'),
+});
+
+/** @type {import('next').NextConfig} */
+const config = {
+ reactStrictMode: true,
+ transpilePackages: ['@documenso/lib', '@documenso/prisma', '@documenso/trpc', '@documenso/ui'],
+ env,
+};
+
+module.exports = config;
diff --git a/apps/marketing/package.json b/apps/marketing/package.json
new file mode 100644
index 000000000..e34c66b99
--- /dev/null
+++ b/apps/marketing/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@documenso/marketing",
+ "version": "0.1.0",
+ "private": true,
+ "license": "AGPL-3.0",
+ "scripts": {
+ "dev": "PORT=3001 next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@documenso/lib": "*",
+ "@documenso/tailwind-config": "*",
+ "@documenso/trpc": "*",
+ "@documenso/ui": "*",
+ "@hookform/resolvers": "^3.1.0",
+ "framer-motion": "^10.12.8",
+ "lucide-react": "^0.214.0",
+ "micro": "^10.0.1",
+ "next": "13.4.1",
+ "next-auth": "^4.22.1",
+ "next-plausible": "^3.7.2",
+ "perfect-freehand": "^1.2.0",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "react-hook-form": "^7.43.9",
+ "react-icons": "^4.8.0",
+ "typescript": "5.0.4",
+ "zod": "^3.21.4"
+ },
+ "devDependencies": {
+ "@types/node": "20.1.0",
+ "@types/react": "18.2.6",
+ "@types/react-dom": "18.2.4"
+ }
+}
diff --git a/apps/marketing/postcss.config.js b/apps/marketing/postcss.config.js
new file mode 100644
index 000000000..12a703d90
--- /dev/null
+++ b/apps/marketing/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/apps/marketing/process-env.d.ts b/apps/marketing/process-env.d.ts
new file mode 100644
index 000000000..ac170a616
--- /dev/null
+++ b/apps/marketing/process-env.d.ts
@@ -0,0 +1,13 @@
+declare namespace NodeJS {
+ export interface ProcessEnv {
+ NEXT_PUBLIC_SITE_URL?: string;
+
+ NEXT_PRIVATE_DATABASE_URL: string;
+
+ NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string;
+ NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID: string;
+
+ NEXT_PRIVATE_STRIPE_API_KEY: string;
+ NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET: string;
+ }
+}
diff --git a/apps/marketing/public/android-chrome-192x192.png b/apps/marketing/public/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..7613afd598ce429e1adcd9adad2b9ecca4aaca4c
GIT binary patch
literal 16131
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
VjV~vBiY5R6002ovPDHLkV1m>OD4qZS
literal 0
HcmV?d00001
diff --git a/apps/marketing/public/android-chrome-512x512.png b/apps/marketing/public/android-chrome-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d6675a6a4969da8c9194b72b45bd578e76972e8
GIT binary patch
literal 49685
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 s@G
zi;xhrEhOgqKaRa;DEoWPE$+zHeW6ZHWu#{~L4BT6${cJ87k(&f8-LR&NdAN?^p%$f~?2or%OoiQL%Rk#aOMZtM-Ou{Bh{l7`
zpOzlK%+R!TM=`jsqZC@a?O6J{pD%AfmHGfszBDIcmw%U^EgPZoYFweIb#snqoZ@a`
z=W%aIe2Vb|uTt&>2nU8+_J6O%z)o!^AbmCz4UpH5qJotx0|;#w_KUQ2jq3Qm*dT2G
zCTzb(C_REXHA|e^z5VH>F5zCfvkSG@`16j|)vx`hZQPs22ZsmqgXU~8WLV%BJ1Yd?
z`C%)V5qo1Tgazh7gLBbou?!c(Ek7EQeF=_KuDRZ05OF_6__w@&ebFsDgQQO*NNZaq
zrAKdt;>?zNIeAZIM-_p-B*JTW5PUSeI=
z*0OJ+b`jd{=W}Rc6d6lA428qNKzKfF-Z2+i*r}eGQGu+0KAlSt9;CJf8@egrHW4>~
zw&E23DKD0(37u%?DY}d9!==t5rN7hJj1c!XNPqX5q@SXH+GL9Fq5d>Y^@Pg<M`kfB*bT@4@;!?(oBh+RBHq$q^Su#XiB
zXE4L#?KG;ESdkI0&oVZyHZC%X(Cxgf1j2*fMMo3nyD!QLnV=roQSv^H4m+N6KL=_29H!l$rteIZo@(e1xzC?semq(_0Z_=x$M#-MkgUdrYpZEGVIA91TY6-thj$zPWDR2%Y`j?KPswH<_9Cnw!Ta#MxWMB)(P1jmlFpG=3!y`Ygf-
zAI5*{GJx%0$%oGQS-C3(1TtVseInrvG~)RQKPHumByxOtR%ni3f0#*D@$uioB(`Sq
z0y|bZrQVD(pZXh@@z;DBD(QhkB)>3@*0_|@6g)J#?Wkcr0n#5tlb&Qxa6WAxyYK{6
zhH{Y>b_G7uoOxVT?{i{_5(1B!Qf(?EE8~1z8ko!1|JdXWo*51dQ)CJYYSCLJS2+v(F1R-Kbo{@
zPVQD}Ocf~|bcZ+;P;AG1>T=>l<;#``a%Z!`qKwStwmk{O3?YVyZ>bJPe-gfXwD^q_
zq{1G#WseOn`bS#_68_eS_FaIqgtkF_gY;m~orB2DW17WZk>`Q;s`o#*zl`S>x=wug
zfRMq>oVrTQ&7w3d-_=U~&B29(&bZJT!u!`fFEB^-xsuq27DQ%b`-AQED@N7IZ3Jn~
zg@ND{_L2V=4aK>iHIsL6UOuF77$`9@0T;#9WZhBU{wFTDdiy^Ntu>{hj@PgnyfyB?rj7uyAt!yO!~=#VjYQ%gVpT=AAF(
zy_0=SC3m16?9qx=Jp&5GK*kbgP(C|OJ9b-*+}5jWx5&ogAD{KWLj=BeG10k)?H>)z
z72NsYFURM_+N5gTyn$fHRv*nh@4BK3^DTO7?Sok@|33-bYV!ecN4_?nx5?jl2{E%P
zOi7@`1d~+X#ix
zQKeB+_@r$;s?hS%?NZDHd8b~0%2I>W9Knpfy+)ijJuGR~qZC2eXC28kyZGGYPY|)s
zv~}HA*r~&Z#sDbnH}eAS6-Rq<)IFp9Mp1I;0C}+Q*<+FA7uToA)!el=fD(K+fkl|t
zfnD&~WoE0As6Qx2L+bywwC9;Vl%$$*>ml>QA{6lsw9lFdhi8mz!LJv!HlSy^Y34pF
zxSjHOmBNb7IpavCcTOB_Io;7kMttHKXN0Wl=<8lLZO$C%Z!Z&GnGw?4!P%CFOsA@K
zm%Ox0(c!1~GS4OingcYu^XmO*lq~hLAK&TSo)*c`8~4V!X1DOna~tZlt0>g}%}2ei
zz2!~>*+h^1iDCQM)!)v)&>}?j8`3n2$i|v{77`%KHrD?!Zjh;jarUaZcdctPSfdDQ
z$;k{#V0id$yPi^u8T`s?@U)N9iv~Z(TZYmx;-S7X9Ddp}W(Vse97Op2FK%mR_LsQX
z#Br$ooN9Z*H0E1Rj_NR!Y&!(*Z*iX-%1v6QP|}}%*J)jxPxS-3$c!9<&H8ubFj|h~
z`{P4w)q|hvKRwXo=&jyL46e${eJfi2aI~L8b-rMr1JM?a3y@RCJa@v%XDEmx!>5KW
z(1F|<_V$kKr*3_=zXYUtl|`;~lz$2DVr5RXtKS>4PxpRK?$nT&)s0rS_BbXScA*8a
zgZ}Nnopd@~{v!J{W`{q>rq3qsUrIIYS%dPc*Q$$ZWv1po%TWo2XG(xlb@jEga017s
zb!h}3b~vE*`4&!XUM$zAIOi>K6-XLBti4Q5OW*l(R_XSAIlSauCL!(JL(BPX5~$0b
zYi7_ai?l0$#xA$kX9!1H$OM@JIY%XSIaqoKGnQfu&!{V)2QfnfXFXzLN7M?7Kuk*K
zJ+c^Dfmg@Uz=1cw5JebzUuPV6XL2PR)$W@zivWb#sC&iujEJ8k?Czh8!|89`aX()8
zVV5EAHuZzO-AJTm;#9ZB5~8
z2+K{TIYJO97Kx3sP3{9^1=>6*tX1q4%@S&JS^m_Dx+5UEfrR$1(uu_}PVjVIP_?#%
ziGAF8kEF94(YWcS`)+uolS$s6pyKHy%uQQ1a#<
zixoXmRAvO5C3=Jxb7*7_15L9Yf
zfUOgGXJ?l}DWc&_$E{OQN7~x3V#ckf2P5wmuvd7%g%(U5Ps+!!=^()vjl3T{*+lye
z83CUA%3`pjw?G%{aF}V(bQ?HWh3Y!ackD`5j!!jk+ee`<`dj<(;aE{?$>TeIWSDG_
zvzcgA()`GGXq&B6t-UaH#h8mLh`h-ij#n6amd%m}+h*NF0X7eXNo!t-sIj(a`Hb0o
zGX8m!3mmyU2m7Zn_=@XQPnGgcWoAvm=S#;$TqZA1`t%r@5Tms0o`FMiRmcj@cip