diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..5cf6aad4e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,126 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances of + any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, + without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +support@documenso.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eca35cd8b..e2db661b8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,20 +5,36 @@ If you plan to contribute to Documenso, please take a moment to feel awesome ✨ ## Before getting started - Before jumping into a PR be sure to search [existing PRs](https://github.com/documenso/documenso/pulls) or [issues](https://github.com/documenso/documenso/issues) for an open or closed item that relates to your submission. -- Select and issue from [here](https://github.com/documenso/documenso/issues) or create a new one -- Consider the results from the discussion in the issue +- Select an issue from [here](https://github.com/documenso/documenso/issues) or create a new one +- Consider the results from the discussion on the issue - Accept the [Contributor License Agreement](https://documen.so/cla) to ensure we can accept your contributions. +## Taking issues + +Before taking an issue, ensure that: + +- The issue has been assigned the public label +- The issue is clearly defined and understood +- No one has been assigned to the issue +- No one has expressed intention to work on it + +You can then: + +1. Comment on the issue with your intention to work on it +2. Begin work on the issue + +Always feel free to ask questions or seek clarification on the issue. + ## Developing -The development branch is main. All pull request should be made against this branch. If you need help getting started, [join us on Discord](https://documen.so/discord). +The development branch is main. All pull requests should be made against this branch. If you need help getting started, [join us on Discord](https://documen.so/discord). 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device. 2. Create a new branch: -- Create a new branch (include the issue id and somthing readable): +- Create a new branch (include the issue id and something readable): ```sh git checkout -b doc-999-my-feature-or-fix @@ -29,7 +45,7 @@ The development branch is main. All pull request should be made aga ## Building > **Note** -> Please be sure that you can make a full production build before pushing code or creating PRs. +> Please ensure you can make a full production build before pushing code or creating PRs. You can build the project with: diff --git a/README.md b/README.md index e0fc69d2f..2795d206d 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ open in devcontainer + Contributor Covenant

> 🦺 Documenso 1.0 is deployed to our Staging Environment. @@ -130,14 +131,12 @@ git clone https://github.com/documenso/documenso 2. Set up your `.env` file using the recommendations in the `.env.example` file. Alternatively just run `cp .env.example .env` to get started with our handpicked defaults. - 3. Run `npm run dx` in the root directory - This will spin up a postgres database and inbucket mailserver in a docker container. 4. Run `npm run dev` in the root directory - 5. Want it even faster? Just use ```sh @@ -170,14 +169,15 @@ git clone https://github.com/documenso/documenso 3. Create your `.env` from the `.env.example`. You can use `cp .env.example .env` to get started with our handpicked defaults. 4. Set the following environement variables. - - NEXTAUTH_URL - - NEXTAUTH_SECRET - - NEXT_PUBLIC_WEBAPP_URL - - NEXT_PUBLIC_MARKETING_URL - - NEXT_PRIVATE_DATABASE_URL - - NEXT_PRIVATE_DIRECT_DATABASE_URL - - NEXT_PRIVATE_SMTP_FROM_NAME - - NEXT_PRIVATE_SMTP_FROM_ADDRESS + + - NEXTAUTH_URL + - NEXTAUTH_SECRET + - NEXT_PUBLIC_WEBAPP_URL + - NEXT_PUBLIC_MARKETING_URL + - NEXT_PRIVATE_DATABASE_URL + - NEXT_PRIVATE_DIRECT_DATABASE_URL + - NEXT_PRIVATE_SMTP_FROM_NAME + - NEXT_PRIVATE_SMTP_FROM_ADDRESS 5. Create the database schema by running `npm run prisma:migrate-dev -w @documenso/prisma` diff --git a/apps/marketing/package.json b/apps/marketing/package.json index 8ee8d3808..11d72ee9f 100644 --- a/apps/marketing/package.json +++ b/apps/marketing/package.json @@ -31,7 +31,7 @@ "react-confetti": "^6.1.0", "react-dom": "18.2.0", "react-hook-form": "^7.43.9", - "react-icons": "^4.8.0", + "react-icons": "^4.11.0", "recharts": "^2.7.2", "sharp": "0.32.5", "typescript": "5.1.6", diff --git a/apps/marketing/src/app/(marketing)/open/data.ts b/apps/marketing/src/app/(marketing)/open/data.ts index 96654099f..3b109ea74 100644 --- a/apps/marketing/src/app/(marketing)/open/data.ts +++ b/apps/marketing/src/app/(marketing)/open/data.ts @@ -31,6 +31,22 @@ export const TEAM_MEMBERS = [ engagement: 'Full-Time', joinDate: 'July 26th, 2023', }, + { + name: 'Catalin-Marinel Pit', + role: 'Software Engineer - II', + salary: 80_000, + location: 'Romania', + engagement: 'Full-Time', + joinDate: 'September 4th, 2023', + }, + { + name: 'Gowdhama Rajan B', + role: 'Designer - III', + salary: 100_000, + location: 'India', + engagement: 'Full-Time', + joinDate: 'October 9th, 2023', + }, ]; export const FUNDING_RAISED = [ diff --git a/apps/marketing/src/components/(marketing)/callout.tsx b/apps/marketing/src/components/(marketing)/callout.tsx index 2427337c7..72ae3907b 100644 --- a/apps/marketing/src/components/(marketing)/callout.tsx +++ b/apps/marketing/src/components/(marketing)/callout.tsx @@ -2,8 +2,8 @@ import Link from 'next/link'; -import { Github } from 'lucide-react'; import { usePlausible } from 'next-plausible'; +import { LuGithub } from 'react-icons/lu'; import { Button } from '@documenso/ui/primitives/button'; @@ -52,7 +52,7 @@ export const Callout = ({ starCount }: CalloutProps) => { onClick={() => event('view-github')} > diff --git a/apps/marketing/src/components/(marketing)/mobile-navigation.tsx b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx index 3379d9789..c9bd07631 100644 --- a/apps/marketing/src/components/(marketing)/mobile-navigation.tsx +++ b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx @@ -4,7 +4,9 @@ import Image from 'next/image'; import Link from 'next/link'; import { motion, useReducedMotion } from 'framer-motion'; -import { Github, MessagesSquare, Twitter } from 'lucide-react'; +import { FaXTwitter } from 'react-icons/fa6'; +import { LiaDiscord } from 'react-icons/lia'; +import { LuGithub } from 'react-icons/lu'; import { Sheet, SheetContent } from '@documenso/ui/primitives/sheet'; @@ -111,7 +113,7 @@ export const MobileNavigation = ({ isMenuOpen, onMenuOpenChange }: MobileNavigat target="_blank" className="text-foreground hover:text-foreground/80" > - + - + - + diff --git a/apps/marketing/src/components/(marketing)/widget.tsx b/apps/marketing/src/components/(marketing)/widget.tsx index ba30833ab..d81888463 100644 --- a/apps/marketing/src/components/(marketing)/widget.tsx +++ b/apps/marketing/src/components/(marketing)/widget.tsx @@ -391,6 +391,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => { diff --git a/apps/web/package.json b/apps/web/package.json index 347a39d35..8ed19aaf4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -36,7 +36,7 @@ "react-dom": "18.2.0", "react-dropzone": "^14.2.3", "react-hook-form": "^7.43.9", - "react-icons": "^4.8.0", + "react-icons": "^4.11.0", "react-rnd": "^10.4.1", "sharp": "0.32.5", "ts-pattern": "^5.0.5", diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/share-button.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/share-button.tsx index c4eb5c76e..84cf975a1 100644 --- a/apps/web/src/app/(signing)/sign/[token]/complete/share-button.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/complete/share-button.tsx @@ -2,7 +2,8 @@ import { HTMLAttributes, useState } from 'react'; -import { Copy, Share, Twitter } from 'lucide-react'; +import { Copy, Share } from 'lucide-react'; +import { FaXTwitter } from 'react-icons/fa6'; import { useCopyShareLink } from '@documenso/lib/client-only/hooks/use-copy-share-link'; import { generateTwitterIntent } from '@documenso/lib/universal/generate-twitter-intent'; @@ -113,7 +114,7 @@ export const ShareButton = ({ token, documentId }: ShareButtonProps) => { diff --git a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx index f43e3507a..d699dea4b 100644 --- a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx +++ b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx @@ -4,7 +4,6 @@ import Link from 'next/link'; import { CreditCard, - Github, Key, LogOut, User as LucideUser, @@ -16,6 +15,7 @@ import { } from 'lucide-react'; import { signOut } from 'next-auth/react'; import { useTheme } from 'next-themes'; +import { LuGithub } from 'react-icons/lu'; import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag'; import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin'; @@ -130,7 +130,7 @@ export const ProfileDropdown = ({ user }: ProfileDropdownProps) => { - + Star on Github diff --git a/apps/web/src/components/forms/password.tsx b/apps/web/src/components/forms/password.tsx index 8b6a58a06..5df5005f1 100644 --- a/apps/web/src/components/forms/password.tsx +++ b/apps/web/src/components/forms/password.tsx @@ -20,6 +20,7 @@ import { FormErrorMessage } from '../form/form-error-message'; export const ZPasswordFormSchema = z .object({ + currentPassword: z.string().min(6).max(72), password: z.string().min(6).max(72), repeatedPassword: z.string().min(6).max(72), }) @@ -40,6 +41,7 @@ export const PasswordForm = ({ className }: PasswordFormProps) => { const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const [showCurrentPassword, setShowCurrentPassword] = useState(false); const { register, @@ -48,6 +50,7 @@ export const PasswordForm = ({ className }: PasswordFormProps) => { formState: { errors, isSubmitting }, } = useForm({ values: { + currentPassword: '', password: '', repeatedPassword: '', }, @@ -56,9 +59,10 @@ export const PasswordForm = ({ className }: PasswordFormProps) => { const { mutateAsync: updatePassword } = trpc.profile.updatePassword.useMutation(); - const onFormSubmit = async ({ password }: TPasswordFormSchema) => { + const onFormSubmit = async ({ currentPassword, password }: TPasswordFormSchema) => { try { await updatePassword({ + currentPassword, password, }); @@ -92,6 +96,39 @@ export const PasswordForm = ({ className }: PasswordFormProps) => { className={cn('flex w-full flex-col gap-y-4', className)} onSubmit={handleSubmit(onFormSubmit)} > +
+ + +
+ + + +
+ + +