├── .env.example ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── .vscode ├── extensions.json └── settings.json ├── Caddyfile ├── LICENSE ├── README.md ├── algolia.d.ts ├── cssVariables.cjs ├── eslint.config.js ├── next-sitemap.config.cjs ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.ico ├── fonts │ ├── PPNeueMontreal-Regular.woff2 │ ├── RobotoMono-Regular.woff │ ├── RobotoMono-Regular.woff2 │ ├── UntitledSans-Black.woff2 │ ├── UntitledSans-BlackItalic.woff2 │ ├── UntitledSans-Bold.woff2 │ ├── UntitledSans-BoldItalic.woff2 │ ├── UntitledSans-Light.woff2 │ ├── UntitledSans-LightItalic.woff2 │ ├── UntitledSans-Medium.woff │ ├── UntitledSans-Medium.woff2 │ ├── UntitledSans-MediumItalic.woff2 │ ├── UntitledSans-Regular.woff │ ├── UntitledSans-Regular.woff2 │ └── UntitledSans-RegularItalic.woff2 ├── images │ ├── background-shapes.webp │ ├── caret.svg │ ├── check-dark.svg │ ├── check.svg │ ├── crt.gif │ ├── docs │ │ ├── admin-dark.jpg │ │ ├── admin.jpg │ │ ├── auth-admin.jpg │ │ ├── autosave-enabled.png │ │ ├── cloud │ │ │ ├── create-from-existing.jpg │ │ │ ├── create-from-template.jpg │ │ │ ├── overview-page.jpg │ │ │ └── team-settings.jpg │ │ ├── drafts-enabled.png │ │ ├── fields │ │ │ ├── array-dark.png │ │ │ ├── array.jpg │ │ │ ├── array.png │ │ │ ├── blocks-dark.png │ │ │ ├── blocks.jpg │ │ │ ├── blocks.png │ │ │ ├── checkbox-dark.png │ │ │ ├── checkbox.jpg │ │ │ ├── checkbox.png │ │ │ ├── code-dark.png │ │ │ ├── code.png │ │ │ ├── collapsible-dark.png │ │ │ ├── collapsible.png │ │ │ ├── date-dark.png │ │ │ ├── date.png │ │ │ ├── email-dark.png │ │ │ ├── email.png │ │ │ ├── group-dark.png │ │ │ ├── group.png │ │ │ ├── join-dark.png │ │ │ ├── join.png │ │ │ ├── json-dark.png │ │ │ ├── json.png │ │ │ ├── number-dark.png │ │ │ ├── number.png │ │ │ ├── point-dark.png │ │ │ ├── point.png │ │ │ ├── radio-dark.png │ │ │ ├── radio.png │ │ │ ├── relationship-dark.png │ │ │ ├── relationship.png │ │ │ ├── richText │ │ │ │ ├── rte-link-fields-modal.jpg │ │ │ │ ├── rte-upload-element.jpg │ │ │ │ └── rte-upload-fields-modal.jpg │ │ │ ├── richtext-dark.png │ │ │ ├── richtext.png │ │ │ ├── row-dark.png │ │ │ ├── row.png │ │ │ ├── select-dark.png │ │ │ ├── select.png │ │ │ ├── tabs-dark.png │ │ │ ├── tabs-full-dark.png │ │ │ ├── tabs.png │ │ │ ├── tabs │ │ │ │ └── tabs.jpg │ │ │ ├── text-dark.png │ │ │ ├── text.jpg │ │ │ ├── text.png │ │ │ ├── textarea-dark.png │ │ │ ├── textarea.png │ │ │ ├── upload-dark.png │ │ │ └── upload.png │ │ ├── mdx-example-dark.png │ │ ├── mdx-example-light.png │ │ ├── upload-admin.jpg │ │ ├── vercel-toolbar.jpg │ │ ├── vercel-visual-editing.jpg │ │ └── versions.png │ ├── dot.png │ ├── favicon-light.svg │ ├── favicon.svg │ ├── footer-bg.jpg │ ├── fullLogo.png │ ├── glass-animation.mp4 │ ├── gradient-square.jpg │ ├── gradient-wide.jpg │ ├── gradients │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ └── 4.jpg │ ├── hero-gradient.jpg │ ├── hero-shapes.jpg │ ├── home-bg.png │ ├── label-link-arrow.svg │ ├── link-arrow.svg │ ├── logo-dark.png │ ├── mobile-hero-shapes.jpg │ ├── noise.png │ ├── og-image.jpg │ ├── parter-program-og.jpg │ ├── payload-mask.svg │ ├── pedestal-mask.svg │ ├── scanline-dark.png │ ├── scanline-light.png │ ├── screen-mask.svg │ ├── stripe-overlay.png │ ├── three-mask.svg │ └── universal-truth.jpg ├── js │ └── theme.js ├── robots.txt ├── sitemap-0.xml └── sitemap.xml ├── redirects.js ├── scripts ├── fetch-docs.mjs └── topicOrder.js ├── src ├── access.ts ├── access │ ├── isAdmin.ts │ ├── isAdminOrSelf.ts │ └── publishedOnly.ts ├── adapters │ ├── AlgoliaPagination │ │ ├── index.module.scss │ │ └── index.tsx │ └── AlgoliaSearchBox │ │ ├── index.module.scss │ │ └── index.tsx ├── app │ ├── (frontend) │ │ ├── (cloud) │ │ │ ├── cloud-terms │ │ │ │ └── page.tsx │ │ │ ├── cloud │ │ │ │ ├── (tabs) │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.module.scss │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── page_client.tsx │ │ │ │ │ ├── settings │ │ │ │ │ │ ├── DeletionConfirmationForm │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── page.module.scss │ │ │ │ │ │ ├── layout.module.scss │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ └── teams │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── [team-slug] │ │ │ │ │ ├── (tabs) │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ ├── page_client.tsx │ │ │ │ │ │ └── settings │ │ │ │ │ │ │ ├── (tabs) │ │ │ │ │ │ │ ├── billing │ │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── useCustomerPortal.tsx │ │ │ │ │ │ │ ├── invoices │ │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ ├── page_client.tsx │ │ │ │ │ │ │ │ └── useInvoices.ts │ │ │ │ │ │ │ ├── members │ │ │ │ │ │ │ │ ├── UpdateRolesConfirmationForm │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ └── page.module.scss │ │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ │ └── subscriptions │ │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ ├── page_client.tsx │ │ │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ │ │ └── useSubscriptions.ts │ │ │ │ │ │ │ ├── TeamBillingMessages │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── layout.module.scss │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ └── [project-slug] │ │ │ │ │ │ ├── (tabs) │ │ │ │ │ │ ├── (overview) │ │ │ │ │ │ │ ├── DeploymentLogs │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── InfraOffline │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── InfraOnline │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── ProjectBillingMessages │ │ │ │ │ │ │ ├── BadSubscription.tsx │ │ │ │ │ │ │ ├── MissingPaymentMethod.tsx │ │ │ │ │ │ │ ├── TrialMessage.tsx │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── database │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ ├── file-storage │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── logs │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ └── settings │ │ │ │ │ │ │ ├── (build-settings) │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ │ ├── _layoutComponents │ │ │ │ │ │ │ ├── NoData │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── SectionHeader │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── billing │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ ├── domains │ │ │ │ │ │ │ ├── AddDomain │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── ManageDomain │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ │ ├── email │ │ │ │ │ │ │ ├── AddEmailDomain │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── ManageEmailDomain │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ │ ├── environment-variables │ │ │ │ │ │ │ ├── AddEnvs │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── ManageEnvs │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── Secret │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── validations.ts │ │ │ │ │ │ │ ├── layout.module.scss │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── ownership │ │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ │ │ └── plan │ │ │ │ │ │ │ ├── DeletePlanButton │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── DeletePlanModal │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── configure │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── env │ │ │ │ │ │ └── [environment-slug] │ │ │ │ │ │ └── (tabs) │ │ │ │ │ │ ├── (overview) │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── ProjectBillingMessages │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── database │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── file-storage │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── logs │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── settings │ │ │ │ │ │ ├── (build-settings) │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── billing │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── domains │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── email │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── environment-variables │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── ownership │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── plan │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── _actions │ │ │ │ │ └── revalidateCache.ts │ │ │ │ ├── _api │ │ │ │ │ ├── fetchGitHubToken.ts │ │ │ │ │ ├── fetchInstalls.ts │ │ │ │ │ ├── fetchInvoices.ts │ │ │ │ │ ├── fetchMe.ts │ │ │ │ │ ├── fetchPaymentMethod.ts │ │ │ │ │ ├── fetchPaymentMethods.ts │ │ │ │ │ ├── fetchPlans.ts │ │ │ │ │ ├── fetchProject.ts │ │ │ │ │ ├── fetchProjects.ts │ │ │ │ │ ├── fetchRepos.ts │ │ │ │ │ ├── fetchSubscriptions.ts │ │ │ │ │ ├── fetchTeam.ts │ │ │ │ │ ├── fetchTemplate.ts │ │ │ │ │ ├── fetchTemplates.ts │ │ │ │ │ ├── token.ts │ │ │ │ │ ├── updateCustomer.ts │ │ │ │ │ ├── updatePaymentMethod.ts │ │ │ │ │ └── updateSubscription.ts │ │ │ │ ├── _components │ │ │ │ │ ├── BranchSelector │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── reducer.ts │ │ │ │ │ ├── CloneOrDeployProgress │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CloudFooter │ │ │ │ │ │ ├── classes.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CloudHeader │ │ │ │ │ │ ├── classes.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CloudLogo │ │ │ │ │ │ ├── classes.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ComparePlans │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CreditCardElement │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CreditCardList │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ └── usePaymentMethods.ts │ │ │ │ │ ├── CreditCardSelector │ │ │ │ │ │ ├── ProjectPaymentMethodSelector.tsx │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useSubscription.ts │ │ │ │ │ ├── DashboardBreadcrumbs │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── DashboardTabs │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InstallationButton │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InstallationSelector │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ ├── MenuList │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── Option │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── SingleValue │ │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetInstalls.ts │ │ │ │ │ ├── InviteTeammates │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PlanSelector │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ProjectCard │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ProjectHeader │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RadioGroup │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RepoExists │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Sidebar │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── layout.module.scss │ │ │ │ │ ├── Tabs │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TeamDrawer │ │ │ │ │ │ ├── DrawerContent.module.scss │ │ │ │ │ │ ├── DrawerContent.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TeamInvitations │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TeamMembers │ │ │ │ │ │ ├── TeamMemberRow.module.scss │ │ │ │ │ │ ├── TeamMemberRow.tsx │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TeamSelector │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── UniqueDomain │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── reducer.ts │ │ │ │ │ ├── UniqueRepoName │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── UniqueSlug │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── reducer.ts │ │ │ │ ├── _utilities │ │ │ │ │ ├── hasBadSubscription.ts │ │ │ │ │ ├── projectHasPaymentMethod.ts │ │ │ │ │ └── teamHasDefaultPaymentMethod.ts │ │ │ │ ├── layout.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ └── slug.ts │ │ │ ├── forgot-password │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── join-team │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── layout.module.scss │ │ │ ├── layout.tsx │ │ │ ├── login │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── logout │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── new │ │ │ │ ├── (checkout) │ │ │ │ │ ├── Checkout.module.scss │ │ │ │ │ ├── Checkout.tsx │ │ │ │ │ ├── EnvVars.module.scss │ │ │ │ │ ├── EnvVars.tsx │ │ │ │ │ ├── confirmCardPayment.ts │ │ │ │ │ ├── confirmCardSetup.ts │ │ │ │ │ ├── createSetupIntent.ts │ │ │ │ │ ├── createSubscription.ts │ │ │ │ │ ├── deploy.tsx │ │ │ │ │ └── reducer.ts │ │ │ │ ├── authorize │ │ │ │ │ ├── checkGitHubToken.ts │ │ │ │ │ ├── exchangeCode.ts │ │ │ │ │ ├── page.module.scss │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── page_client.tsx │ │ │ │ ├── clone │ │ │ │ │ ├── [template-slug] │ │ │ │ │ │ ├── page.module.scss │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── page_client.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── createDraftProject.tsx │ │ │ │ ├── import │ │ │ │ │ ├── RepoCard │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── page.module.scss │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── page_client.tsx │ │ │ │ │ └── useGetRepos.ts │ │ │ │ └── page.tsx │ │ │ ├── reset-password │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── signup │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ └── verify │ │ │ │ └── page.tsx │ │ ├── (pages) │ │ │ ├── [...slug] │ │ │ │ └── page.tsx │ │ │ ├── case-studies │ │ │ │ └── [slug] │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ ├── index.module.scss │ │ │ │ │ └── page.tsx │ │ │ ├── community-help │ │ │ │ ├── (posts) │ │ │ │ │ ├── discord │ │ │ │ │ │ └── [slug] │ │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── github │ │ │ │ │ │ └── [slug] │ │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ │ ├── index.module.scss │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── layout.tsx │ │ │ │ ├── AlgoliaProvider │ │ │ │ │ ├── getInitialState.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── ArchiveSearchBar │ │ │ │ │ ├── index.module.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── client_page.tsx │ │ │ │ ├── index.module.scss │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── cookie │ │ │ │ ├── client_page.tsx │ │ │ │ ├── index.module.scss │ │ │ │ └── page.tsx │ │ │ ├── docs │ │ │ │ ├── [topic] │ │ │ │ │ └── [doc] │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── dynamic │ │ │ │ │ └── [topic] │ │ │ │ │ │ └── [doc] │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── fetchTopicsForSidebar.ts │ │ │ │ ├── local │ │ │ │ │ └── [topic] │ │ │ │ │ │ └── [doc] │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ └── v2 │ │ │ │ │ └── [topic] │ │ │ │ │ └── [doc] │ │ │ │ │ └── page.tsx │ │ │ ├── get-started │ │ │ │ ├── index.module.scss │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ ├── partners │ │ │ │ ├── [slug] │ │ │ │ │ ├── index.module.scss │ │ │ │ │ └── page.tsx │ │ │ │ ├── index.module.scss │ │ │ │ └── page.tsx │ │ │ ├── posts │ │ │ │ └── [category] │ │ │ │ │ ├── [slug] │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── index.module.scss │ │ │ │ │ └── page.tsx │ │ │ ├── privacy │ │ │ │ ├── page.module.scss │ │ │ │ ├── page.tsx │ │ │ │ └── page_client.tsx │ │ │ ├── styleguide │ │ │ │ ├── PageContent │ │ │ │ │ ├── Breadcrumbs │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RenderDarkMode │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── blocks │ │ │ │ │ ├── banner-block │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── call-to-action │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── card-grid │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── content-grid │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── form-block │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── hover-highlights │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── link-grid │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── media-content │ │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── buttons │ │ │ │ │ └── page.tsx │ │ │ │ ├── cards │ │ │ │ │ └── page.tsx │ │ │ │ ├── fields │ │ │ │ │ └── page.tsx │ │ │ │ ├── forms │ │ │ │ │ ├── client_page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── heros │ │ │ │ │ └── form-hero │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── highlight │ │ │ │ │ └── page.tsx │ │ │ │ ├── icons │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.module.scss │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── typography │ │ │ │ │ └── page.tsx │ │ │ └── thanks-for-subscribing │ │ │ │ ├── client_page.tsx │ │ │ │ └── page.tsx │ │ ├── api │ │ │ ├── exit-preview │ │ │ │ └── route.ts │ │ │ ├── locate │ │ │ │ └── route.ts │ │ │ ├── og │ │ │ │ └── route.tsx │ │ │ ├── preview │ │ │ │ └── route.ts │ │ │ ├── revalidate │ │ │ │ └── route.ts │ │ │ ├── star-count │ │ │ │ └── route.ts │ │ │ ├── sync-algolia │ │ │ │ └── route.ts │ │ │ └── sync-ch │ │ │ │ └── route.ts │ │ ├── error.tsx │ │ ├── fonts.ts │ │ ├── gh │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── not-found.tsx │ │ └── types.ts │ ├── (payload) │ │ ├── admin │ │ │ ├── [[...segments]] │ │ │ │ ├── not-found.tsx │ │ │ │ └── page.tsx │ │ │ └── importMap.js │ │ ├── api │ │ │ ├── [...slug] │ │ │ │ └── route.ts │ │ │ ├── graphql-playground │ │ │ │ └── route.ts │ │ │ └── graphql │ │ │ │ └── route.ts │ │ ├── custom.scss │ │ └── layout.tsx │ ├── _data │ │ ├── index.ts │ │ ├── me.ts │ │ ├── plans.ts │ │ ├── project.ts │ │ ├── team.ts │ │ ├── templates.ts │ │ └── token.ts │ ├── apple-icon.png │ └── global-error.tsx ├── blocks │ ├── Banner │ │ └── index.ts │ ├── BlogContent │ │ └── index.ts │ ├── BlogMarkdown │ │ ├── Field │ │ │ ├── index.scss │ │ │ ├── index.tsx │ │ │ └── validate.ts │ │ └── index.ts │ ├── CallToAction │ │ └── index.ts │ ├── Callout │ │ └── index.ts │ ├── CardGrid │ │ └── index.ts │ ├── CaseStudiesHighlight │ │ └── index.ts │ ├── CaseStudyCards │ │ └── index.ts │ ├── CaseStudyParallax │ │ └── index.ts │ ├── Code │ │ └── index.ts │ ├── CodeFeature │ │ └── index.ts │ ├── ComparisonTable │ │ └── index.ts │ ├── Content │ │ └── index.ts │ ├── ContentGrid │ │ └── index.ts │ ├── Download │ │ └── index.ts │ ├── ExampleTabs │ │ └── index.ts │ ├── Form │ │ └── index.ts │ ├── HoverCards │ │ └── index.ts │ ├── HoverHighlights │ │ └── index.ts │ ├── LinkGrid │ │ └── index.ts │ ├── LogoGrid │ │ └── index.ts │ ├── Media │ │ └── index.ts │ ├── MediaContent │ │ └── index.ts │ ├── MediaContentAccordion │ │ └── index.ts │ ├── Pricing │ │ └── index.ts │ ├── ReusableContent │ │ └── index.ts │ ├── Slider │ │ └── index.ts │ ├── Statement │ │ └── index.ts │ ├── Steps │ │ └── index.ts │ └── StickyHighlights │ │ └── index.ts ├── collections │ ├── CaseStudies.ts │ ├── Categories.ts │ ├── CommunityHelp │ │ ├── extract-description.ts │ │ ├── index.ts │ │ └── updateAlgolia.ts │ ├── Docs │ │ ├── BranchButton │ │ │ ├── fetchAllBranches.ts │ │ │ ├── index.client.tsx │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ ├── SaveButton │ │ │ └── index.tsx │ │ ├── blocks │ │ │ ├── VideoDrawer │ │ │ │ └── index.ts │ │ │ ├── banner │ │ │ │ └── index.ts │ │ │ ├── code │ │ │ │ ├── CodeFields.tsx │ │ │ │ ├── converter.ts │ │ │ │ ├── converterClient.ts │ │ │ │ └── index.ts │ │ │ ├── lightDarkImage │ │ │ │ └── index.ts │ │ │ ├── resource │ │ │ │ └── index.ts │ │ │ ├── restExamples │ │ │ │ └── index.ts │ │ │ ├── shared.ts │ │ │ ├── tableWithDrawers │ │ │ │ └── index.ts │ │ │ ├── upload │ │ │ │ └── index.ts │ │ │ └── youtube │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── mdxToLexical.ts │ │ ├── topicOrder.ts │ │ └── types.ts │ ├── Media.ts │ ├── Pages.ts │ ├── PartnerFilters.ts │ ├── Partners.ts │ ├── Posts.ts │ ├── ReusableContent.ts │ └── Users.ts ├── components │ ├── Accordion │ │ ├── index.module.scss │ │ └── index.tsx │ ├── AfterNavActions │ │ ├── index.scss │ │ └── index.tsx │ ├── Analytics │ │ ├── GoogleAnalytics │ │ │ └── index.tsx │ │ └── GoogleTagManager │ │ │ └── index.tsx │ ├── Archive │ │ ├── MobileNav │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── AuthorTag │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Avatar │ │ ├── DropdownMenu │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BackButton │ │ └── index.tsx │ ├── BackgroundGradient │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BackgroundGrid │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BackgroundScanline │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Banner │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BigThree │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BlockSpacing │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BlockWrapper │ │ ├── index.module.scss │ │ └── index.tsx │ ├── BorderBox │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Breadcrumbs │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Button │ │ ├── index.module.scss │ │ └── index.tsx │ ├── CMSForm │ │ ├── Label │ │ │ ├── index.module.scss │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── Submit │ │ │ └── index.tsx │ │ ├── Width │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── fields.module.scss │ │ ├── fields.tsx │ │ ├── fields │ │ │ ├── Checkbox │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── Select │ │ │ │ ├── countries.ts │ │ │ │ ├── index.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── states.ts │ │ │ ├── Text │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── Textarea │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ └── shared.scss │ │ ├── index.module.scss │ │ └── index.tsx │ ├── CMSLink │ │ └── index.tsx │ ├── ChangeHeaderTheme │ │ ├── index.module.scss │ │ └── index.tsx │ ├── CircleIconButton │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Code │ │ ├── index.module.scss │ │ ├── index.tsx │ │ ├── theme.ts │ │ └── types.ts │ ├── CodeBlip │ │ ├── Button │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CodeBlipContext.tsx │ │ ├── Modal │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ └── index.tsx │ ├── CommandLine │ │ ├── index.module.scss │ │ └── index.tsx │ ├── ContributionTable │ │ ├── api.ts │ │ ├── index.module.scss │ │ └── index.tsx │ ├── CopyToClipboard │ │ ├── index.module.scss │ │ └── index.tsx │ ├── CreatePayloadApp │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DiscordGitBody │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DiscordGitCTA │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DiscordGitComments │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DiscordGitIntro │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DiscordUsersPill │ │ ├── index.module.scss │ │ └── index.tsx │ ├── DocsNavigation │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Drawer │ │ ├── index.module.scss │ │ ├── index.tsx │ │ ├── types.ts │ │ └── useDrawerSlug.tsx │ ├── DropdownMenu │ │ ├── MenuContent │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── EdgeScroll │ │ ├── index.module.scss │ │ └── index.tsx │ ├── ErrorMessage │ │ └── index.tsx │ ├── ExtendedBackground │ │ ├── index.module.scss │ │ └── index.tsx │ ├── FeaturedBlogPost │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Feedback │ │ ├── index.module.scss │ │ └── index.tsx │ ├── FileAttachment │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Footer │ │ ├── index.module.scss │ │ └── index.tsx │ ├── GithubStarsPill │ │ ├── index.module.scss │ │ └── index.tsx │ ├── GuestSocials │ │ └── index.tsx │ ├── Gutter │ │ ├── index.module.scss │ │ └── index.tsx │ ├── HR │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Header │ │ ├── DesktopNav │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Docsearch │ │ │ ├── Component.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── MobileNav │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Heading │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Hero │ │ ├── BreadcrumbsBar │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CenteredContent │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── ContentMedia │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Default │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── FormHero │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Gradient │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Home │ │ │ ├── LogoShowcase │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── HomeNew │ │ │ ├── LogoShowcase │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Livestream │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Three │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.tsx │ │ └── useGetHeroPadding.ts │ ├── Highlight │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Indicator │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Label │ │ ├── index.module.scss │ │ └── index.tsx │ ├── LargeBody │ │ ├── index.module.scss │ │ └── index.tsx │ ├── LargeRadio │ │ ├── index.module.scss │ │ └── index.tsx │ ├── LineDraw │ │ ├── index.module.scss │ │ └── index.tsx │ ├── LoadingShimmer │ │ ├── index.module.scss │ │ └── index.tsx │ ├── MDX │ │ └── components │ │ │ ├── Table │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ │ └── TableWithDrawers │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ ├── MaxWidth │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Media │ │ ├── Image │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Video │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.tsx │ │ └── types.ts │ ├── MediaParallax │ │ ├── index.module.scss │ │ └── index.tsx │ ├── MediaStack │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Message │ │ ├── index.module.scss │ │ └── index.tsx │ ├── ModalWindow │ │ ├── index.module.scss │ │ └── index.tsx │ ├── NewProject │ │ ├── index.module.scss │ │ └── index.tsx │ ├── NewsletterSignUp │ │ ├── index.module.scss │ │ └── index.tsx │ ├── OpenPost │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Pagination │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PartnerDirectory │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PartnerGrid │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Payload3D │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PayloadRedirects │ │ └── index.tsx │ ├── Pill │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PixelBackground │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Post │ │ ├── AuthorsList │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PrivacyBanner │ │ ├── index.module.scss │ │ └── index.tsx │ ├── RedeployButton │ │ ├── index.scss │ │ └── index.tsx │ ├── RefreshMdxToLexicalButton │ │ ├── index.scss │ │ └── index.tsx │ ├── RefreshRouterOnSave │ │ └── index.tsx │ ├── RelatedHelpList │ │ ├── index.module.scss │ │ └── index.tsx │ ├── RelatedResources │ │ ├── index.module.scss │ │ └── index.tsx │ ├── RenderBlocks │ │ ├── index.tsx │ │ └── utilities.ts │ ├── RenderDocs │ │ ├── index.module.scss │ │ └── index.tsx │ ├── RenderParams │ │ ├── Component.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── RichText │ │ ├── CustomTable │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Heading │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── LightDarkImage │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── ResourceBlock │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── RestExamples │ │ │ ├── generateRequest.tsx │ │ │ ├── generateResponse.tsx │ │ │ ├── index.module.scss │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── Table │ │ │ └── index.tsx │ │ ├── TableWithDrawers │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Upload │ │ │ └── index.tsx │ │ ├── UploadBlock │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Video │ │ │ ├── Vimeo │ │ │ │ └── index.tsx │ │ │ ├── YouTube │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── VideoDrawer │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── context.tsx │ │ ├── formatAnchor.ts │ │ ├── index.scss │ │ └── index.tsx │ ├── SimpleLogs │ │ ├── index.module.scss │ │ └── index.tsx │ ├── SocialIcon │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Spinner │ │ ├── index.module.scss │ │ └── index.tsx │ ├── SplitAnimate │ │ ├── index.module.scss │ │ └── index.tsx │ ├── SpotlightAnimation │ │ ├── index.module.scss │ │ ├── index.tsx │ │ └── types.ts │ ├── SyncCommunityHelp │ │ ├── index.scss │ │ └── index.tsx │ ├── SyncDocsButton │ │ ├── index.scss │ │ └── index.tsx │ ├── SyncToAlgolia │ │ ├── index.scss │ │ └── index.tsx │ ├── TableCheckboxField │ │ ├── index.module.scss │ │ └── index.tsx │ ├── TableOfContents │ │ ├── index.module.scss │ │ └── index.tsx │ ├── TemplateCardsBlock │ │ ├── index.module.scss │ │ └── index.tsx │ ├── Tooltip │ │ ├── TooltipContent │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── index.module.scss │ │ └── index.tsx │ ├── UniversalTruth │ │ ├── index.module.scss │ │ └── index.tsx │ ├── VersionSelector │ │ ├── index.module.scss │ │ └── index.tsx │ ├── YouTube │ │ ├── index.module.scss │ │ └── index.tsx │ ├── blocks │ │ ├── Banner │ │ │ └── index.tsx │ │ ├── BlogContent │ │ │ └── index.tsx │ │ ├── BlogMarkdown │ │ │ ├── Block.tsx │ │ │ └── index.tsx │ │ ├── CallToAction │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Callout │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CardGrid │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CaseStudiesHighlight │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CaseStudyCards │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CaseStudyParallax │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CodeBlock │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── CodeFeature │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── ComparisonTable │ │ │ ├── Icons │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Content │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── ContentGrid │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Download │ │ │ ├── Buttons │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── FormBlock │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── HoverCards │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── HoverHighlights │ │ │ ├── Highlights │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── LinkGrid │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── LogoGrid │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── MediaBlock │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── MediaContent │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── MediaContentAccordion │ │ │ ├── Desktop │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── Mobile │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Pricing │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── RelatedPosts │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── ReusableContent │ │ │ └── index.tsx │ │ ├── Slider │ │ │ ├── QuoteCard │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Statement │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Steps │ │ │ ├── Step │ │ │ │ ├── index.module.scss │ │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ └── StickyHighlights │ │ │ ├── Highlight │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ └── cards │ │ ├── ContentMediaCard │ │ ├── index.module.scss │ │ └── index.tsx │ │ ├── DefaultCard │ │ ├── index.module.scss │ │ └── index.tsx │ │ ├── PartnerCard │ │ ├── index.module.scss │ │ └── index.tsx │ │ ├── PricingCard │ │ ├── index.module.scss │ │ └── index.tsx │ │ ├── SquareCard │ │ ├── index.module.scss │ │ └── index.tsx │ │ └── types.ts ├── constants.ts ├── css │ ├── app.scss │ ├── colors.scss │ ├── common.scss │ ├── docsearch.scss │ ├── github.scss │ ├── grid.scss │ ├── queries.scss │ ├── theme.scss │ ├── toasts.scss │ ├── type.scss │ └── vars.scss ├── fields │ ├── addToDocs │ │ ├── Label.tsx │ │ ├── index.module.scss │ │ └── index.ts │ ├── blockFields.ts │ ├── codeBlips.ts │ ├── fullTitle │ │ ├── index.ts │ │ └── populateFullTitle.ts │ ├── hero.ts │ ├── link.ts │ ├── linkGroup.ts │ ├── livestreamFields.ts │ ├── richText │ │ ├── features │ │ │ ├── label │ │ │ │ ├── LabelNode.ts │ │ │ │ ├── client │ │ │ │ │ ├── icon │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── server │ │ │ │ │ └── index.ts │ │ │ └── largeBody │ │ │ │ ├── LargeBodyNode.ts │ │ │ │ ├── client │ │ │ │ ├── icon │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ │ └── server │ │ │ │ └── index.ts │ │ └── index.ts │ └── slug.ts ├── fonts │ ├── UntitledSans-Black.woff2 │ ├── UntitledSans-BlackItalic.woff2 │ ├── UntitledSans-Bold.woff2 │ ├── UntitledSans-BoldItalic.woff2 │ ├── UntitledSans-Light.woff2 │ ├── UntitledSans-LightItalic.woff2 │ ├── UntitledSans-Medium.woff2 │ ├── UntitledSans-MediumItalic.woff2 │ ├── UntitledSans-Regular.woff2 │ └── UntitledSans-RegularItalic.woff2 ├── forms │ ├── Error │ │ ├── index.module.scss │ │ ├── index.tsx │ │ └── types.ts │ ├── Form │ │ ├── context.ts │ │ ├── index.tsx │ │ ├── initialContext.ts │ │ ├── reduceFieldsToValues.ts │ │ └── reducer.ts │ ├── FormProcessing │ │ └── index.tsx │ ├── FormSubmissionError │ │ └── index.tsx │ ├── Label │ │ ├── index.module.scss │ │ ├── index.tsx │ │ └── types.ts │ ├── Submit │ │ └── index.tsx │ ├── fields │ │ ├── Array │ │ │ ├── context.tsx │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Checkbox │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Number │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── RadioGroup │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Secret │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Select │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Text │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── Textarea │ │ │ ├── index.module.scss │ │ │ └── index.tsx │ │ ├── shared.scss │ │ ├── types.ts │ │ └── useField │ │ │ └── index.tsx │ ├── types.ts │ ├── useFormField │ │ ├── index.tsx │ │ └── types.ts │ └── validations.ts ├── globals │ ├── CustomRowLabelNavItems.tsx │ ├── CustomRowLabelTabs.tsx │ ├── Footer.ts │ ├── GetStarted.ts │ ├── MainMenu.ts │ └── PartnerProgram.ts ├── graphics │ ├── CalendarIcon │ │ └── index.tsx │ ├── ChevronIcon │ │ └── index.tsx │ ├── ClockIcon │ │ └── index.tsx │ ├── CommentsIcon │ │ └── index.tsx │ ├── CommitIcon │ │ └── index.tsx │ ├── DiscordIcon │ │ └── index.tsx │ ├── DownloadIcon │ │ └── index.tsx │ ├── FacebookIcon │ │ └── index.tsx │ ├── FilterIcon │ │ └── index.tsx │ ├── FullLogo │ │ └── index.tsx │ ├── GitHub │ │ └── index.tsx │ ├── GithubIcon │ │ └── index.tsx │ ├── InfoIcon │ │ └── index.tsx │ ├── InstagramIcon │ │ └── index.tsx │ ├── MenuIcon │ │ └── index.tsx │ ├── PayloadIcon │ │ └── index.tsx │ ├── SearchIcon │ │ └── index.tsx │ ├── SearchIconV2 │ │ └── index.tsx │ ├── ThemeAutoIcon │ │ └── index.tsx │ ├── ThemeDarkIcon │ │ └── index.tsx │ ├── ThemeLightIcon │ │ └── index.tsx │ ├── TwitterIcon │ │ └── index.tsx │ ├── TwitterIconAlt │ │ └── index.tsx │ ├── TwitterIconV2 │ │ └── index.tsx │ └── YoutubeIcon │ │ └── index.tsx ├── hooks │ └── revalidateRedirects.ts ├── icons │ ├── ArrowIcon │ │ └── index.tsx │ ├── ArrowRightIcon │ │ └── index.tsx │ ├── BranchIcon │ │ └── index.tsx │ ├── ChainLinkIcon │ │ └── index.tsx │ ├── CheckIcon │ │ └── index.tsx │ ├── ChevronDownIcon │ │ └── index.tsx │ ├── ChevronIcon │ │ └── index.tsx │ ├── ChevronUpDownIcon │ │ └── index.tsx │ ├── CloseIcon │ │ └── index.tsx │ ├── CodeIcon │ │ └── index.tsx │ ├── Copy │ │ └── index.tsx │ ├── CopyIcon │ │ └── index.tsx │ ├── CrosshairIcon │ │ └── index.tsx │ ├── ErrorIcon │ │ └── index.tsx │ ├── ExternalLinkIcon │ │ └── index.tsx │ ├── EyeIcon │ │ └── index.tsx │ ├── FolderIcon │ │ └── index.tsx │ ├── GradientBorderIcon │ │ └── index.tsx │ ├── InfoIcon │ │ └── index.tsx │ ├── LoaderIcon │ │ └── index.tsx │ ├── PlayIcon │ │ └── index.tsx │ ├── PlusIcon │ │ └── index.tsx │ ├── QuoteIcon │ │ └── index.tsx │ ├── QuoteIconAlt │ │ └── index.tsx │ ├── SearchIcon │ │ └── index.tsx │ ├── TrashIcon │ │ └── index.tsx │ ├── index.module.scss │ └── types.ts ├── migrate.ts ├── migrations │ ├── 20241116_194708_migration.ts │ └── index.ts ├── payload-cloud-types.ts ├── payload-types.ts ├── payload.config.ts ├── plugins │ └── opsCounter.ts ├── providers │ ├── Auth │ │ └── index.tsx │ ├── ComputedCSSValues │ │ ├── index.module.scss │ │ └── index.tsx │ ├── HeaderIntersectionObserver │ │ ├── index.module.scss │ │ └── index.tsx │ ├── PageTransition │ │ └── index.tsx │ ├── Privacy │ │ └── index.tsx │ ├── Theme │ │ ├── index.tsx │ │ ├── shared.ts │ │ └── types.ts │ ├── ToastContainer │ │ ├── icons │ │ │ ├── Error.tsx │ │ │ ├── Info.tsx │ │ │ ├── Success.tsx │ │ │ └── Warning.tsx │ │ └── index.tsx │ └── index.tsx ├── scripts │ ├── clearDuplicateThreads.ts │ ├── fetchDiscord.ts │ ├── fetchDocs.ts │ ├── fetchGitHub.ts │ ├── migrateAuthors.js │ ├── migrateVersions.ts │ ├── redeployWebsite.ts │ ├── syncDocs.ts │ └── syncToAlgolia.ts ├── seo │ └── mergeOpenGraph.ts ├── ts-helpers │ └── requireField.ts └── utilities │ ├── analytics.ts │ ├── can-use-dom.ts │ ├── check-team-roles.ts │ ├── decode-base-64.ts │ ├── deepMerge.ts │ ├── format-date-time.ts │ ├── formatPagePath.ts │ ├── formatPermalink.js │ ├── formatPreviewURL.ts │ ├── formatSlug.ts │ ├── generate-route-path.ts │ ├── get-cookie.ts │ ├── get-relative-date.ts │ ├── get-specific-date-time.ts │ ├── get-team-twitter.ts │ ├── get-video.ts │ ├── getDocument.ts │ ├── getRedirects.ts │ ├── getSafeRedirect.ts │ ├── is-expanded-doc.ts │ ├── isNumber.ts │ ├── isValidParamID.ts │ ├── merge-project-environment.ts │ ├── oxford-comma.ts │ ├── parseCookies.ts │ ├── price-from-json.ts │ ├── qs.ts │ ├── revalidate.ts │ ├── revalidatePage.ts │ ├── sanitizeSlug.ts │ ├── slug-to-text.ts │ ├── slugify.ts │ ├── to-kebab-case.ts │ ├── use-click-away.ts │ ├── use-cloud-api.ts │ ├── use-debounce.ts │ ├── use-is-mounted.tsx │ ├── use-pathname-segments.ts │ ├── use-popup-window.ts │ ├── use-resize.ts │ ├── use-star-count.ts │ ├── use-websocket.tsx │ ├── useIntersection.ts │ └── uuid.ts ├── tsconfig.json └── vercel.json /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | /src/docs 4 | 5 | # dependencies 6 | /node_modules 7 | /.pnp 8 | .pnp.js 9 | 10 | # testing 11 | /coverage 12 | 13 | # next.js 14 | /.next/ 15 | /out/ 16 | 17 | # production 18 | /build 19 | 20 | # misc 21 | .DS_Store 22 | *.pem 23 | 24 | # debug 25 | npm-debug.log* 26 | yarn-debug.log* 27 | yarn-error.log* 28 | .pnpm-debug.log* 29 | 30 | # local env files 31 | .env*.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | # typescript 37 | *.tsbuildinfo 38 | next-env.d.ts 39 | 40 | .env 41 | # Sentry Config File 42 | .sentryclirc 43 | 44 | 45 | /.idea/* 46 | !/.idea/runConfigurations 47 | !/.idea/payload.iml 48 | 49 | /db/* 50 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .tmp 2 | **/.git 3 | **/.hg 4 | **/.pnp.* 5 | **/.svn 6 | **/.yarn/** 7 | **/build 8 | **/dist/** 9 | **/node_modules 10 | **/temp 11 | tsconfig.json 12 | payload-types.ts 13 | tsconfig.tsbuildinfo 14 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 100, 5 | "semi": false 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] 3 | } 4 | -------------------------------------------------------------------------------- /Caddyfile: -------------------------------------------------------------------------------- 1 | # Spin up the caddy server with `caddy run` or `yarn caddy` 2 | # this is useful to test the github oauth flow locally 3 | 4 | payloadcms.localhost { 5 | reverse_proxy :3000 6 | } 7 | 8 | cms.payloadcms.localhost { 9 | reverse_proxy :8001 10 | } -------------------------------------------------------------------------------- /algolia.d.ts: -------------------------------------------------------------------------------- 1 | // See https://github.com/epicweb-dev/epic-stack/discussions/247 2 | 3 | declare module 'react-instantsearch' { 4 | export { usePagination } from './node_modules/react-instantsearch/dist/es/index.js' 5 | export { useSearchBox } from './node_modules/react-instantsearch/dist/es/index.js' 6 | export { useInstantSearch } from './node_modules/react-instantsearch/dist/es/index.js' 7 | export { Configure } from './node_modules/react-instantsearch/dist/es/index.js' 8 | export { InstantSearch } from './node_modules/react-instantsearch/dist/es/index.js' 9 | } 10 | -------------------------------------------------------------------------------- /cssVariables.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | breakpoints: { 3 | s: 768, 4 | m: 1024, 5 | l: 1440, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /next-sitemap.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteUrl: process.env.SITEMAP_URL || 'https://payloadcms.com', 3 | generateRobotsTxt: true, // (optional) 4 | // ...other options 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/PPNeueMontreal-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/PPNeueMontreal-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/RobotoMono-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/RobotoMono-Regular.woff -------------------------------------------------------------------------------- /public/fonts/RobotoMono-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/RobotoMono-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-BlackItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-BoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-LightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Medium.woff -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-MediumItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Regular.woff -------------------------------------------------------------------------------- /public/fonts/UntitledSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/UntitledSans-RegularItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/fonts/UntitledSans-RegularItalic.woff2 -------------------------------------------------------------------------------- /public/images/background-shapes.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/background-shapes.webp -------------------------------------------------------------------------------- /public/images/caret.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/check-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/crt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/crt.gif -------------------------------------------------------------------------------- /public/images/docs/admin-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/admin-dark.jpg -------------------------------------------------------------------------------- /public/images/docs/admin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/admin.jpg -------------------------------------------------------------------------------- /public/images/docs/auth-admin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/auth-admin.jpg -------------------------------------------------------------------------------- /public/images/docs/autosave-enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/autosave-enabled.png -------------------------------------------------------------------------------- /public/images/docs/cloud/create-from-existing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/cloud/create-from-existing.jpg -------------------------------------------------------------------------------- /public/images/docs/cloud/create-from-template.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/cloud/create-from-template.jpg -------------------------------------------------------------------------------- /public/images/docs/cloud/overview-page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/cloud/overview-page.jpg -------------------------------------------------------------------------------- /public/images/docs/cloud/team-settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/cloud/team-settings.jpg -------------------------------------------------------------------------------- /public/images/docs/drafts-enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/drafts-enabled.png -------------------------------------------------------------------------------- /public/images/docs/fields/array-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/array-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/array.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/array.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/array.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/array.png -------------------------------------------------------------------------------- /public/images/docs/fields/blocks-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/blocks-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/blocks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/blocks.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/blocks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/blocks.png -------------------------------------------------------------------------------- /public/images/docs/fields/checkbox-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/checkbox-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/checkbox.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/checkbox.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/checkbox.png -------------------------------------------------------------------------------- /public/images/docs/fields/code-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/code-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/code.png -------------------------------------------------------------------------------- /public/images/docs/fields/collapsible-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/collapsible-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/collapsible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/collapsible.png -------------------------------------------------------------------------------- /public/images/docs/fields/date-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/date-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/date.png -------------------------------------------------------------------------------- /public/images/docs/fields/email-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/email-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/email.png -------------------------------------------------------------------------------- /public/images/docs/fields/group-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/group-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/group.png -------------------------------------------------------------------------------- /public/images/docs/fields/join-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/join-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/join.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/join.png -------------------------------------------------------------------------------- /public/images/docs/fields/json-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/json-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/json.png -------------------------------------------------------------------------------- /public/images/docs/fields/number-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/number-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/number.png -------------------------------------------------------------------------------- /public/images/docs/fields/point-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/point-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/point.png -------------------------------------------------------------------------------- /public/images/docs/fields/radio-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/radio-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/radio.png -------------------------------------------------------------------------------- /public/images/docs/fields/relationship-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/relationship-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/relationship.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/relationship.png -------------------------------------------------------------------------------- /public/images/docs/fields/richText/rte-link-fields-modal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/richText/rte-link-fields-modal.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/richText/rte-upload-element.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/richText/rte-upload-element.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/richText/rte-upload-fields-modal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/richText/rte-upload-fields-modal.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/richtext-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/richtext-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/richtext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/richtext.png -------------------------------------------------------------------------------- /public/images/docs/fields/row-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/row-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/row.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/row.png -------------------------------------------------------------------------------- /public/images/docs/fields/select-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/select-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/select.png -------------------------------------------------------------------------------- /public/images/docs/fields/tabs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/tabs-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/tabs-full-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/tabs-full-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/tabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/tabs.png -------------------------------------------------------------------------------- /public/images/docs/fields/tabs/tabs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/tabs/tabs.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/text-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/text-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/text.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/text.jpg -------------------------------------------------------------------------------- /public/images/docs/fields/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/text.png -------------------------------------------------------------------------------- /public/images/docs/fields/textarea-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/textarea-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/textarea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/textarea.png -------------------------------------------------------------------------------- /public/images/docs/fields/upload-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/upload-dark.png -------------------------------------------------------------------------------- /public/images/docs/fields/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/fields/upload.png -------------------------------------------------------------------------------- /public/images/docs/mdx-example-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/mdx-example-dark.png -------------------------------------------------------------------------------- /public/images/docs/mdx-example-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/mdx-example-light.png -------------------------------------------------------------------------------- /public/images/docs/upload-admin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/upload-admin.jpg -------------------------------------------------------------------------------- /public/images/docs/vercel-toolbar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/vercel-toolbar.jpg -------------------------------------------------------------------------------- /public/images/docs/vercel-visual-editing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/vercel-visual-editing.jpg -------------------------------------------------------------------------------- /public/images/docs/versions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/docs/versions.png -------------------------------------------------------------------------------- /public/images/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/dot.png -------------------------------------------------------------------------------- /public/images/footer-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/footer-bg.jpg -------------------------------------------------------------------------------- /public/images/fullLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/fullLogo.png -------------------------------------------------------------------------------- /public/images/glass-animation.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/glass-animation.mp4 -------------------------------------------------------------------------------- /public/images/gradient-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradient-square.jpg -------------------------------------------------------------------------------- /public/images/gradient-wide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradient-wide.jpg -------------------------------------------------------------------------------- /public/images/gradients/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradients/1.jpg -------------------------------------------------------------------------------- /public/images/gradients/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradients/2.jpg -------------------------------------------------------------------------------- /public/images/gradients/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradients/3.jpg -------------------------------------------------------------------------------- /public/images/gradients/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/gradients/4.jpg -------------------------------------------------------------------------------- /public/images/hero-gradient.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/hero-gradient.jpg -------------------------------------------------------------------------------- /public/images/hero-shapes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/hero-shapes.jpg -------------------------------------------------------------------------------- /public/images/home-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/home-bg.png -------------------------------------------------------------------------------- /public/images/label-link-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/images/link-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/images/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/logo-dark.png -------------------------------------------------------------------------------- /public/images/mobile-hero-shapes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/mobile-hero-shapes.jpg -------------------------------------------------------------------------------- /public/images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/noise.png -------------------------------------------------------------------------------- /public/images/og-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/og-image.jpg -------------------------------------------------------------------------------- /public/images/parter-program-og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/parter-program-og.jpg -------------------------------------------------------------------------------- /public/images/pedestal-mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/scanline-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/scanline-dark.png -------------------------------------------------------------------------------- /public/images/scanline-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/scanline-light.png -------------------------------------------------------------------------------- /public/images/screen-mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/stripe-overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/stripe-overlay.png -------------------------------------------------------------------------------- /public/images/universal-truth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/payloadcms/website/b8f7513d0e1360bae3025b55b2fd0fc06e458010/public/images/universal-truth.jpg -------------------------------------------------------------------------------- /public/js/theme.js: -------------------------------------------------------------------------------- 1 | console.log('script') 2 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # * 2 | User-agent: * 3 | Allow: / 4 | 5 | # Host 6 | Host: https://payloadcms.com 7 | 8 | # Sitemaps 9 | Sitemap: https://payloadcms.com/sitemap.xml 10 | -------------------------------------------------------------------------------- /public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | https://payloadcms.com/sitemap-0.xml 4 | -------------------------------------------------------------------------------- /src/access/isAdmin.ts: -------------------------------------------------------------------------------- 1 | import type { Access, FieldAccess } from 'payload' 2 | 3 | export const isAdmin: Access = ({ req: { user } }) => { 4 | // Return true or false based on if the user has an admin role 5 | return Boolean(user?.roles?.includes('admin')) 6 | } 7 | 8 | export const isAdminFieldLevel: FieldAccess = ({ req: { user } }) => { 9 | // Return true or false based on if the user has an admin role 10 | return Boolean(user?.roles?.includes('admin')) 11 | } 12 | -------------------------------------------------------------------------------- /src/access/publishedOnly.ts: -------------------------------------------------------------------------------- 1 | import type { Access } from 'payload' 2 | 3 | export const publishedOnly: Access = ({ req: { user } }) => { 4 | if (user?.roles?.includes('admin')) { 5 | return true 6 | } 7 | 8 | return { 9 | _status: { 10 | equals: 'published', 11 | }, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/adapters/AlgoliaSearchBox/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .algoliaSearchBox { 4 | @include label; 5 | & { 6 | font-size: inherit; 7 | padding: 0; 8 | border: none; 9 | background-color: transparent; 10 | } 11 | 12 | &::placeholder { 13 | color: black; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/(tabs)/settings/DeletionConfirmationForm/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .warning, 4 | .emailInput { 5 | margin-bottom: 1rem; 6 | } 7 | 8 | .modal { 9 | & > * { 10 | width: 800px; 11 | overflow-x: scroll; 12 | max-height: 100vh; 13 | } 14 | } 15 | 16 | .modalActions { 17 | display: flex; 18 | gap: 1rem; 19 | justify-content: flex-end; 20 | width: 100%; 21 | padding-top: 2rem; 22 | border-top: 1px solid var(--theme-border-color); 23 | margin-top: 2rem; 24 | } 25 | 26 | @include small-break { 27 | .modalActions { 28 | flex-wrap: wrap; 29 | } 30 | 31 | .modal { 32 | & > * { 33 | padding: 2rem var(--gutter-h); 34 | border: 0; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/(tabs)/settings/page.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from 'next' 2 | 3 | import { fetchMe } from '@cloud/_api/fetchMe' 4 | import { mergeOpenGraph } from '@root/seo/mergeOpenGraph' 5 | 6 | import { SettingsPage } from './page_client' 7 | 8 | export default async () => { 9 | const { user } = await fetchMe() 10 | return 11 | } 12 | 13 | export const metadata: Metadata = { 14 | openGraph: mergeOpenGraph({ 15 | title: 'My Account', 16 | url: `/cloud/settings`, 17 | }), 18 | title: 'My Account', 19 | } 20 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/(tabs)/billing/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .description { 4 | a { 5 | color: var(--theme-blue-500); 6 | cursor: pointer; 7 | text-decoration: underline; 8 | } 9 | } 10 | 11 | .fields { 12 | margin-bottom: 2rem; 13 | display: flex; 14 | flex-direction: column; 15 | gap: 0.5rem; 16 | 17 | @include mid-break { 18 | margin-bottom: 1rem; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/(tabs)/members/UpdateRolesConfirmationForm/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .modal { 4 | & > * { 5 | width: 800px; 6 | overflow-x: scroll; 7 | max-height: 100vh; 8 | } 9 | } 10 | 11 | .modalActions { 12 | display: flex; 13 | gap: 1rem; 14 | justify-content: flex-end; 15 | width: 100%; 16 | padding-top: 2rem; 17 | border-top: 1px solid var(--theme-border-color); 18 | margin-top: 2rem; 19 | } 20 | 21 | @include small-break { 22 | .modalActions { 23 | flex-wrap: wrap; 24 | } 25 | 26 | .modal { 27 | & > * { 28 | padding: 2rem var(--gutter-h); 29 | border: 0; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/(tabs)/members/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .description { 4 | a { 5 | color: var(--theme-blue-500); 6 | cursor: pointer; 7 | text-decoration: underline; 8 | } 9 | } 10 | 11 | .form { 12 | display: flex; 13 | flex-direction: column; 14 | gap: 1rem; 15 | 16 | @include mid-break { 17 | margin-bottom: 1rem; 18 | } 19 | } 20 | 21 | .submit { 22 | align-self: flex-start; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/(tabs)/subscriptions/reducer.ts: -------------------------------------------------------------------------------- 1 | import type { SubscriptionsResult } from '@cloud/_api/fetchSubscriptions' 2 | 3 | export const subscriptionsReducer = ( 4 | state: null | SubscriptionsResult, 5 | action: { 6 | payload: SubscriptionsResult 7 | type: 'add' | 'reset' 8 | }, 9 | ): null | SubscriptionsResult => { 10 | switch (action.type) { 11 | case 'add': 12 | return { 13 | ...(state || {}), 14 | data: [...(state?.data || []), ...(action?.payload?.data || [])], 15 | has_more: action?.payload?.has_more || false, 16 | } 17 | case 'reset': 18 | return action.payload 19 | default: 20 | return state 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/TeamBillingMessages/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .billingMessages { 4 | margin-bottom: 2rem; 5 | 6 | @include mid-break { 7 | margin-bottom: 1rem; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/layout.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .gridWrap { 4 | margin-bottom: 4rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/(tabs)/settings/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .error { 4 | color: var(--theme-error-500); 5 | } 6 | 7 | .success { 8 | color: var(--theme-success-500); 9 | } 10 | 11 | .form { 12 | & > * { 13 | margin-bottom: 1rem; 14 | } 15 | 16 | & > *:last-child { 17 | margin-bottom: 0; 18 | } 19 | } 20 | 21 | .hr { 22 | margin: 2rem 0; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/ProjectBillingMessages/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .billingMessages { 4 | margin-bottom: 2rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/(build-settings)/page.module.scss: -------------------------------------------------------------------------------- 1 | .form { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1rem; 5 | 6 | button[type='submit'] { 7 | width: auto; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/_layoutComponents/NoData/index.module.scss: -------------------------------------------------------------------------------- 1 | .noData { 2 | padding: 1rem; 3 | background-color: var(--theme-elevation-50); 4 | border: 1px solid var(--theme-border-color); 5 | margin: 0; 6 | color: var(--theme-elevation-600); 7 | } 8 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/_layoutComponents/NoData/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | type Props = { 6 | message: string 7 | } 8 | export const NoData: React.FC = ({ message }) => { 9 | return

{message}

10 | } 11 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/_layoutComponents/SectionHeader/index.module.scss: -------------------------------------------------------------------------------- 1 | .sectionHeader { 2 | margin-bottom: 1.75rem; 3 | } 4 | 5 | .titleAndLink { 6 | display: flex; 7 | justify-content: space-between; 8 | align-items: center; 9 | width: 100%; 10 | } 11 | 12 | .intro { 13 | margin-top: 0.25rem; 14 | display: block; 15 | color: var(--theme-elevation-450); 16 | } 17 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/billing/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .error { 4 | color: var(--theme-error-500); 5 | } 6 | 7 | .success { 8 | color: var(--theme-success-500); 9 | } 10 | 11 | .fields { 12 | display: flex; 13 | flex-direction: column; 14 | gap: 1rem; 15 | } 16 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/domains/AddDomain/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .formContent { 4 | gap: 1rem; 5 | display: flex; 6 | flex-direction: column; 7 | } 8 | 9 | .actionFooter { 10 | display: flex; 11 | justify-content: flex-end; 12 | gap: 1rem; 13 | margin-top: 1rem; 14 | padding-top: 1rem; 15 | border-top: 1px solid var(--theme-border-color); 16 | } 17 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/email/AddEmailDomain/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .formContent { 4 | gap: 1rem; 5 | display: flex; 6 | flex-direction: column; 7 | } 8 | 9 | .actionFooter { 10 | display: flex; 11 | justify-content: flex-end; 12 | gap: 1rem; 13 | margin-top: 1rem; 14 | padding-top: 1rem; 15 | border-top: 1px solid var(--theme-border-color); 16 | } 17 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/environment-variables/page.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .header { 4 | margin-bottom: 1rem; 5 | } 6 | 7 | .description { 8 | margin-bottom: 1.5rem; 9 | } 10 | 11 | .link { 12 | color: var(--color-blue-500); 13 | } 14 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/environment-variables/validations.ts: -------------------------------------------------------------------------------- 1 | export const validateKey = (key: string, existingKeys: string[]): string | true => { 2 | if (!key) { 3 | return 'Key is required' 4 | } 5 | 6 | if (!/^\w+$/.test(key)) { 7 | return 'Only alphanumeric characters and underscores are allowed' 8 | } 9 | 10 | if (existingKeys?.includes(key)) { 11 | return 'This key is already in use' 12 | } 13 | 14 | return true 15 | } 16 | 17 | export const validateValue = (value: string): string | true => { 18 | if (!value) { 19 | return 'Value is required' 20 | } 21 | 22 | return true 23 | } 24 | -------------------------------------------------------------------------------- /src/app/(frontend)/(cloud)/cloud/[team-slug]/[project-slug]/(tabs)/settings/plan/DeletePlanButton/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { Button } from '@components/Button/index' 4 | import { useModal } from '@faceless-ui/modal' 5 | import React from 'react' 6 | 7 | import { deletePlanModalSlug } from '../DeletePlanModal/index' 8 | 9 | export const DeletePlanButton: React.FC = () => { 10 | const { openModal } = useModal() 11 | 12 | return ( 13 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /src/components/BackgroundGradient/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Suspense } from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | type BackgroundGradientProps = { 6 | className?: string 7 | } 8 | 9 | export default function BackgroundGradient(props: BackgroundGradientProps) { 10 | const { className } = props 11 | 12 | return ( 13 |
14 | 15 | 23 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /src/components/BigThree/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | @keyframes fadeInAndUp { 4 | 0% { 5 | opacity: 0; 6 | transform: translateY(40%); 7 | } 8 | 9 | 20% { 10 | opacity: 0; 11 | } 12 | 13 | 100% { 14 | opacity: 1; 15 | transform: translateY(0); 16 | } 17 | } 18 | 19 | .container { 20 | width: 100%; 21 | } 22 | 23 | .three { 24 | opacity: 0; 25 | transform: translateY(40%); 26 | animation: fadeInAndUp 2s cubic-bezier(0.4, 0, 0, 1) forwards 0.25s; 27 | fill: white; 28 | 29 | @include mid-break { 30 | max-width: 120vw; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/components/BlockSpacing/index.module.scss: -------------------------------------------------------------------------------- 1 | .top { 2 | margin-top: var(--block-spacing); 3 | } 4 | 5 | .bottom { 6 | margin-bottom: var(--block-spacing); 7 | } 8 | -------------------------------------------------------------------------------- /src/components/BlockSpacing/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | type Props = { 6 | bottom?: boolean 7 | children: React.ReactNode 8 | className?: string 9 | style?: React.CSSProperties 10 | top?: boolean 11 | } 12 | 13 | export const BlockSpacing: React.FC = ({ 14 | bottom = true, 15 | children, 16 | className, 17 | style, 18 | top = true, 19 | }) => { 20 | return ( 21 |
27 | {children} 28 |
29 | ) 30 | } 31 | -------------------------------------------------------------------------------- /src/components/BorderBox/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .borderBox { 4 | padding: 1.5rem; 5 | border: 0.5px solid var(--theme-border-color); 6 | 7 | @include mid-break { 8 | padding: 0.75rem; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/BorderBox/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | type Props = { 6 | children: React.ReactNode 7 | className?: string 8 | } 9 | export const BorderBox: React.FC = ({ children, className }) => { 10 | return
{children}
11 | } 12 | -------------------------------------------------------------------------------- /src/components/Breadcrumbs/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .breadcrumbs { 4 | display: flex; 5 | } 6 | 7 | .label { 8 | display: flex; 9 | align-items: center; 10 | white-space: nowrap; 11 | line-height: inherit; 12 | } 13 | 14 | .ellipsis { 15 | overflow: hidden; 16 | width: 100%; 17 | max-width: max-content; 18 | } 19 | 20 | .labelContent { 21 | text-overflow: ellipsis; 22 | white-space: nowrap; 23 | text-decoration: none; 24 | } 25 | 26 | a.labelContent { 27 | &:hover { 28 | text-decoration: underline; 29 | } 30 | } 31 | 32 | .divider { 33 | margin: 0 0.5rem; 34 | color: var(--theme-elevation-300); 35 | } 36 | -------------------------------------------------------------------------------- /src/components/CMSForm/Label/types.ts: -------------------------------------------------------------------------------- 1 | import type { HTMLAttributes } from 'react' 2 | 3 | export interface Props extends HTMLAttributes { 4 | actionsClassName?: string 5 | actionsSlot?: React.ReactNode 6 | htmlFor?: string 7 | label?: React.ReactNode | string 8 | margin?: boolean 9 | required?: boolean 10 | } 11 | -------------------------------------------------------------------------------- /src/components/CMSForm/Width/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .width { 4 | padding-left: 0.5rem; 5 | padding-right: 0.5rem; 6 | 7 | @include mid-break { 8 | width: 100% !important; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/CMSForm/Width/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const Width: React.FC<{ children: React.ReactNode; width?: null | number }> = ({ 6 | children, 7 | width, 8 | }) => { 9 | return ( 10 |
11 | {children} 12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /src/components/CMSForm/fields.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .message { 4 | padding: 1.5rem 2rem; 5 | 6 | &::before { 7 | content: ''; 8 | width: calc(100% - 2px); 9 | position: absolute; 10 | height: 100%; 11 | left: 1px; 12 | top: 0; 13 | z-index: -1; 14 | background-color: var(--theme-input-bg); 15 | } 16 | 17 | @include mid-break { 18 | padding: 1.5rem 1rem; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/components/Code/types.ts: -------------------------------------------------------------------------------- 1 | import type { Page } from '@root/payload-types' 2 | 3 | type CodeFeatureBlock = Extract 4 | 5 | type CodeBlips = NonNullable[number]['codeBlips'] 6 | 7 | export type CodeBlip = NonNullable[number] 8 | 9 | export interface Props { 10 | children: string 11 | className?: string 12 | codeBlips?: CodeBlips 13 | disableMinHeight?: boolean 14 | parentClassName?: string 15 | showLineNumbers?: boolean 16 | title?: string 17 | } 18 | -------------------------------------------------------------------------------- /src/components/CodeBlip/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | import Button from './Button/index' 3 | import { Context, Provider, useCodeBlip } from './CodeBlipContext' 4 | import Modal from './Modal/index' 5 | 6 | export { useCodeBlip } 7 | 8 | export default { Button, Context, Modal, Provider, useCodeBlip } 9 | -------------------------------------------------------------------------------- /src/components/CopyToClipboard/index.module.scss: -------------------------------------------------------------------------------- 1 | .copyTextarea { 2 | position: absolute; 3 | opacity: 0; 4 | border: none; 5 | pointer-events: none; 6 | user-select: none; 7 | width: 0; 8 | height: 1px; 9 | } 10 | -------------------------------------------------------------------------------- /src/components/DiscordGitBody/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const DiscordGitBody: React.FC<{ body?: string; platform?: 'Discord' | 'GitHub' }> = ({ 6 | body, 7 | platform, 8 | }) => { 9 | return ( 10 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /src/components/Drawer/types.ts: -------------------------------------------------------------------------------- 1 | import type { HTMLAttributes } from 'react' 2 | 3 | export interface Props { 4 | children: React.ReactNode 5 | className?: string 6 | description?: string 7 | header?: React.ReactNode 8 | size?: 'l' | 'm' | 's' 9 | slug: string 10 | 11 | title?: React.ReactNode | string 12 | } 13 | 14 | export type TogglerProps = { 15 | children: React.ReactNode 16 | className?: string 17 | disabled?: boolean 18 | slug: string 19 | } & HTMLAttributes 20 | -------------------------------------------------------------------------------- /src/components/Drawer/useDrawerSlug.tsx: -------------------------------------------------------------------------------- 1 | import { useId } from 'react' 2 | 3 | import { formatDrawerSlug } from './index' 4 | 5 | export const useDrawerSlug = (slug: string): string => { 6 | const uuid = useId() 7 | return formatDrawerSlug({ 8 | slug: `${slug}-${uuid}`, 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/components/DropdownMenu/MenuContent/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .menuContent { 4 | @include small; 5 | & { 6 | position: absolute; 7 | top: calc(100% + 1rem); 8 | left: 50%; 9 | z-index: 2; 10 | transform: translate3d(-50%, -20%, 0); 11 | padding: 0.75rem; 12 | color: var(--theme-text); 13 | white-space: nowrap; 14 | background-color: var(--theme-elevation-150); 15 | display: flex; 16 | flex-direction: column; 17 | gap: 0.5rem; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/DropdownMenu/MenuContent/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export type Props = { 6 | children: React.ReactNode 7 | className?: string 8 | } 9 | 10 | export const MenuContent: React.FC = ({ children, className }) => { 11 | const tooltipClasses = [classes.menuContent, className].filter(Boolean).join(' ') 12 | 13 | return 14 | } 15 | -------------------------------------------------------------------------------- /src/components/EdgeScroll/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const EdgeScroll: React.FC<{ 6 | children: React.ReactNode 7 | className?: string 8 | mobileOnly?: boolean 9 | }> = ({ children, className, mobileOnly }) => { 10 | return ( 11 |
16 |
17 | {children} 18 |
19 |
20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /src/components/Gutter/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .leftGutter { 4 | padding-left: var(--gutter-h); 5 | } 6 | 7 | .rightGutter { 8 | padding-right: var(--gutter-h); 9 | } 10 | 11 | .gutter.disableMobile { 12 | @include mid-break { 13 | padding-left: 0; 14 | padding-right: 0; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/HR/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .hr { 4 | margin: 3rem 0; 5 | 6 | @include mid-break { 7 | margin: 2rem 0; 8 | } 9 | } 10 | 11 | .margin--small { 12 | margin: 1rem 0; 13 | 14 | @include mid-break { 15 | margin: 0.5rem 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/components/HR/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const HR: React.FC<{ 6 | className?: string 7 | margin?: 'small' 8 | }> = ({ className, margin }) => { 9 | return ( 10 |
15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /src/components/Header/Docsearch/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .docSearch { 4 | position: relative; 5 | min-width: 20px; 6 | :global(.DocSearch-Button) { 7 | padding: 0; 8 | margin: 0; 9 | } 10 | } 11 | 12 | .blogResult { 13 | :global(.DocSearch-Hit-path) { 14 | color: inherit; 15 | 16 | &::before { 17 | content: 'Blog - '; 18 | } 19 | } 20 | 21 | :global(.DocSearch-Hit-icon) { 22 | &::before { 23 | content: '\2636'; 24 | font-size: 25px; 25 | display: flex; 26 | align-items: center; 27 | transform: translateY(2px); 28 | } 29 | 30 | & svg { 31 | display: none; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/components/Header/Docsearch/index.tsx: -------------------------------------------------------------------------------- 1 | import Dynamic from 'next/dynamic' 2 | import React from 'react' 3 | 4 | import classes from './index.module.scss' 5 | 6 | const Component = Dynamic(() => import('./Component')) 7 | 8 | export const DocSearch: React.FC = () => { 9 | return ( 10 |
11 | 12 | 13 | 14 |
15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /src/components/Heading/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .headingScrollTo { 4 | position: absolute; 5 | bottom: calc(100% + 2rem); 6 | left: 0; 7 | width: 100%; 8 | 9 | @include mid-break { 10 | bottom: calc(100% + 1rem); 11 | } 12 | } 13 | 14 | .h1 { 15 | @include h1; 16 | } 17 | 18 | .h2 { 19 | @include h2; 20 | } 21 | 22 | .h3 { 23 | @include h3; 24 | } 25 | 26 | .h4 { 27 | @include h4; 28 | } 29 | 30 | .h5 { 31 | @include h5; 32 | } 33 | 34 | .h6 { 35 | @include h6; 36 | } 37 | 38 | .noMargin { 39 | margin: 0; 40 | } 41 | 42 | .noMarginTop { 43 | margin-top: 0; 44 | } 45 | 46 | .noMarginBottom { 47 | margin-bottom: 0; 48 | } 49 | -------------------------------------------------------------------------------- /src/components/Hero/Default/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .defaultHero { 4 | position: relative; 5 | } 6 | 7 | .label { 8 | margin-bottom: 2rem; 9 | 10 | @include mid-break { 11 | margin-bottom: 1rem; 12 | } 13 | 14 | label { 15 | margin-top: 0; 16 | margin-bottom: 0; 17 | } 18 | } 19 | 20 | .container { 21 | align-items: center; 22 | 23 | @include mid-break { 24 | row-gap: 2rem; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Indicator/index.module.scss: -------------------------------------------------------------------------------- 1 | .indicator { 2 | border-radius: 100%; 3 | width: 10px; 4 | height: 10px; 5 | position: relative; 6 | flex-shrink: 0; 7 | background-color: var(--theme-elevation-500); 8 | } 9 | 10 | .status--SUCCESS, 11 | .status--RUNNING { 12 | background-color: var(--theme-success-500); 13 | } 14 | 15 | .status--ERROR { 16 | background-color: var(--theme-error-500); 17 | } 18 | 19 | .status--UNKNOWN, 20 | .status--PENDING { 21 | background-color: var(--theme-elevation-500); 22 | } 23 | -------------------------------------------------------------------------------- /src/components/Indicator/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import { Spinner } from '../Spinner/index' 4 | import classes from './index.module.scss' 5 | 6 | export type IndicatorProps = { 7 | className?: string 8 | spinner?: boolean 9 | status?: 'ERROR' | 'PENDING' | 'RUNNING' | 'SUCCESS' | 'SUSPENDED' | 'UNKNOWN' 10 | } 11 | 12 | export const Indicator: React.FC = ({ 13 | className, 14 | spinner = false, 15 | status = 'UNKNOWN', 16 | }) => { 17 | return ( 18 |
23 | {spinner && } 24 |
25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Label/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const Label: React.FC<{ children: React.ReactNode; className?: string }> = ({ 6 | children, 7 | className, 8 | }) => { 9 | return

{children}

10 | } 11 | -------------------------------------------------------------------------------- /src/components/LargeBody/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .largeBody { 4 | @include large-body; 5 | } 6 | -------------------------------------------------------------------------------- /src/components/LargeBody/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const LargeBody: React.FC<{ children: React.ReactNode }> = ({ children }) => { 6 | return

{children}

7 | } 8 | -------------------------------------------------------------------------------- /src/components/LineDraw/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react' 4 | 5 | import classes from './index.module.scss' 6 | 7 | export const LineDraw: React.FC<{ 8 | active?: boolean | null 9 | align?: 'bottom' | 'top' 10 | className?: string 11 | disabled?: boolean | null 12 | }> = ({ active: isHovered, align = 'top', className, disabled }) => { 13 | return ( 14 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /src/components/LoadingShimmer/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | @keyframes shimmer { 4 | 0% { 5 | opacity: 1; 6 | } 7 | 50% { 8 | opacity: 0.75; 9 | } 10 | 100% { 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .loading { 16 | & > *:not(:last-child) { 17 | margin-bottom: 1rem; 18 | } 19 | } 20 | 21 | .shimmer { 22 | width: 100%; 23 | height: 2.5rem; // same as input height `formInput` 24 | background-color: var(--theme-elevation-50); 25 | border-radius: 1px; 26 | opacity: 1; 27 | will-change: opacity; 28 | animation: shimmer 1s infinite; 29 | } 30 | 31 | :global([data-theme='dark']) { 32 | .shimmer { 33 | background-color: var(--theme-elevation-150); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/components/MaxWidth/index.module.scss: -------------------------------------------------------------------------------- 1 | .large { 2 | max-width: 1000px; 3 | } 4 | 5 | .medium { 6 | max-width: 800px; 7 | } 8 | 9 | .small { 10 | max-width: 600px; 11 | } 12 | 13 | .centered { 14 | margin: 0 auto; 15 | } 16 | -------------------------------------------------------------------------------- /src/components/MaxWidth/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | type Props = { 6 | centered?: boolean 7 | children: React.ReactNode 8 | className?: string 9 | size?: 'large' | 'medium' | 'small' 10 | } 11 | export const MaxWidth: React.FC = ({ centered, children, className, size = 'large' }) => { 12 | return ( 13 |
18 | {children} 19 |
20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /src/components/Media/Image/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .placeholder { 4 | background-color: var(--theme-elevation-50); 5 | } 6 | 7 | [data-theme='dark'] { 8 | .hasDarkModeFallback.themeLight { 9 | display: none; 10 | } 11 | } 12 | 13 | [data-theme='dark'] [data-theme='light'] { 14 | .hasDarkModeFallback.themeLight { 15 | display: block; 16 | } 17 | } 18 | 19 | [data-theme='light'] { 20 | .themeDark { 21 | display: none; 22 | } 23 | } 24 | 25 | [data-theme='light'] [data-theme='dark'] { 26 | .themeDark { 27 | display: block; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/components/Media/Video/index.module.scss: -------------------------------------------------------------------------------- 1 | .video { 2 | max-width: 100%; 3 | width: 100%; 4 | display: block; 5 | } 6 | 7 | .cover { 8 | object-fit: cover; 9 | width: 100%; 10 | height: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/MediaParallax/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .parallaxMedia { 4 | position: relative; 5 | display: grid; 6 | grid-template-columns: 1fr; 7 | grid-template-rows: 1fr; 8 | 9 | & .parallaxItem { 10 | grid-row: 1/2; 11 | grid-column: 1/2; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/components/MediaStack/index.tsx: -------------------------------------------------------------------------------- 1 | import type { Media as MediaType } from '@root/payload-types' 2 | 3 | import { Media } from '@components/Media' 4 | import Image from 'next/image' 5 | 6 | import classes from './index.module.scss' 7 | 8 | type MediaStackProps = { 9 | media: { 10 | image: MediaType | string 11 | }[] 12 | } 13 | 14 | export const MediaStack: React.FC = ({ media }) => { 15 | return ( 16 |
17 | {typeof media[0].image !== 'string' && ( 18 | 19 | )} 20 | {typeof media[1].image !== 'string' && ( 21 | 22 | )} 23 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /src/components/ModalWindow/index.module.scss: -------------------------------------------------------------------------------- 1 | .modalWindow { 2 | all: unset; 3 | width: 100%; 4 | height: 100%; 5 | backdrop-filter: blur(5px); 6 | z-index: calc(var(--z-modal) + 1); 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | } 11 | 12 | .window { 13 | background-color: var(--theme-bg); 14 | border: 1px solid var(--theme-elevation-250); 15 | padding: 2rem; 16 | width: 700px; 17 | max-width: calc(100% - var(--gutter-h)); 18 | margin: auto; 19 | } 20 | -------------------------------------------------------------------------------- /src/components/ModalWindow/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { Modal } from '@faceless-ui/modal' 4 | import * as React from 'react' 5 | 6 | import classes from './index.module.scss' 7 | 8 | type ModalWindowProps = { 9 | children: React.ReactNode 10 | className?: string 11 | slug: string 12 | } 13 | export const ModalWindow: React.FC = ({ slug, children, className }) => { 14 | return ( 15 | 16 |
{children}
17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/components/OpenPost/index.tsx: -------------------------------------------------------------------------------- 1 | import { BackgroundScanline } from '@components/BackgroundScanline/index' 2 | import { ArrowIcon } from '@root/icons/ArrowIcon/index' 3 | import React from 'react' 4 | 5 | import classes from './index.module.scss' 6 | 7 | const OpenPost: React.FC<{ platform: 'Discord' | 'GitHub'; url: string }> = ({ platform, url }) => { 8 | return ( 9 | 10 | 11 |
12 | Open 13 |
14 |

Continue the discussion in {platform}

15 |
16 | ) 17 | } 18 | 19 | export default OpenPost 20 | -------------------------------------------------------------------------------- /src/components/PartnerGrid/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .PartnerGridWrap { 4 | display: flex; 5 | width: 100%; 6 | flex-wrap: wrap; 7 | row-gap: 2rem; 8 | 9 | @include extra-small-break { 10 | flex-direction: column; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/components/PartnerGrid/index.tsx: -------------------------------------------------------------------------------- 1 | import type { Partner } from '@root/payload-types' 2 | 3 | import { PartnerCard } from '@components/cards/PartnerCard' 4 | 5 | import classes from './index.module.scss' 6 | 7 | type PartnerGridProps = { 8 | featured?: boolean 9 | partners: (Partner | string)[] 10 | } 11 | 12 | export const PartnerGrid = (props: PartnerGridProps) => { 13 | const { featured, partners } = props 14 | return ( 15 |
16 | {partners.map((partner) => { 17 | return ( 18 | typeof partner !== 'string' && ( 19 | 20 | ) 21 | ) 22 | })} 23 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Pill/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const Pill: React.FC<{ 6 | className?: string 7 | color?: 'blue' | 'default' | 'error' | 'success' | 'warning' 8 | text: string 9 | }> = ({ className, color, text }) => { 10 | return ( 11 |
16 | {text} 17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/components/PixelBackground/index.module.scss: -------------------------------------------------------------------------------- 1 | .pixelBackground { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | width: 100%; 6 | height: 100%; 7 | background-image: url('/images/dot.png'); 8 | background-repeat: repeat; 9 | } 10 | -------------------------------------------------------------------------------- /src/components/PixelBackground/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | import classes from './index.module.scss' 4 | 5 | export const PixelBackground: React.FC<{ 6 | className?: string 7 | }> = (props) => { 8 | const { className } = props 9 | return
10 | } 11 | -------------------------------------------------------------------------------- /src/components/RedeployButton/index.scss: -------------------------------------------------------------------------------- 1 | @use '~@payloadcms/ui/scss'; 2 | 3 | .redeploy-button { 4 | @extend %btn-reset; 5 | padding-top: base(0.75); 6 | cursor: pointer; 7 | 8 | &:hover { 9 | text-decoration: underline; 10 | } 11 | 12 | &:disabled { 13 | cursor: not-allowed; 14 | opacity: 0.5; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/RefreshMdxToLexicalButton/index.scss: -------------------------------------------------------------------------------- 1 | @use '~@payloadcms/ui/scss'; 2 | 3 | .refresh-docs-button { 4 | @extend %btn-reset; 5 | padding-top: base(0.75); 6 | cursor: pointer; 7 | 8 | &:hover { 9 | text-decoration: underline; 10 | } 11 | 12 | &:disabled { 13 | cursor: not-allowed; 14 | opacity: 0.5; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/RefreshRouterOnSave/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | import { RefreshRouteOnSave as PayloadLivePreview } from '@payloadcms/live-preview-react' 3 | import { useRouter } from 'next/navigation' 4 | import React from 'react' 5 | 6 | export const RefreshRouteOnSave: React.FC = () => { 7 | const router = useRouter() 8 | 9 | return ( 10 | router.refresh()} 12 | serverURL={process.env.NEXT_PUBLIC_SITE_URL || ''} 13 | /> 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /src/components/RenderBlocks/utilities.ts: -------------------------------------------------------------------------------- 1 | import type { BlocksProp } from '@components/RenderBlocks/index' 2 | 3 | /** 4 | * Get the key of the fields from the block 5 | */ 6 | export function getFieldsKeyFromBlock(block: BlocksProp): string { 7 | if (!block) { 8 | return '' 9 | } 10 | 11 | const keys = Object.keys(block) 12 | 13 | const key = keys.find((value) => { 14 | return value.endsWith('Fields') 15 | }) 16 | 17 | return key ?? '' 18 | } 19 | -------------------------------------------------------------------------------- /src/components/RenderParams/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common.scss' as *; 2 | 3 | .renderParams { 4 | margin-top: 2rem; 5 | 6 | @include mid-break { 7 | margin-top: 1rem; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/components/RenderParams/index.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense } from 'react' 2 | 3 | import type { Props } from './Component' 4 | 5 | import { RenderParamsComponent } from './Component' 6 | 7 | // Using `useSearchParams` from `next/navigation` causes the entire route to de-optimize into client-side rendering 8 | // To fix this, we wrap the component in a `Suspense` component 9 | // See https://nextjs.org/docs/messages/deopted-into-client-rendering for more info 10 | 11 | export const RenderParams: React.FC = (props) => { 12 | return ( 13 | 14 | 15 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/components/RichText/Heading/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .node { 4 | letter-spacing: 0; 5 | 6 | scroll-margin-top: calc(var(--header-height) + 1rem); 7 | position: relative; 8 | 9 | * { 10 | color: var(--theme-text); 11 | } 12 | 13 | &:hover { 14 | .linkedHeading { 15 | opacity: 0.75; 16 | } 17 | } 18 | } 19 | 20 | .node .linkedHeading { 21 | position: absolute; 22 | transform: translate(-50%, -40%); 23 | transition: opacity 200ms ease; 24 | opacity: 0.25; 25 | top: 50%; 26 | left: -1.15rem; 27 | 28 | @include small-break { 29 | transform: translate(-50%, -50%) scale(0.65); 30 | left: -0.5rem; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/components/RichText/LightDarkImage/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .imageWrap { 4 | margin: 2.5rem 0; 5 | 6 | .caption { 7 | font-style: italic; 8 | padding: 0.75rem 0 0; 9 | } 10 | 11 | @include large-break { 12 | margin: 2rem 0; 13 | } 14 | 15 | @include small-break { 16 | margin: 1.5rem 0; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/components/RichText/LightDarkImage/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | import { useThemePreference } from '@root/providers/Theme/index' 3 | import React from 'react' 4 | 5 | import classes from './index.module.scss' 6 | 7 | const LightDarkImage: (props: { 8 | alt: string 9 | caption?: string 10 | srcDark: string 11 | srcLight: string 12 | }) => React.JSX.Element = ({ alt, caption, srcDark, srcLight }) => { 13 | const { theme } = useThemePreference() 14 | const src = theme === 'dark' ? srcDark : srcLight 15 | 16 | return ( 17 |
18 | {alt} 19 | {caption &&
{caption}
} 20 |
21 | ) 22 | } 23 | 24 | export default LightDarkImage 25 | -------------------------------------------------------------------------------- /src/components/RichText/RestExamples/types.ts: -------------------------------------------------------------------------------- 1 | import type { DefaultTypedEditorState } from '@payloadcms/richtext-lexical' 2 | 3 | export interface Example { 4 | drawerContent?: DefaultTypedEditorState 5 | req: { 6 | body?: any 7 | credentials?: boolean 8 | headers?: boolean | string 9 | query?: boolean | string 10 | } 11 | res: { 12 | data?: any 13 | paginated?: boolean 14 | } 15 | slug: string 16 | } 17 | 18 | export interface Data { 19 | description: string 20 | example: Example 21 | method: string 22 | operation: string 23 | path: string 24 | } 25 | 26 | export interface Props { 27 | data: Data[] 28 | inDrawer?: boolean 29 | } 30 | -------------------------------------------------------------------------------- /src/components/RichText/UploadBlock/index.module.scss: -------------------------------------------------------------------------------- 1 | @use '@scss/common' as *; 2 | 3 | .imageWrap { 4 | margin: 2.5rem 0; 5 | 6 | .caption { 7 | font-style: italic; 8 | padding: 0.75rem 0 0; 9 | } 10 | 11 | @include large-break { 12 | margin: 2rem 0; 13 | } 14 | 15 | @include small-break { 16 | margin: 1.5rem 0; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/components/RichText/UploadBlock/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | import { hasText } from '@payloadcms/richtext-lexical/shared' 3 | import React from 'react' 4 | 5 | import { RichText } from '..' 6 | import classes from './index.module.scss' 7 | 8 | export const UploadBlockImage: (props: { 9 | alt?: string 10 | caption?: any 11 | src: string 12 | }) => React.JSX.Element = ({ alt, caption, src }) => { 13 | return ( 14 |
15 | {alt} 16 | {caption && hasText(caption) ? ( 17 |
18 | 19 |
20 | ) : null} 21 |
22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /src/components/RichText/Video/Vimeo/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import classes from '../index.module.scss' 4 | 5 | export const VimeoPlayer: React.FC<{ 6 | videoID?: string 7 | }> = ({ videoID }) => { 8 | return ( 9 |