From 9c7910a070cb388f541c0cb296d9d54f4dedd36c Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Wed, 5 Feb 2025 15:55:20 +1100 Subject: [PATCH] fix: chao nextjs --- apps/remix/package.json | 25 +- apps/web/README.md | 1 - apps/web/ambient.d.ts | 1 - apps/web/example/cert.p12 | Bin 2637 -> 0 bytes apps/web/next-env.d.ts | 6 - apps/web/next.config.js | 108 - apps/web/package.json | 77 - apps/web/postcss.config.js | 6 - apps/web/process-env.d.ts | 23 - .../admin/documents/[id]/admin-actions.tsx | 81 - .../(dashboard)/admin/documents/[id]/page.tsx | 99 - .../admin/documents/[id]/recipient-item.tsx | 196 - .../[id]/super-delete-document-dialog.tsx | 135 - .../admin/documents/document-results.tsx | 165 - .../app/(dashboard)/admin/documents/page.tsx | 21 - apps/web/src/app/(dashboard)/admin/layout.tsx | 33 - .../leaderboard/data-table-leaderboard.tsx | 169 - .../leaderboard/fetch-leaderboard.actions.ts | 25 - .../(dashboard)/admin/leaderboard/page.tsx | 60 - apps/web/src/app/(dashboard)/admin/nav.tsx | 112 - apps/web/src/app/(dashboard)/admin/page.tsx | 5 - .../admin/site-settings/banner-form.tsx | 208 - .../(dashboard)/admin/site-settings/page.tsx | 35 - .../src/app/(dashboard)/admin/stats/page.tsx | 158 - .../admin/stats/signer-conversion-chart.tsx | 64 - .../admin/stats/user-with-document.tsx | 95 - .../(dashboard)/admin/subscriptions/page.tsx | 80 - .../admin/users/[id]/delete-user-dialog.tsx | 142 - .../admin/users/[id]/disable-user-dialog.tsx | 141 - .../admin/users/[id]/enable-user-dialog.tsx | 130 - .../users/[id]/multiselect-role-combobox.tsx | 85 - .../app/(dashboard)/admin/users/[id]/page.tsx | 165 - .../admin/users/data-table-users.tsx | 166 - .../admin/users/fetch-users.actions.ts | 17 - .../src/app/(dashboard)/admin/users/page.tsx | 47 - .../[id]/document-page-view-button.tsx | 121 - .../[id]/document-page-view-dropdown.tsx | 211 - .../[id]/document-page-view-information.tsx | 70 - .../document-page-view-recent-activity.tsx | 166 - .../[id]/document-page-view-recipients.tsx | 174 - .../documents/[id]/document-page-view.tsx | 270 - .../documents/[id]/edit-document.tsx | 425 - .../[id]/edit/document-edit-page-view.tsx | 147 - .../(dashboard)/documents/[id]/edit/page.tsx | 15 - .../(dashboard)/documents/[id]/loading.tsx | 42 - .../[id]/logs/document-logs-data-table.tsx | 163 - .../[id]/logs/document-logs-page-view.tsx | 179 - .../[id]/logs/download-audit-log-button.tsx | 80 - .../[id]/logs/download-certificate-button.tsx | 89 - .../(dashboard)/documents/[id]/logs/page.tsx | 15 - .../app/(dashboard)/documents/[id]/page.tsx | 15 - .../(dashboard)/documents/[id]/sent/page.tsx | 23 - .../_action-items/resend-document.tsx | 197 - .../documents/data-table-action-button.tsx | 146 - .../documents/data-table-action-dropdown.tsx | 244 - .../documents/data-table-sender-filter.tsx | 70 - .../documents/data-table-title.tsx | 63 - .../app/(dashboard)/documents/data-table.tsx | 127 - .../documents/delete-document-dialog.tsx | 207 - .../documents/documents-page-view.tsx | 174 - .../documents/duplicate-document-dialog.tsx | 124 - .../app/(dashboard)/documents/empty-state.tsx | 53 - .../documents/move-document-dialog.tsx | 129 - .../src/app/(dashboard)/documents/page.tsx | 29 - .../upcoming-profile-claim-teaser.tsx | 59 - .../(dashboard)/documents/upload-document.tsx | 159 - apps/web/src/app/(dashboard)/layout.tsx | 54 - .../settings/billing/billing-plans.tsx | 138 - .../billing/billing-portal-button.tsx | 70 - .../billing/create-billing-portal.action.ts | 17 - .../billing/create-checkout.action.ts | 40 - .../app/(dashboard)/settings/billing/page.tsx | 146 - .../src/app/(dashboard)/settings/layout.tsx | 31 - .../web/src/app/(dashboard)/settings/page.tsx | 8 - .../(dashboard)/settings/password/page.tsx | 5 - .../profile/delete-account-dialog.tsx | 155 - .../app/(dashboard)/settings/profile/page.tsx | 40 - .../settings/public-profile/page.tsx | 17 - .../public-profile-page-view.tsx | 227 - .../public-templates-data-table.tsx | 209 - .../settings/security/activity/page.tsx | 37 - .../user-security-activity-data-table.tsx | 162 - .../(dashboard)/settings/security/page.tsx | 146 - .../passkeys/create-passkey-dialog.tsx | 261 - .../settings/security/passkeys/page.tsx | 44 - .../user-passkeys-data-table-actions.tsx | 219 - .../passkeys/user-passkeys-data-table.tsx | 129 - .../teams/accept-team-invitation-button.tsx | 49 - .../teams/decline-team-invitation-button.tsx | 50 - .../app/(dashboard)/settings/teams/page.tsx | 46 - .../settings/teams/team-email-usage.tsx | 126 - .../settings/teams/team-invitations.tsx | 115 - .../app/(dashboard)/settings/tokens/page.tsx | 94 - .../settings/webhooks/[id]/page.tsx | 216 - .../(dashboard)/settings/webhooks/page.tsx | 111 - .../templates/[id]/edit/edit-template.tsx | 304 - .../(dashboard)/templates/[id]/edit/page.tsx | 14 - .../[id]/edit/template-edit-page-view.tsx | 100 - .../app/(dashboard)/templates/[id]/page.tsx | 15 - .../template-direct-link-dialog-wrapper.tsx | 48 - .../template-page-view-documents-table.tsx | 275 - .../[id]/template-page-view-information.tsx | 67 - .../template-page-view-recent-activity.tsx | 159 - .../[id]/template-page-view-recipients.tsx | 69 - .../templates/[id]/template-page-view.tsx | 204 - .../templates/data-table-action-dropdown.tsx | 125 - .../templates/data-table-templates.tsx | 211 - .../templates/data-table-title.tsx | 38 - .../templates/delete-template-dialog.tsx | 91 - .../templates/duplicate-template-dialog.tsx | 95 - .../app/(dashboard)/templates/empty-state.tsx | 22 - .../templates/move-template-dialog.tsx | 140 - .../templates/new-template-dialog.tsx | 132 - .../src/app/(dashboard)/templates/page.tsx | 22 - .../templates/template-direct-link-badge.tsx | 49 - .../templates/template-direct-link-dialog.tsx | 485 - .../templates/templates-page-view.tsx | 81 - .../templates/use-template-dialog.tsx | 576 - .../%5F%5Fhtmltopdf/audit-log/data-table.tsx | 95 - .../%5F%5Fhtmltopdf/audit-log/page.tsx | 169 - .../%5F%5Fhtmltopdf/certificate/page.tsx | 321 - apps/web/src/app/(profile)/layout.tsx | 35 - .../src/app/(profile)/p/[url]/not-found.tsx | 37 - apps/web/src/app/(profile)/p/[url]/page.tsx | 206 - apps/web/src/app/(profile)/profile-header.tsx | 91 - .../d/[token]/configure-direct-template.tsx | 161 - .../(recipient)/d/[token]/direct-template.tsx | 176 - .../app/(recipient)/d/[token]/not-found.tsx | 40 - .../src/app/(recipient)/d/[token]/page.tsx | 97 - .../d/[token]/sign-direct-template.tsx | 388 - .../d/[token]/signing-auth-page.tsx | 59 - apps/web/src/app/(recipient)/layout.tsx | 41 - .../(share)/share/[slug]/opengraph/route.tsx | 154 - .../web/src/app/(share)/share/[slug]/page.tsx | 39 - .../app/(signing)/sign/[token]/auto-sign.tsx | 237 - .../(signing)/sign/[token]/checkbox-field.tsx | 299 - .../sign/[token]/complete/claim-account.tsx | 166 - .../complete/document-preview-button.tsx | 40 - .../sign/[token]/complete/layout.tsx | 21 - .../(signing)/sign/[token]/complete/page.tsx | 233 - .../poll-until-document-completed.tsx | 32 - .../app/(signing)/sign/[token]/date-field.tsx | 159 - .../sign/[token]/document-action-auth-2fa.tsx | 190 - .../[token]/document-action-auth-account.tsx | 80 - .../[token]/document-action-auth-dialog.tsx | 91 - .../[token]/document-action-auth-passkey.tsx | 264 - .../sign/[token]/document-auth-provider.tsx | 230 - .../(signing)/sign/[token]/dropdown-field.tsx | 216 - .../(signing)/sign/[token]/email-field.tsx | 137 - .../src/app/(signing)/sign/[token]/form.tsx | 266 - .../(signing)/sign/[token]/initials-field.tsx | 143 - .../src/app/(signing)/sign/[token]/layout.tsx | 35 - .../app/(signing)/sign/[token]/name-field.tsx | 232 - .../sign/[token]/no-longer-available.tsx | 75 - .../(signing)/sign/[token]/number-field.tsx | 345 - .../src/app/(signing)/sign/[token]/page.tsx | 165 - .../app/(signing)/sign/[token]/provider.tsx | 74 - .../(signing)/sign/[token]/radio-field.tsx | 194 - .../sign/[token]/reject-document-dialog.tsx | 170 - .../(signing)/sign/[token]/rejected/page.tsx | 110 - .../(signing)/sign/[token]/sign-dialog.tsx | 150 - .../sign/[token]/signature-field.tsx | 336 - .../sign/[token]/signing-auth-page.tsx | 72 - .../sign/[token]/signing-field-container.tsx | 188 - .../sign/[token]/signing-page-view.tsx | 216 - .../app/(signing)/sign/[token]/text-field.tsx | 352 - .../(signing)/sign/[token]/waiting/page.tsx | 100 - .../t/[teamUrl]/documents/[id]/edit/page.tsx | 24 - .../t/[teamUrl]/documents/[id]/logs/page.tsx | 23 - .../t/[teamUrl]/documents/[id]/page.tsx | 23 - .../(teams)/t/[teamUrl]/documents/page.tsx | 28 - .../web/src/app/(teams)/t/[teamUrl]/error.tsx | 63 - .../t/[teamUrl]/layout-billing-banner.tsx | 140 - .../src/app/(teams)/t/[teamUrl]/layout.tsx | 78 - .../src/app/(teams)/t/[teamUrl]/not-found.tsx | 39 - .../t/[teamUrl]/settings/billing/page.tsx | 102 - .../(teams)/t/[teamUrl]/settings/layout.tsx | 61 - .../t/[teamUrl]/settings/members/page.tsx | 48 - .../app/(teams)/t/[teamUrl]/settings/page.tsx | 209 - .../preferences/branding-preferences.tsx | 319 - .../preferences/document-preferences.tsx | 312 - .../t/[teamUrl]/settings/preferences/page.tsx | 52 - .../settings/public-profile/page.tsx | 31 - .../settings/team-email-dropdown.tsx | 96 - .../settings/team-transfer-status.tsx | 129 - .../t/[teamUrl]/settings/tokens/page.tsx | 127 - .../[teamUrl]/settings/webhooks/[id]/page.tsx | 218 - .../t/[teamUrl]/settings/webhooks/page.tsx | 116 - .../t/[teamUrl]/templates/[id]/edit/page.tsx | 24 - .../t/[teamUrl]/templates/[id]/page.tsx | 25 - .../(teams)/t/[teamUrl]/templates/page.tsx | 29 - .../articles/signature-disclosure/page.tsx | 170 - .../(unauthenticated)/check-email/page.tsx | 38 - .../forgot-password/page.tsx | 44 - apps/web/src/app/(unauthenticated)/layout.tsx | 34 - .../reset-password/[token]/page.tsx | 50 - .../(unauthenticated)/reset-password/page.tsx | 38 - .../src/app/(unauthenticated)/signin/page.tsx | 56 - .../src/app/(unauthenticated)/signup/page.tsx | 31 - .../team/decline/[token]/page.tsx | 142 - .../team/invite/[token]/page.tsx | 147 - .../team/verify/email/[token]/page.tsx | 148 - .../team/verify/transfer/[token]/page.tsx | 127 - .../unverified-account/page.tsx | 41 - .../verify-email/[token]/client.tsx | 56 - .../verify-email/[token]/page.tsx | 130 - .../(unauthenticated)/verify-email/page.tsx | 45 - apps/web/src/app/api/v1/openapi/page.tsx | 11 - apps/web/src/app/embed/authenticate.tsx | 32 - apps/web/src/app/embed/base-schema.ts | 12 - apps/web/src/app/embed/client-loading.tsx | 7 - apps/web/src/app/embed/completed.tsx | 37 - apps/web/src/app/embed/css-vars.ts | 59 - .../app/embed/direct/[[...url]]/client.tsx | 504 - .../app/embed/direct/[[...url]]/not-found.tsx | 3 - .../src/app/embed/direct/[[...url]]/page.tsx | 112 - .../src/app/embed/direct/[[...url]]/schema.ts | 20 - apps/web/src/app/embed/document-fields.tsx | 186 - apps/web/src/app/embed/paywall.tsx | 7 - .../src/app/embed/sign/[[...url]]/client.tsx | 377 - .../app/embed/sign/[[...url]]/not-found.tsx | 3 - .../src/app/embed/sign/[[...url]]/page.tsx | 119 - .../src/app/embed/sign/[[...url]]/schema.ts | 16 - apps/web/src/app/embed/util.ts | 20 - apps/web/src/app/globals.css | 1 - apps/web/src/app/layout.tsx | 102 - apps/web/src/app/not-found.tsx | 35 - apps/web/src/app/page.tsx | 7 - .../avatar/avatar-with-recipient.tsx | 75 - .../(dashboard)/avatar/stack-avatar.tsx | 55 - .../avatar/stack-avatars-with-tooltip.tsx | 168 - .../(dashboard)/avatar/stack-avatars.tsx | 46 - .../(dashboard)/common/command-menu.tsx | 324 - .../document-search/document-search.tsx | 47 - .../components/(dashboard)/layout/banner.tsx | 29 - .../(dashboard)/layout/desktop-nav.tsx | 92 - .../components/(dashboard)/layout/header.tsx | 102 - .../(dashboard)/layout/menu-switcher.tsx | 304 - .../(dashboard)/layout/mobile-navigation.tsx | 100 - .../layout/verify-email-banner.tsx | 135 - .../(dashboard)/metric-card/metric-card.tsx | 39 - .../period-selector/period-selector.tsx | 69 - .../(dashboard)/period-selector/types.ts | 6 - .../refresh-on-focus/refresh-on-focus.tsx | 23 - .../settings/layout/activity-back.tsx | 24 - .../settings/layout/desktop-nav.tsx | 123 - .../(dashboard)/settings/layout/header.tsx | 35 - .../settings/layout/mobile-nav.tsx | 126 - .../(dashboard)/settings/token/contants.ts | 9 - .../settings/token/delete-token-dialog.tsx | 196 - .../webhooks/create-webhook-dialog.tsx | 255 - .../webhooks/delete-webhook-dialog.tsx | 183 - .../webhooks/trigger-multiselect-combobox.tsx | 96 - .../(teams)/dialogs/add-team-email-dialog.tsx | 198 - .../dialogs/create-team-checkout-dialog.tsx | 187 - .../(teams)/dialogs/create-team-dialog.tsx | 235 - .../(teams)/dialogs/delete-team-dialog.tsx | 176 - .../dialogs/delete-team-member-dialog.tsx | 120 - .../dialogs/invite-team-member-dialog.tsx | 417 - .../(teams)/dialogs/leave-team-dialog.tsx | 118 - .../dialogs/remove-team-email-dialog.tsx | 166 - .../(teams)/dialogs/transfer-team-dialog.tsx | 274 - .../dialogs/update-team-email-dialog.tsx | 175 - .../dialogs/update-team-member-dialog.tsx | 200 - .../(teams)/forms/update-team-form.tsx | 182 - .../(teams)/settings/layout/desktop-nav.tsx | 129 - .../(teams)/settings/layout/mobile-nav.tsx | 138 - .../tables/current-user-teams-data-table.tsx | 170 - .../pending-user-teams-data-table-actions.tsx | 58 - .../tables/pending-user-teams-data-table.tsx | 151 - .../team-billing-invoices-data-table.tsx | 163 - .../tables/team-member-invites-data-table.tsx | 210 - .../tables/team-members-data-table.tsx | 218 - .../tables/teams-member-page-data-table.tsx | 102 - .../user-settings-teams-page-data-table.tsx | 90 - .../(teams)/team-billing-portal-button.tsx | 44 - apps/web/src/components/branding/logo.tsx | 30 - .../document-history-sheet-changes.tsx | 28 - .../document/document-history-sheet.tsx | 390 - .../document/document-read-only-fields.tsx | 173 - .../document-recipient-link-copy-dialog.tsx | 151 - .../components/formatter/document-status.tsx | 79 - .../components/formatter/template-type.tsx | 55 - .../2fa/disable-authenticator-app-dialog.tsx | 201 - .../2fa/enable-authenticator-app-dialog.tsx | 274 - .../forms/2fa/recovery-code-list.tsx | 61 - .../forms/2fa/view-recovery-codes-dialog.tsx | 177 - .../web/src/components/forms/avatar-image.tsx | 193 - .../src/components/forms/forgot-password.tsx | 98 - apps/web/src/components/forms/password.tsx | 163 - apps/web/src/components/forms/profile.tsx | 147 - .../forms/public-profile-claim-dialog.tsx | 201 - .../components/forms/public-profile-form.tsx | 286 - .../src/components/forms/reset-password.tsx | 148 - .../forms/search-param-selector.tsx | 50 - .../forms/send-confirmation-email.tsx | 100 - apps/web/src/components/forms/signin.tsx | 520 - apps/web/src/components/forms/signup.tsx | 284 - apps/web/src/components/forms/token.tsx | 297 - apps/web/src/components/forms/v2/signup.tsx | 547 - .../components/general/signing-disclosure.tsx | 35 - .../web/src/components/partials/not-found.tsx | 76 - .../manage-public-template-dialog.tsx | 468 - apps/web/src/components/ui/background.tsx | 72 - .../components/ui/user-profile-skeleton.tsx | 84 - .../src/components/ui/user-profile-timur.tsx | 90 - apps/web/src/helpers/get-asset-buffer.ts | 16 - apps/web/src/helpers/truncate-title.ts | 10 - apps/web/src/middleware.ts | 123 - apps/web/src/pages/api/auth/[...nextauth].ts | 110 - apps/web/src/pages/api/avatar/[id].tsx | 34 - .../pages/api/branding/logo/team/[teamId].ts | 59 - apps/web/src/pages/api/feature-flag/all.ts | 7 - apps/web/src/pages/api/feature-flag/get.ts | 7 - apps/web/src/pages/api/health.ts | 21 - apps/web/src/pages/api/jobs/[[...handler]].ts | 10 - apps/web/src/pages/api/limits/index.ts | 3 - apps/web/src/pages/api/share/index.ts | 23 - .../web/src/pages/api/stripe/webhook/index.ts | 7 - apps/web/src/pages/api/trpc/[trpc].ts | 56 - apps/web/src/pages/api/v1/[...ts-rest].tsx | 17 - apps/web/src/pages/api/v1/me/index.ts | 3 - apps/web/src/pages/api/v1/openapi.json.ts | 7 - .../api/v1/zapier/list-documents/index.ts | 3 - .../pages/api/v1/zapier/subscribe/index.ts | 3 - .../pages/api/v1/zapier/unsubscribe/index.ts | 3 - apps/web/src/pages/api/v2-beta/[...trpc].ts | 60 - .../web/src/pages/api/v2-beta/openapi.json.ts | 9 - apps/web/src/pages/api/webhook/trigger.ts | 12 - apps/web/src/providers/next-auth.tsx | 15 - apps/web/src/providers/plausible.tsx | 13 - apps/web/src/providers/posthog.tsx | 54 - apps/web/src/providers/team.tsx | 31 - apps/web/tailwind.config.js | 17 - apps/web/tsconfig.json | 28 - package-lock.json | 29847 +++++++++------- package.json | 4 +- packages/ee/package.json | 1 - packages/email/mailer.ts | 17 +- packages/prisma/package.json | 4 +- packages/trpc/package.json | 1 - packages/ui/package.json | 2 +- 342 files changed, 16120 insertions(+), 52738 deletions(-) delete mode 100644 apps/web/README.md delete mode 100644 apps/web/ambient.d.ts delete mode 100644 apps/web/example/cert.p12 delete mode 100644 apps/web/next-env.d.ts delete mode 100644 apps/web/next.config.js delete mode 100644 apps/web/package.json delete mode 100644 apps/web/postcss.config.js delete mode 100644 apps/web/process-env.d.ts delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/document-results.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/documents/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/layout.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/leaderboard/fetch-leaderboard.actions.ts delete mode 100644 apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/nav.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/site-settings/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/stats/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/stats/signer-conversion-chart.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/stats/user-with-document.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/subscriptions/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/[id]/disable-user-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/[id]/enable-user-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/[id]/multiselect-role-combobox.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx delete mode 100644 apps/web/src/app/(dashboard)/admin/users/fetch-users.actions.ts delete mode 100644 apps/web/src/app/(dashboard)/admin/users/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recent-activity.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/edit/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/loading.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/logs/download-audit-log-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/logs/download-certificate-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/logs/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/data-table-sender-filter.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/data-table-title.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/data-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/documents-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/empty-state.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/upcoming-profile-claim-teaser.tsx delete mode 100644 apps/web/src/app/(dashboard)/documents/upload-document.tsx delete mode 100644 apps/web/src/app/(dashboard)/layout.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/billing/billing-plans.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/billing/create-billing-portal.action.ts delete mode 100644 apps/web/src/app/(dashboard)/settings/billing/create-checkout.action.ts delete mode 100644 apps/web/src/app/(dashboard)/settings/billing/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/layout.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/password/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/profile/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/public-profile/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/public-profile/public-profile-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/activity/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/teams/decline-team-invitation-button.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/teams/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/teams/team-invitations.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/tokens/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/settings/webhooks/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/edit/edit-template.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/edit/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/edit/template-edit-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-direct-link-dialog-wrapper.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-page-view-information.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recent-activity.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/[id]/template-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/data-table-action-dropdown.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/data-table-templates.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/data-table-title.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/empty-state.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/page.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/templates-page-view.tsx delete mode 100644 apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx delete mode 100644 apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/data-table.tsx delete mode 100644 apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx delete mode 100644 apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx delete mode 100644 apps/web/src/app/(profile)/layout.tsx delete mode 100644 apps/web/src/app/(profile)/p/[url]/not-found.tsx delete mode 100644 apps/web/src/app/(profile)/p/[url]/page.tsx delete mode 100644 apps/web/src/app/(profile)/profile-header.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/direct-template.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/not-found.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/page.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx delete mode 100644 apps/web/src/app/(recipient)/d/[token]/signing-auth-page.tsx delete mode 100644 apps/web/src/app/(recipient)/layout.tsx delete mode 100644 apps/web/src/app/(share)/share/[slug]/opengraph/route.tsx delete mode 100644 apps/web/src/app/(share)/share/[slug]/page.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/auto-sign.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/document-preview-button.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/page.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/poll-until-document-completed.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/date-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/document-auth-provider.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/email-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/form.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/initials-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/layout.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/name-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/number-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/page.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/provider.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/radio-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/signature-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/signing-auth-page.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/signing-field-container.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/text-field.tsx delete mode 100644 apps/web/src/app/(signing)/sign/[token]/waiting/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/edit/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/logs/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/documents/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/error.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/not-found.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/layout.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/members/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/preferences/branding-preferences.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/preferences/document-preferences.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/preferences/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/public-profile/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/team-email-dropdown.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/[id]/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/edit/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/page.tsx delete mode 100644 apps/web/src/app/(teams)/t/[teamUrl]/templates/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/check-email/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/forgot-password/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/layout.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/reset-password/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/reset-password/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/signin/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/signup/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/unverified-account/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/verify-email/[token]/client.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx delete mode 100644 apps/web/src/app/(unauthenticated)/verify-email/page.tsx delete mode 100644 apps/web/src/app/api/v1/openapi/page.tsx delete mode 100644 apps/web/src/app/embed/authenticate.tsx delete mode 100644 apps/web/src/app/embed/base-schema.ts delete mode 100644 apps/web/src/app/embed/client-loading.tsx delete mode 100644 apps/web/src/app/embed/completed.tsx delete mode 100644 apps/web/src/app/embed/css-vars.ts delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/client.tsx delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/not-found.tsx delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/page.tsx delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/schema.ts delete mode 100644 apps/web/src/app/embed/document-fields.tsx delete mode 100644 apps/web/src/app/embed/paywall.tsx delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/client.tsx delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/not-found.tsx delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/page.tsx delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/schema.ts delete mode 100644 apps/web/src/app/embed/util.ts delete mode 100644 apps/web/src/app/globals.css delete mode 100644 apps/web/src/app/layout.tsx delete mode 100644 apps/web/src/app/not-found.tsx delete mode 100644 apps/web/src/app/page.tsx delete mode 100644 apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx delete mode 100644 apps/web/src/components/(dashboard)/avatar/stack-avatar.tsx delete mode 100644 apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx delete mode 100644 apps/web/src/components/(dashboard)/avatar/stack-avatars.tsx delete mode 100644 apps/web/src/components/(dashboard)/common/command-menu.tsx delete mode 100644 apps/web/src/components/(dashboard)/document-search/document-search.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/banner.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/desktop-nav.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/header.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/menu-switcher.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx delete mode 100644 apps/web/src/components/(dashboard)/metric-card/metric-card.tsx delete mode 100644 apps/web/src/components/(dashboard)/period-selector/period-selector.tsx delete mode 100644 apps/web/src/components/(dashboard)/period-selector/types.ts delete mode 100644 apps/web/src/components/(dashboard)/refresh-on-focus/refresh-on-focus.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/layout/activity-back.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/layout/desktop-nav.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/layout/header.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/layout/mobile-nav.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/token/contants.ts delete mode 100644 apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx delete mode 100644 apps/web/src/components/(dashboard)/settings/webhooks/trigger-multiselect-combobox.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/create-team-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx delete mode 100644 apps/web/src/components/(teams)/forms/update-team-form.tsx delete mode 100644 apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx delete mode 100644 apps/web/src/components/(teams)/settings/layout/mobile-nav.tsx delete mode 100644 apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/pending-user-teams-data-table-actions.tsx delete mode 100644 apps/web/src/components/(teams)/tables/pending-user-teams-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/team-billing-invoices-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/team-member-invites-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/team-members-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx delete mode 100644 apps/web/src/components/(teams)/team-billing-portal-button.tsx delete mode 100644 apps/web/src/components/branding/logo.tsx delete mode 100644 apps/web/src/components/document/document-history-sheet-changes.tsx delete mode 100644 apps/web/src/components/document/document-history-sheet.tsx delete mode 100644 apps/web/src/components/document/document-read-only-fields.tsx delete mode 100644 apps/web/src/components/document/document-recipient-link-copy-dialog.tsx delete mode 100644 apps/web/src/components/formatter/document-status.tsx delete mode 100644 apps/web/src/components/formatter/template-type.tsx delete mode 100644 apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx delete mode 100644 apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx delete mode 100644 apps/web/src/components/forms/2fa/recovery-code-list.tsx delete mode 100644 apps/web/src/components/forms/2fa/view-recovery-codes-dialog.tsx delete mode 100644 apps/web/src/components/forms/avatar-image.tsx delete mode 100644 apps/web/src/components/forms/forgot-password.tsx delete mode 100644 apps/web/src/components/forms/password.tsx delete mode 100644 apps/web/src/components/forms/profile.tsx delete mode 100644 apps/web/src/components/forms/public-profile-claim-dialog.tsx delete mode 100644 apps/web/src/components/forms/public-profile-form.tsx delete mode 100644 apps/web/src/components/forms/reset-password.tsx delete mode 100644 apps/web/src/components/forms/search-param-selector.tsx delete mode 100644 apps/web/src/components/forms/send-confirmation-email.tsx delete mode 100644 apps/web/src/components/forms/signin.tsx delete mode 100644 apps/web/src/components/forms/signup.tsx delete mode 100644 apps/web/src/components/forms/token.tsx delete mode 100644 apps/web/src/components/forms/v2/signup.tsx delete mode 100644 apps/web/src/components/general/signing-disclosure.tsx delete mode 100644 apps/web/src/components/partials/not-found.tsx delete mode 100644 apps/web/src/components/templates/manage-public-template-dialog.tsx delete mode 100644 apps/web/src/components/ui/background.tsx delete mode 100644 apps/web/src/components/ui/user-profile-skeleton.tsx delete mode 100644 apps/web/src/components/ui/user-profile-timur.tsx delete mode 100644 apps/web/src/helpers/get-asset-buffer.ts delete mode 100644 apps/web/src/helpers/truncate-title.ts delete mode 100644 apps/web/src/middleware.ts delete mode 100644 apps/web/src/pages/api/auth/[...nextauth].ts delete mode 100644 apps/web/src/pages/api/avatar/[id].tsx delete mode 100644 apps/web/src/pages/api/branding/logo/team/[teamId].ts delete mode 100644 apps/web/src/pages/api/feature-flag/all.ts delete mode 100644 apps/web/src/pages/api/feature-flag/get.ts delete mode 100644 apps/web/src/pages/api/health.ts delete mode 100644 apps/web/src/pages/api/jobs/[[...handler]].ts delete mode 100644 apps/web/src/pages/api/limits/index.ts delete mode 100644 apps/web/src/pages/api/share/index.ts delete mode 100644 apps/web/src/pages/api/stripe/webhook/index.ts delete mode 100644 apps/web/src/pages/api/trpc/[trpc].ts delete mode 100644 apps/web/src/pages/api/v1/[...ts-rest].tsx delete mode 100644 apps/web/src/pages/api/v1/me/index.ts delete mode 100644 apps/web/src/pages/api/v1/openapi.json.ts delete mode 100644 apps/web/src/pages/api/v1/zapier/list-documents/index.ts delete mode 100644 apps/web/src/pages/api/v1/zapier/subscribe/index.ts delete mode 100644 apps/web/src/pages/api/v1/zapier/unsubscribe/index.ts delete mode 100644 apps/web/src/pages/api/v2-beta/[...trpc].ts delete mode 100644 apps/web/src/pages/api/v2-beta/openapi.json.ts delete mode 100644 apps/web/src/pages/api/webhook/trigger.ts delete mode 100644 apps/web/src/providers/next-auth.tsx delete mode 100644 apps/web/src/providers/plausible.tsx delete mode 100644 apps/web/src/providers/posthog.tsx delete mode 100644 apps/web/src/providers/team.tsx delete mode 100644 apps/web/tailwind.config.js delete mode 100644 apps/web/tsconfig.json diff --git a/apps/remix/package.json b/apps/remix/package.json index 1f69bf91a..bbbe66ed0 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -25,26 +25,45 @@ "@hono/node-server": "^1.13.7", "@hono/trpc-server": "^0.3.4", "@hono/zod-validator": "^0.4.2", + "@hookform/resolvers": "^3.1.0", "@lingui/core": "^4.11.3", "@lingui/detect-locale": "^4.11.1", "@lingui/macro": "^4.11.3", "@lingui/react": "^4.11.3", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.3", "@react-router/node": "^7.1.5", "@react-router/serve": "^7.1.5", "autoprefixer": "^10.4.13", + "colord": "^2.9.3", "framer-motion": "^10.12.8", "hono": "4.6.15", "hono-react-router-adapter": "^0.6.2", + "input-otp": "^1.2.4", + "luxon": "^3.4.0", + "lucide-react": "^0.279.0", "isbot": "^5.1.17", "jsonwebtoken": "^9.0.2", + "papaparse": "^5.4.1", "posthog-js": "^1.75.3", "posthog-node": "^3.1.1", "react": "^18", "react-dom": "^18", "react-router": "^7.1.5", + "react-call": "^1.3.0", + "react-dropzone": "^14.2.3", + "react-hook-form": "^7.43.9", + "react-hotkeys-hook": "^4.4.1", + "react-icons": "^4.11.0", + "react-rnd": "^10.4.1", + "recharts": "^2.7.2", + "remeda": "^2.17.3", "remix-themes": "^2.0.4", + "sharp": "0.32.6", + "uqr": "^0.1.2", + "ua-parser-js": "^1.0.37", "tailwindcss": "^3.4.15", "ts-pattern": "^5.0.5" }, @@ -55,6 +74,10 @@ "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@simplewebauthn/types": "^9.0.1", + "@types/formidable": "^2.0.6", + "@types/luxon": "^3.3.1", + "@types/ua-parser-js": "^0.7.39", "cross-env": "^7.0.3", "remix-flat-routes": "^0.8.4", "tsx": "^4.11.0", @@ -63,4 +86,4 @@ "vite-plugin-babel-macros": "^1.0.6", "vite-tsconfig-paths": "^5.1.4" } -} +} \ No newline at end of file diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index 2df72cac5..000000000 --- a/apps/web/README.md +++ /dev/null @@ -1 +0,0 @@ -# @documenso/web diff --git a/apps/web/ambient.d.ts b/apps/web/ambient.d.ts deleted file mode 100644 index 54b8c1d7c..000000000 --- a/apps/web/ambient.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module '@documenso/tailwind-config'; diff --git a/apps/web/example/cert.p12 b/apps/web/example/cert.p12 deleted file mode 100644 index 532ee19abea35f767bc0fa2cdcfa81f8f5a71d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2637 zcmV-T3bOSuf(l6j0Ru3C3J(SeDuzgg_YDCD0ic2k00e>w{4jzE_%MP5uLcP!hDe6@ z4FLxRpn?RTFoFb}0s#Opf&`TY2`Yw2hW8Bt2LUh~1_~;MNQUg5g;9>wxv`8^#sE}apPVlOwcRA7bb4Pvyw zY@Z*4U#SGhAzg^p=(6+0gBgI$7_5kQYD~N&*x>2`7+chb#^ORwP7%$;-YK=nfS4n> zGieP!XPKpq^;pq0&}05OD?v7B678OMPB8v_8YzDWznc9kem72Dgd2i> zJ~LH2m*%O0e}c3xy8N0(C)YiTbUntum)ec7hhv6bAK>h(O#F=*Y;@2}75HvG&Gl)T zVabc7xX*uS%Zyh_;qbTcJm=sr3>V5@Z<xng(MjcDhRP@`;~=rvpvy;H7*E zWJ3m~ac9#%%v!yaf`|ZfA-@c*eW_IvzU^$8nYK-+_#r9UZAFq8`s+>b)HatxFdroC zKO2r`_~d5f?jLL|))^ikkZoY&KZ`)b416I-Zr6wVTDtkZL%Txfvmq97cmU4@ioKTj zTY~{LY!0Dt6n~7A6IY-2!2NUxU4?;ine{s1)K@Oswdzf$u1DS&M{yu1;#LaBt^AF* zxgXCKPM(w6HX^_c!>w7mb{siBM95m_gyBz_Fd$6>%D25~j#ST5-=4wMN*n}@8(XHP zUTM_v)dKt;5xRf;y4-x)r-B`N%PS1?iO-*hsRtmJ!qJ?ReVF;{rlm20{9Gl>wv5lW1vW`KuL7f_DM;u)T zIbTeUJ1654u;Ibh>*;kz9t+-n_TRI;S28ultx_*dmDj@|*`{8X;r93#UBiZfIvp;W zKM8meF~GpEre$>_QcPAL^oObo&leE?alqNxoC+<|IGm;H9Oy&!l|p61wk&cyASm~e zne)6?$A;Kq&$c!+&FCleBaZ(%>><9Nyw>dgCmYTl!(X`aYM)xL=s5&LNQUFES=38@Xnk3B0lc8%CJ*_zbI=CGTvJ}&NfP?M0UcRHIhUYKx*$pHd(6Z zN^oQ&+Ff|6~e!TViD1>lI)$ zv4Zfr_tkwp&)T}(CvygCEzrvLPvQi`S+`hxRv0b}2s3B!HmEQiJ0|OQZSj~0O*DcC zw)@ZlTQ7)Pd5|D~F#*^NdW}8w;7(8%ycCsNF-Ok$gPQ+3t-C8<5XXgj@CKu%#Buo_ z9O#WxJL!TJ|HT2UGE7Tei~8BIkz2L%$ZT2XycAq zb*FtSgvTE+pB6vgq4AeVEq9B}g95oImQMVOrE#$UrdKrN2dT9yQMyp=9KEat-*D2a z;C_7q0mbLQadgburNA^{7!A|;Ha@oFCf86BL10V7A;v)gB}gw?w*vBkeJl6E(mjiK z*MXYWb{;wT8eHJf6t^|&_vIKuaqYhITV#7xKh=@cX&y3v`kO;brME#K(XjD+AGcxr z)w8raTh%7T0-T384K(uwTQ8`>Yy_S;#Rrw4Ve$&_5m9H@#&GA^e0&vynJYKo?DF!8?l_MG` zTsE9VDLg1`X08O!j2SQxHvKa#L)|@&lX;esD^yk14{}}l%S!c)myvl8oGMLv$|9zD zX-?}@qS`CY`hK=5oSdS`v27L^Tb7X@7omUhZw2L}95A?2Uoh%fRlm8-l@L79Xw}IC4$CCn{K=1cCNpZHcO<6tNPK5EeJ$;R7%EK6%dx5X8CDBdWAb&@8l{|@|2~wQ z<&906xrjPI=Uza%(ao3`D1_=D_f1AepYos@gUMis%F2xWGX704fZjQ_s)AmyPopNU z56Ig8(bxa=kz2z=UgO4yn6!!+XZVH8ai{_bN?ojFe`_k;5Ox!@iI?%z-z8F)sCC6h z-Hg+Z$BZ#0Fe3&DDuzgg_YDCF6)_eB6o;hqW$WqLgxs?}etAdy2>#T_J}@ybAutIB v1uG5%0vZJX1Qd(@p-5Ut^*+VAPJv0L;H?OjlQjeg4-dtrpNk@=0s;sC;D+Q! diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts deleted file mode 100644 index fd36f9494..000000000 --- a/apps/web/next-env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/web/next.config.js b/apps/web/next.config.js deleted file mode 100644 index 5b8f3e60b..000000000 --- a/apps/web/next.config.js +++ /dev/null @@ -1,108 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const fs = require('fs'); -const path = require('path'); -const { version } = require('./package.json'); -const { withAxiom } = require('next-axiom'); - -const ENV_FILES = ['.env', '.env.local', `.env.${process.env.NODE_ENV || 'development'}`]; - -ENV_FILES.forEach((file) => { - require('dotenv').config({ - path: path.join(__dirname, `../../${file}`), - }); -}); - -// !: This is a temp hack to get caveat working without placing it back in the public directory. -// !: By inlining this at build time we should be able to sign faster. -const FONT_CAVEAT_BYTES = fs.readFileSync( - path.join(__dirname, '../../packages/assets/fonts/caveat.ttf'), -); - -const FONT_NOTO_SANS_BYTES = fs.readFileSync( - path.join(__dirname, '../../packages/assets/fonts/noto-sans.ttf'), -); - -/** @type {import('next').NextConfig} */ -const config = { - output: process.env.DOCKER_OUTPUT ? 'standalone' : undefined, - experimental: { - outputFileTracingRoot: path.join(__dirname, '../../'), - serverComponentsExternalPackages: ['@node-rs/bcrypt', '@documenso/pdf-sign', 'playwright'], - serverActions: { - bodySizeLimit: '50mb', - }, - swcPlugins: [['@lingui/swc-plugin', {}]], - }, - reactStrictMode: true, - transpilePackages: [ - '@documenso/assets', - '@documenso/ee', - '@documenso/lib', - '@documenso/prisma', - '@documenso/tailwind-config', - '@documenso/trpc', - '@documenso/ui', - ], - env: { - APP_VERSION: version, - NEXT_PUBLIC_PROJECT: 'web', - FONT_CAVEAT_URI: `data:font/ttf;base64,${FONT_CAVEAT_BYTES.toString('base64')}`, - FONT_NOTO_SANS_URI: `data:font/ttf;base64,${FONT_NOTO_SANS_BYTES.toString('base64')}`, - }, - modularizeImports: { - 'lucide-react': { - transform: 'lucide-react/dist/esm/icons/{{ kebabCase member }}', - }, - }, - webpack: (config, { isServer }) => { - // fixes: Module not found: Can’t resolve ‘../build/Release/canvas.node’ - if (isServer) { - config.resolve.alias.canvas = false; - } - - config.module.rules.push({ - test: /\.po$/, - use: { - loader: '@lingui/loader', - }, - }); - - return config; - }, - async rewrites() { - return [ - { - source: '/ingest/:path*', - destination: 'https://eu.posthog.com/:path*', - }, - ]; - }, - async redirects() { - return [ - { - permanent: true, - source: '/documents/:id/sign', - destination: '/sign/:token', - has: [ - { - type: 'query', - key: 'token', - }, - ], - }, - { - permanent: true, - source: '/documents/:id/signed', - destination: '/sign/:token', - has: [ - { - type: 'query', - key: 'token', - }, - ], - }, - ]; - }, -}; - -module.exports = withAxiom(config); diff --git a/apps/web/package.json b/apps/web/package.json deleted file mode 100644 index 9f5053e1e..000000000 --- a/apps/web/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "@documenso/web", - "version": "1.9.0-rc.11", - "private": true, - "license": "AGPL-3.0", - "scripts": { - "dev": "next dev -p 3000", - "build": "npm run translate --prefix ../../ && next build", - "start": "next start", - "lint": "next lint", - "e2e:prepare": "next build && next start", - "lint:fix": "next lint --fix", - "clean": "rimraf .next && rimraf node_modules", - "copy:pdfjs": "node ../../scripts/copy-pdfjs.cjs" - }, - "dependencies": { - "@documenso/api": "*", - "@documenso/assets": "*", - "@documenso/ee": "*", - "@documenso/lib": "*", - "@documenso/prisma": "*", - "@documenso/trpc": "*", - "@documenso/ui": "*", - "@hookform/resolvers": "^3.1.0", - "@lingui/macro": "^4.11.3", - "@lingui/react": "^4.11.3", - "@simplewebauthn/browser": "^9.0.1", - "@simplewebauthn/server": "^9.0.3", - "colord": "^2.9.3", - "cookie-es": "^1.0.0", - "formidable": "^2.1.1", - "framer-motion": "^10.12.8", - "input-otp": "^1.2.4", - "lucide-react": "^0.279.0", - "luxon": "^3.4.0", - "micro": "^10.0.1", - "next": "14.2.6", - "next-auth": "4.24.5", - "next-axiom": "^1.5.1", - "next-plausible": "^3.10.1", - "next-themes": "^0.2.1", - "papaparse": "^5.4.1", - "perfect-freehand": "^1.2.0", - "posthog-js": "^1.75.3", - "posthog-node": "^3.1.1", - "react": "^18", - "react-call": "^1.3.0", - "react-dom": "^18", - "react-dropzone": "^14.2.3", - "react-hook-form": "^7.43.9", - "react-hotkeys-hook": "^4.4.1", - "react-icons": "^4.11.0", - "react-rnd": "^10.4.1", - "recharts": "^2.7.2", - "remeda": "^2.17.3", - "sharp": "0.32.6", - "trpc-to-openapi": "2.0.4", - "ts-pattern": "^5.0.5", - "ua-parser-js": "^1.0.37", - "uqr": "^0.1.2", - "zod": "3.24.1" - }, - "devDependencies": { - "@documenso/tailwind-config": "*", - "@lingui/loader": "^4.11.3", - "@lingui/swc-plugin": "4.0.8", - "@simplewebauthn/types": "^9.0.1", - "@types/formidable": "^2.0.6", - "@types/luxon": "^3.3.1", - "@types/node": "^20", - "@types/papaparse": "^5.3.14", - "@types/react": "^18", - "@types/react-dom": "^18", - "@types/ua-parser-js": "^0.7.39", - "typescript": "5.6.2" - } -} diff --git a/apps/web/postcss.config.js b/apps/web/postcss.config.js deleted file mode 100644 index 12a703d90..000000000 --- a/apps/web/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/apps/web/process-env.d.ts b/apps/web/process-env.d.ts deleted file mode 100644 index ae9995df7..000000000 --- a/apps/web/process-env.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare namespace NodeJS { - export interface ProcessEnv { - NEXT_PUBLIC_WEBAPP_URL?: string; - NEXT_PUBLIC_MARKETING_URL?: string; - NEXT_PRIVATE_INTERNAL_WEBAPP_URL?:string; - - NEXT_PRIVATE_DATABASE_URL: string; - - NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string; - - NEXT_PRIVATE_STRIPE_API_KEY: string; - NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET: string; - - NEXT_PRIVATE_GOOGLE_CLIENT_ID: string; - NEXT_PRIVATE_GOOGLE_CLIENT_SECRET: string; - - NEXT_PRIVATE_OIDC_WELL_KNOWN: string; - NEXT_PRIVATE_OIDC_CLIENT_ID: string; - NEXT_PRIVATE_OIDC_CLIENT_SECRET: string; - NEXT_PRIVATE_OIDC_ALLOW_SIGNUP?: string; - NEXT_PRIVATE_OIDC_SKIP_VERIFY?: string; - } -} diff --git a/apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx b/apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx deleted file mode 100644 index 214cacd38..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx +++ /dev/null @@ -1,81 +0,0 @@ -'use client'; - -import Link from 'next/link'; - -import { Trans, msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; - -import type { Recipient } from '@documenso/prisma/client'; -import { type Document, SigningStatus } from '@documenso/prisma/client'; -import { trpc } from '@documenso/trpc/react'; -import { cn } from '@documenso/ui/lib/utils'; -import { Button } from '@documenso/ui/primitives/button'; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from '@documenso/ui/primitives/tooltip'; -import { useToast } from '@documenso/ui/primitives/use-toast'; - -export type AdminActionsProps = { - className?: string; - document: Document; - recipients: Recipient[]; -}; - -export const AdminActions = ({ className, document, recipients }: AdminActionsProps) => { - const { _ } = useLingui(); - const { toast } = useToast(); - - const { mutate: resealDocument, isPending: isResealDocumentLoading } = - trpc.admin.resealDocument.useMutation({ - onSuccess: () => { - toast({ - title: _(msg`Success`), - description: _(msg`Document resealed`), - }); - }, - onError: () => { - toast({ - title: _(msg`Error`), - description: _(msg`Failed to reseal document`), - variant: 'destructive', - }); - }, - }); - - return ( -
- - - - - - - - - Attempts sealing the document again, useful for after a code change has occurred to - resolve an erroneous document. - - - - - - -
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx b/apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx deleted file mode 100644 index 524dd1f1e..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { Trans } from '@lingui/macro'; -import { DateTime } from 'luxon'; - -import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; -import { getEntireDocument } from '@documenso/lib/server-only/admin/get-entire-document'; -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from '@documenso/ui/primitives/accordion'; -import { Badge } from '@documenso/ui/primitives/badge'; - -import { DocumentStatus } from '~/components/formatter/document-status'; - -import { AdminActions } from './admin-actions'; -import { RecipientItem } from './recipient-item'; -import { SuperDeleteDocumentDialog } from './super-delete-document-dialog'; - -type AdminDocumentDetailsPageProps = { - params: { - id: string; - }; -}; - -export default async function AdminDocumentDetailsPage({ params }: AdminDocumentDetailsPageProps) { - const { i18n } = await setupI18nSSR(); - - const document = await getEntireDocument({ id: Number(params.id) }); - - return ( -
-
-
-

{document.title}

- -
- - {document.deletedAt && ( - - Deleted - - )} -
- -
-
- Created on: {i18n.date(document.createdAt, DateTime.DATETIME_MED)} -
- -
- Last updated at: {i18n.date(document.updatedAt, DateTime.DATETIME_MED)} -
-
- -
- -

- Admin Actions -

- - - -
-

- Recipients -

- -
- - {document.recipients.map((recipient) => ( - - -
-

{recipient.name}

- - {recipient.email} - -
-
- - - - -
- ))} -
-
- -
- - {document && } -
- ); -} diff --git a/apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx b/apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx deleted file mode 100644 index 8696dab06..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx +++ /dev/null @@ -1,196 +0,0 @@ -'use client'; - -import { useMemo } from 'react'; - -import { useRouter } from 'next/navigation'; - -import { Trans, msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { - type Field, - type Recipient, - type Signature, - SigningStatus, -} from '@documenso/prisma/client'; -import { trpc } from '@documenso/trpc/react'; -import { Button } from '@documenso/ui/primitives/button'; -import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table'; -import { DataTable } from '@documenso/ui/primitives/data-table'; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from '@documenso/ui/primitives/form/form'; -import { Input } from '@documenso/ui/primitives/input'; -import { useToast } from '@documenso/ui/primitives/use-toast'; - -const ZAdminUpdateRecipientFormSchema = z.object({ - name: z.string().min(1), - email: z.string().email(), -}); - -type TAdminUpdateRecipientFormSchema = z.infer; - -export type RecipientItemProps = { - recipient: Recipient & { - fields: Array< - Field & { - signature: Signature | null; - } - >; - }; -}; - -export const RecipientItem = ({ recipient }: RecipientItemProps) => { - const { _ } = useLingui(); - const { toast } = useToast(); - - const router = useRouter(); - - const form = useForm({ - defaultValues: { - name: recipient.name, - email: recipient.email, - }, - }); - - const { mutateAsync: updateRecipient } = trpc.admin.updateRecipient.useMutation(); - - const columns = useMemo(() => { - return [ - { - header: 'ID', - accessorKey: 'id', - cell: ({ row }) =>
{row.original.id}
, - }, - { - header: _(msg`Type`), - accessorKey: 'type', - cell: ({ row }) =>
{row.original.type}
, - }, - { - header: _(msg`Inserted`), - accessorKey: 'inserted', - cell: ({ row }) =>
{row.original.inserted ? 'True' : 'False'}
, - }, - { - header: _(msg`Value`), - accessorKey: 'customText', - cell: ({ row }) =>
{row.original.customText}
, - }, - { - header: _(msg`Signature`), - accessorKey: 'signature', - cell: ({ row }) => ( -
- {row.original.signature?.typedSignature && ( - {row.original.signature.typedSignature} - )} - - {row.original.signature?.signatureImageAsBase64 && ( - Signature - )} -
- ), - }, - ] satisfies DataTableColumnDef<(typeof recipient)['fields'][number]>[]; - }, []); - - const onUpdateRecipientFormSubmit = async ({ name, email }: TAdminUpdateRecipientFormSchema) => { - try { - await updateRecipient({ - id: recipient.id, - name, - email, - }); - - toast({ - title: _(msg`Recipient updated`), - description: _(msg`The recipient has been updated successfully`), - }); - - router.refresh(); - } catch (error) { - toast({ - title: _(msg`Failed to update recipient`), - description: error.message, - variant: 'destructive', - }); - } - }; - - return ( -
-
- -
- ( - - - Name - - - - - - - - - )} - /> - - ( - - - Email - - - - - - - - - )} - /> - -
- -
-
-
- - -
- -

- Fields -

- - -
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx b/apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx deleted file mode 100644 index bf142133f..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx +++ /dev/null @@ -1,135 +0,0 @@ -'use client'; - -import { useState } from 'react'; - -import { useRouter } from 'next/navigation'; - -import { Trans, msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; - -import type { Document } from '@documenso/prisma/client'; -import { trpc } from '@documenso/trpc/react'; -import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; -import { Button } from '@documenso/ui/primitives/button'; -import { - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@documenso/ui/primitives/dialog'; -import { Input } from '@documenso/ui/primitives/input'; -import { useToast } from '@documenso/ui/primitives/use-toast'; - -export type SuperDeleteDocumentDialogProps = { - document: Document; -}; - -export const SuperDeleteDocumentDialog = ({ document }: SuperDeleteDocumentDialogProps) => { - const { _ } = useLingui(); - const { toast } = useToast(); - - const router = useRouter(); - - const [reason, setReason] = useState(''); - - const { mutateAsync: deleteDocument, isPending: isDeletingDocument } = - trpc.admin.deleteDocument.useMutation(); - - const handleDeleteDocument = async () => { - try { - if (!reason) { - return; - } - - await deleteDocument({ id: document.id, reason }); - - toast({ - title: _(msg`Document deleted`), - description: 'The Document has been deleted successfully.', - duration: 5000, - }); - - router.push('/admin/documents'); - } catch (err) { - toast({ - title: _(msg`An unknown error occurred`), - variant: 'destructive', - description: - 'We encountered an unknown error while attempting to delete your document. Please try again later.', - }); - } - }; - - return ( -
-
- -
- - Delete Document - - - - Delete the document. This action is irreversible so proceed with caution. - - -
- -
- - - - - - - - - Delete Document - - - - - This action is not reversible. Please be certain. - - - - -
- - To confirm, please enter the reason - - - setReason(e.target.value)} - /> -
- - - - -
-
-
-
-
-
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/documents/document-results.tsx b/apps/web/src/app/(dashboard)/admin/documents/document-results.tsx deleted file mode 100644 index 98854f296..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/document-results.tsx +++ /dev/null @@ -1,165 +0,0 @@ -'use client'; - -import { useMemo, useState } from 'react'; - -import Link from 'next/link'; -import { useSearchParams } from 'next/navigation'; - -import { msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; -import { Loader } from 'lucide-react'; - -import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; -import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; -import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; -import { trpc } from '@documenso/trpc/react'; -import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar'; -import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table'; -import { DataTable } from '@documenso/ui/primitives/data-table'; -import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination'; -import { Input } from '@documenso/ui/primitives/input'; -import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; - -import { DocumentStatus } from '~/components/formatter/document-status'; - -// export type AdminDocumentResultsProps = {}; - -export const AdminDocumentResults = () => { - const { _, i18n } = useLingui(); - - const searchParams = useSearchParams(); - - const updateSearchParams = useUpdateSearchParams(); - - const [term, setTerm] = useState(() => searchParams?.get?.('term') ?? ''); - const debouncedTerm = useDebouncedValue(term, 500); - - const page = searchParams?.get?.('page') ? Number(searchParams.get('page')) : undefined; - const perPage = searchParams?.get?.('perPage') ? Number(searchParams.get('perPage')) : undefined; - - const { data: findDocumentsData, isPending: isFindDocumentsLoading } = - trpc.admin.findDocuments.useQuery( - { - query: debouncedTerm, - page: page || 1, - perPage: perPage || 20, - }, - { - placeholderData: (previousData) => previousData, - }, - ); - - const results = findDocumentsData ?? { - data: [], - perPage: 20, - currentPage: 1, - totalPages: 1, - }; - - const columns = useMemo(() => { - return [ - { - header: _(msg`Created`), - accessorKey: 'createdAt', - cell: ({ row }) => i18n.date(row.original.createdAt), - }, - { - header: _(msg`Title`), - accessorKey: 'title', - cell: ({ row }) => { - return ( - - {row.original.title} - - ); - }, - }, - { - header: _(msg`Status`), - accessorKey: 'status', - cell: ({ row }) => , - }, - { - header: _(msg`Owner`), - accessorKey: 'owner', - cell: ({ row }) => { - const avatarFallbackText = row.original.user.name - ? extractInitials(row.original.user.name) - : row.original.user.email.slice(0, 1).toUpperCase(); - - return ( - - - - - - {avatarFallbackText} - - - - - - - - - {avatarFallbackText} - - - -
- {row.original.user.name} - {row.original.user.email} -
-
-
- ); - }, - }, - { - header: 'Last updated', - accessorKey: 'updatedAt', - cell: ({ row }) => i18n.date(row.original.updatedAt), - }, - ] satisfies DataTableColumnDef<(typeof results)['data'][number]>[]; - }, []); - - const onPaginationChange = (newPage: number, newPerPage: number) => { - updateSearchParams({ - page: newPage, - perPage: newPerPage, - }); - }; - - return ( -
- setTerm(e.target.value)} - /> - -
- - {(table) => } - - - {isFindDocumentsLoading && ( -
- -
- )} -
-
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/documents/page.tsx b/apps/web/src/app/(dashboard)/admin/documents/page.tsx deleted file mode 100644 index b658959bc..000000000 --- a/apps/web/src/app/(dashboard)/admin/documents/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Trans } from '@lingui/macro'; - -import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; - -import { AdminDocumentResults } from './document-results'; - -export default async function AdminDocumentsPage() { - await setupI18nSSR(); - - return ( -
-

- Manage documents -

- -
- -
-
- ); -} diff --git a/apps/web/src/app/(dashboard)/admin/layout.tsx b/apps/web/src/app/(dashboard)/admin/layout.tsx deleted file mode 100644 index 964267872..000000000 --- a/apps/web/src/app/(dashboard)/admin/layout.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; - -import { redirect } from 'next/navigation'; - -import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; -import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; -import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin'; - -import { AdminNav } from './nav'; - -export type AdminSectionLayoutProps = { - children: React.ReactNode; -}; - -export default async function AdminSectionLayout({ children }: AdminSectionLayoutProps) { - await setupI18nSSR(); - - const { user } = await getRequiredServerComponentSession(); - - if (!isAdmin(user)) { - redirect('/documents'); - } - - return ( -
-
- - -
{children}
-
-
- ); -} diff --git a/apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx b/apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx deleted file mode 100644 index 596f0051d..000000000 --- a/apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx +++ /dev/null @@ -1,169 +0,0 @@ -'use client'; - -import { useEffect, useMemo, useState, useTransition } from 'react'; - -import { msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; -import { ChevronDownIcon as CaretSortIcon, Loader } from 'lucide-react'; - -import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; -import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; -import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table'; -import { DataTable } from '@documenso/ui/primitives/data-table'; -import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination'; -import { Input } from '@documenso/ui/primitives/input'; - -export type SigningVolume = { - id: number; - name: string; - signingVolume: number; - createdAt: Date; - planId: string; -}; - -type LeaderboardTableProps = { - signingVolume: SigningVolume[]; - totalPages: number; - perPage: number; - page: number; - sortBy: 'name' | 'createdAt' | 'signingVolume'; - sortOrder: 'asc' | 'desc'; -}; - -export const LeaderboardTable = ({ - signingVolume, - totalPages, - perPage, - page, - sortBy, - sortOrder, -}: LeaderboardTableProps) => { - const { _, i18n } = useLingui(); - - const [isPending, startTransition] = useTransition(); - const updateSearchParams = useUpdateSearchParams(); - const [searchString, setSearchString] = useState(''); - const debouncedSearchString = useDebouncedValue(searchString, 1000); - - const columns = useMemo(() => { - return [ - { - header: () => ( -
handleColumnSort('name')} - > - {_(msg`Name`)} - -
- ), - accessorKey: 'name', - cell: ({ row }) => { - return ( - - ); - }, - size: 250, - }, - { - header: () => ( -
handleColumnSort('signingVolume')} - > - {_(msg`Signing Volume`)} - -
- ), - accessorKey: 'signingVolume', - cell: ({ row }) =>
{Number(row.getValue('signingVolume'))}
, - }, - { - header: () => { - return ( -
handleColumnSort('createdAt')} - > - {_(msg`Created`)} - -
- ); - }, - accessorKey: 'createdAt', - cell: ({ row }) => i18n.date(row.original.createdAt), - }, - ] satisfies DataTableColumnDef[]; - }, [sortOrder]); - - useEffect(() => { - startTransition(() => { - updateSearchParams({ - search: debouncedSearchString, - page: 1, - perPage, - sortBy, - sortOrder, - }); - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [debouncedSearchString]); - - const onPaginationChange = (page: number, perPage: number) => { - startTransition(() => { - updateSearchParams({ - page, - perPage, - }); - }); - }; - - const handleChange = (e: React.ChangeEvent) => { - setSearchString(e.target.value); - }; - - const handleColumnSort = (column: 'name' | 'createdAt' | 'signingVolume') => { - startTransition(() => { - updateSearchParams({ - sortBy: column, - sortOrder: sortBy === column && sortOrder === 'asc' ? 'desc' : 'asc', - }); - }); - }; - - return ( -
- - - {(table) => } - - - {isPending && ( -
- -
- )} -
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/leaderboard/fetch-leaderboard.actions.ts b/apps/web/src/app/(dashboard)/admin/leaderboard/fetch-leaderboard.actions.ts deleted file mode 100644 index 42fc20c97..000000000 --- a/apps/web/src/app/(dashboard)/admin/leaderboard/fetch-leaderboard.actions.ts +++ /dev/null @@ -1,25 +0,0 @@ -'use server'; - -import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; -import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin'; -import { getSigningVolume } from '@documenso/lib/server-only/admin/get-signing-volume'; - -type SearchOptions = { - search: string; - page: number; - perPage: number; - sortBy: 'name' | 'createdAt' | 'signingVolume'; - sortOrder: 'asc' | 'desc'; -}; - -export async function search({ search, page, perPage, sortBy, sortOrder }: SearchOptions) { - const { user } = await getRequiredServerComponentSession(); - - if (!isAdmin(user)) { - throw new Error('Unauthorized'); - } - - const results = await getSigningVolume({ search, page, perPage, sortBy, sortOrder }); - - return results; -} diff --git a/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx b/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx deleted file mode 100644 index 0d1c5172a..000000000 --- a/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { Trans } from '@lingui/macro'; - -import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; -import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; -import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin'; - -import { LeaderboardTable } from './data-table-leaderboard'; -import { search } from './fetch-leaderboard.actions'; - -type AdminLeaderboardProps = { - searchParams?: { - search?: string; - page?: number; - perPage?: number; - sortBy?: 'name' | 'createdAt' | 'signingVolume'; - sortOrder?: 'asc' | 'desc'; - }; -}; - -export default async function Leaderboard({ searchParams = {} }: AdminLeaderboardProps) { - await setupI18nSSR(); - - const { user } = await getRequiredServerComponentSession(); - - if (!isAdmin(user)) { - throw new Error('Unauthorized'); - } - - const page = Number(searchParams.page) || 1; - const perPage = Number(searchParams.perPage) || 10; - const searchString = searchParams.search || ''; - const sortBy = searchParams.sortBy || 'signingVolume'; - const sortOrder = searchParams.sortOrder || 'desc'; - - const { leaderboard: signingVolume, totalPages } = await search({ - search: searchString, - page, - perPage, - sortBy, - sortOrder, - }); - - return ( -
-

- Signing Volume -

-
- -
-
- ); -} diff --git a/apps/web/src/app/(dashboard)/admin/nav.tsx b/apps/web/src/app/(dashboard)/admin/nav.tsx deleted file mode 100644 index bcae0fc75..000000000 --- a/apps/web/src/app/(dashboard)/admin/nav.tsx +++ /dev/null @@ -1,112 +0,0 @@ -'use client'; - -import type { HTMLAttributes } from 'react'; - -import Link from 'next/link'; -import { usePathname } from 'next/navigation'; - -import { Trans } from '@lingui/macro'; -import { BarChart3, FileStack, Settings, Trophy, Users, Wallet2 } from 'lucide-react'; - -import { cn } from '@documenso/ui/lib/utils'; -import { Button } from '@documenso/ui/primitives/button'; - -export type AdminNavProps = HTMLAttributes; - -export const AdminNav = ({ className, ...props }: AdminNavProps) => { - const pathname = usePathname(); - - return ( -
- - - - - - - - - - - -
- ); -}; diff --git a/apps/web/src/app/(dashboard)/admin/page.tsx b/apps/web/src/app/(dashboard)/admin/page.tsx deleted file mode 100644 index 5fe030685..000000000 --- a/apps/web/src/app/(dashboard)/admin/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from 'next/navigation'; - -export default function Admin() { - redirect('/admin/stats'); -} diff --git a/apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx b/apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx deleted file mode 100644 index 6903f5e17..000000000 --- a/apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx +++ /dev/null @@ -1,208 +0,0 @@ -'use client'; - -import { useRouter } from 'next/navigation'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { Trans, msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; -import { useForm } from 'react-hook-form'; -import type { z } from 'zod'; - -import type { TSiteSettingsBannerSchema } from '@documenso/lib/server-only/site-settings/schemas/banner'; -import { - SITE_SETTINGS_BANNER_ID, - ZSiteSettingsBannerSchema, -} from '@documenso/lib/server-only/site-settings/schemas/banner'; -import { trpc as trpcReact } from '@documenso/trpc/react'; -import { Button } from '@documenso/ui/primitives/button'; -import { ColorPicker } from '@documenso/ui/primitives/color-picker'; -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from '@documenso/ui/primitives/form/form'; -import { Switch } from '@documenso/ui/primitives/switch'; -import { Textarea } from '@documenso/ui/primitives/textarea'; -import { useToast } from '@documenso/ui/primitives/use-toast'; - -const ZBannerFormSchema = ZSiteSettingsBannerSchema; - -type TBannerFormSchema = z.infer; - -export type BannerFormProps = { - banner?: TSiteSettingsBannerSchema; -}; - -export function BannerForm({ banner }: BannerFormProps) { - const { toast } = useToast(); - const { _ } = useLingui(); - - const router = useRouter(); - - const form = useForm({ - resolver: zodResolver(ZBannerFormSchema), - defaultValues: { - id: SITE_SETTINGS_BANNER_ID, - enabled: banner?.enabled ?? false, - data: { - content: banner?.data?.content ?? '', - bgColor: banner?.data?.bgColor ?? '#000000', - textColor: banner?.data?.textColor ?? '#FFFFFF', - }, - }, - }); - - const enabled = form.watch('enabled'); - - const { mutateAsync: updateSiteSetting, isPending: isUpdateSiteSettingLoading } = - trpcReact.admin.updateSiteSetting.useMutation(); - - const onBannerUpdate = async ({ id, enabled, data }: TBannerFormSchema) => { - try { - await updateSiteSetting({ - id, - enabled, - data, - }); - - toast({ - title: _(msg`Banner Updated`), - description: _(msg`Your banner has been updated successfully.`), - duration: 5000, - }); - - router.refresh(); - } catch (err) { - toast({ - title: _(msg`An unknown error occurred`), - variant: 'destructive', - description: _( - msg`We encountered an unknown error while attempting to update the banner. Please try again later.`, - ), - }); - } - }; - - return ( -
-

- Site Banner -

-

- - The site banner is a message that is shown at the top of the site. It can be used to - display important information to your users. - -

- -
- -
- ( - - - Enabled - - - -
- -
-
-
- )} - /> - -
- ( - - - Background Color - - - -
- -
-
- - -
- )} - /> - - ( - - - Text Color - - - -
- -
-
- - -
- )} - /> -
-
- -
- ( - - - Content - - - -