From 0d821b1eb5ee86e2e5e4c0530514a88114af6826 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Fri, 6 Oct 2023 14:57:26 +0530
Subject: [PATCH 01/15] chore: swap input component with plane/ui package
---
packages/ui/dist/index.d.ts | 4 +-
packages/ui/dist/index.js | 4 +-
packages/ui/dist/index.mjs | 4 +-
packages/ui/src/form-fields/input.tsx | 8 +-
web/components/account/email-code-form.tsx | 61 ++++---
.../account/email-password-form.tsx | 59 ++++---
.../account/email-reset-password-form.tsx | 40 +++--
web/components/account/email-signup-form.tsx | 87 ++++++----
.../create-update-analytics-modal.tsx | 36 ++--
.../automation/select-month-modal.tsx | 101 ++++++-----
.../command-palette/shortcuts-modal.tsx | 15 +-
web/components/core/image-picker-popover.tsx | 60 +++----
.../core/modals/gpt-assistant-modal.tsx | 29 +++-
web/components/core/modals/link-modal.tsx | 74 ++++----
.../core/theme/color-picker-input.tsx | 36 ++--
.../core/theme/custom-theme-selector.tsx | 22 ++-
.../create-update-estimate-modal.tsx | 162 ++++++++++++------
.../integration/delete-import-modal.tsx | 7 +-
.../integration/github/single-user-select.tsx | 12 +-
.../integration/jira/give-details.tsx | 101 +++++++----
.../integration/jira/import-users.tsx | 42 ++---
web/components/issues/draft-issue-form.tsx | 27 ++-
web/components/issues/form.tsx | 27 ++-
.../issues/sidebar-select/label.tsx | 31 ++--
web/components/labels/create-label-modal.tsx | 28 +--
.../labels/create-update-label-inline.tsx | 26 ++-
web/components/modules/form.tsx | 40 +++--
web/components/onboarding/invite-members.tsx | 40 ++---
web/components/onboarding/user-details.tsx | 67 ++++----
web/components/pages/page-form.tsx | 35 ++--
.../project/create-project-modal.tsx | 54 +++---
.../project/delete-project-modal.tsx | 27 ++-
web/components/project/form.tsx | 39 +++--
.../project/leave-project-modal.tsx | 30 +++-
.../project/settings/single-label.tsx | 35 ++--
web/components/states/create-state-modal.tsx | 33 ++--
.../states/create-update-state-inline.tsx | 48 ++++--
web/components/views/form.tsx | 31 ++--
.../web-view/create-update-link-form.tsx | 66 ++++---
.../workspace/create-workspace-form.tsx | 76 ++++----
.../workspace/delete-workspace-modal.tsx | 53 +++---
.../send-workspace-invitation-modal.tsx | 24 +--
web/components/workspace/views/form.tsx | 48 +++---
.../[workspaceSlug]/me/profile/index.tsx | 99 +++++++----
web/pages/[workspaceSlug]/settings/index.tsx | 57 +++---
.../[workspaceSlug]/workspace-views/index.tsx | 29 ++--
web/pages/reset-password.tsx | 77 +++++----
47 files changed, 1266 insertions(+), 845 deletions(-)
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index d5161da6cc3..4f7437a1d38 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -8,10 +8,10 @@ interface InputProps {
id: string;
value: string;
name: string;
- onChange: () => void;
+ onChange: (e: React.ChangeEvent) => void;
className?: string;
mode?: "primary" | "transparent" | "true-transparent";
- size?: "sm" | "md" | "lg";
+ size?: "sm" | "md";
hasError?: boolean;
placeholder?: string;
disabled?: boolean;
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index e9c8d0e60c2..57d360c3a03 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -50,7 +50,7 @@ var Input = React2.forwardRef((props, ref) => {
onChange,
className = "",
mode = "primary",
- size = "md",
+ size = "sm",
hasError = false,
placeholder = "",
disabled = false
@@ -64,7 +64,7 @@ var Input = React2.forwardRef((props, ref) => {
onChange,
placeholder,
disabled,
- className: `block rounded-md bg-transparent text-sm focus:outline-none placeholder-custom-text-400 ${mode === "primary" ? "rounded-md border border-custom-border-200" : mode === "transparent" ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-custom-primary" : mode === "true-transparent" ? "rounded border-none bg-transparent ring-0" : ""} ${hasError ? "border-red-500" : ""} ${hasError && mode === "primary" ? "bg-red-500/20" : ""} ${size === "sm" ? "px-3 py-2" : size === "lg" ? "p-3" : ""} ${className}`
+ className: `block rounded-md bg-transparent text-sm focus:outline-none placeholder-custom-text-400 ${mode === "primary" ? "rounded-md border border-custom-border-200" : mode === "transparent" ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-custom-primary" : mode === "true-transparent" ? "rounded border-none bg-transparent ring-0" : ""} ${hasError ? "border-red-500" : ""} ${hasError && mode === "primary" ? "bg-red-500/20" : ""} ${size === "sm" ? "px-3 py-2" : size === "md" ? "p-3" : ""} ${className}`
});
});
Input.displayName = "form-input-field";
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index ed0946a3342..42cab7cbd13 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -15,7 +15,7 @@ var Input = React2.forwardRef((props, ref) => {
onChange,
className = "",
mode = "primary",
- size = "md",
+ size = "sm",
hasError = false,
placeholder = "",
disabled = false
@@ -29,7 +29,7 @@ var Input = React2.forwardRef((props, ref) => {
onChange,
placeholder,
disabled,
- className: `block rounded-md bg-transparent text-sm focus:outline-none placeholder-custom-text-400 ${mode === "primary" ? "rounded-md border border-custom-border-200" : mode === "transparent" ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-custom-primary" : mode === "true-transparent" ? "rounded border-none bg-transparent ring-0" : ""} ${hasError ? "border-red-500" : ""} ${hasError && mode === "primary" ? "bg-red-500/20" : ""} ${size === "sm" ? "px-3 py-2" : size === "lg" ? "p-3" : ""} ${className}`
+ className: `block rounded-md bg-transparent text-sm focus:outline-none placeholder-custom-text-400 ${mode === "primary" ? "rounded-md border border-custom-border-200" : mode === "transparent" ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-custom-primary" : mode === "true-transparent" ? "rounded border-none bg-transparent ring-0" : ""} ${hasError ? "border-red-500" : ""} ${hasError && mode === "primary" ? "bg-red-500/20" : ""} ${size === "sm" ? "px-3 py-2" : size === "md" ? "p-3" : ""} ${className}`
});
});
Input.displayName = "form-input-field";
diff --git a/packages/ui/src/form-fields/input.tsx b/packages/ui/src/form-fields/input.tsx
index 7c93898482f..5a9f9843e91 100644
--- a/packages/ui/src/form-fields/input.tsx
+++ b/packages/ui/src/form-fields/input.tsx
@@ -5,10 +5,10 @@ export interface InputProps {
id: string;
value: string;
name: string;
- onChange: () => void;
+ onChange: (e: React.ChangeEvent) => void;
className?: string;
mode?: "primary" | "transparent" | "true-transparent";
- size?: "sm" | "md" | "lg";
+ size?: "sm" | "md";
hasError?: boolean;
placeholder?: string;
disabled?: boolean;
@@ -23,7 +23,7 @@ const Input = React.forwardRef((props, ref) => {
onChange,
className = "",
mode = "primary",
- size = "md",
+ size = "sm",
hasError = false,
placeholder = "",
disabled = false,
@@ -50,7 +50,7 @@ const Input = React.forwardRef((props, ref) => {
} ${hasError ? "border-red-500" : ""} ${
hasError && mode === "primary" ? "bg-red-500/20" : ""
} ${
- size === "sm" ? "px-3 py-2" : size === "lg" ? "p-3" : ""
+ size === "sm" ? "px-3 py-2" : size === "md" ? "p-3" : ""
} ${className}`}
/>
);
diff --git a/web/components/account/email-code-form.tsx b/web/components/account/email-code-form.tsx
index 1e68cbb294a..9932b5f0544 100644
--- a/web/components/account/email-code-form.tsx
+++ b/web/components/account/email-code-form.tsx
@@ -1,8 +1,9 @@
import React, { useEffect, useState } from "react";
-import { useForm } from "react-hook-form";
+import { Controller, useForm } from "react-hook-form";
// ui
import { CheckCircleIcon } from "@heroicons/react/20/solid";
-import { Input, PrimaryButton, SecondaryButton } from "components/ui";
+import { PrimaryButton, SecondaryButton } from "components/ui";
+import { Input } from "@plane/ui";
// services
import authenticationService from "services/authentication.service";
import useToast from "hooks/use-toast";
@@ -29,6 +30,7 @@ export const EmailCodeForm = ({ handleSignIn }: any) => {
const {
register,
handleSubmit,
+ control,
setError,
setValue,
getValues,
@@ -44,8 +46,7 @@ export const EmailCodeForm = ({ handleSignIn }: any) => {
reValidateMode: "onChange",
});
- const isResendDisabled =
- resendCodeTimer > 0 || isCodeResending || isSubmitting || errorResendingCode;
+ const isResendDisabled = resendCodeTimer > 0 || isCodeResending || isSubmitting || errorResendingCode;
const onSubmit = async ({ email }: EmailCodeFormValues) => {
setErrorResendingCode(false);
@@ -122,44 +123,58 @@ export const EmailCodeForm = ({ handleSignIn }: any) => {
)}
diff --git a/web/components/issues/confirm-issue-discard.tsx b/web/components/issues/confirm-issue-discard.tsx
index f8feab73d65..24ccc3f2b10 100644
--- a/web/components/issues/confirm-issue-discard.tsx
+++ b/web/components/issues/confirm-issue-discard.tsx
@@ -3,7 +3,7 @@ import React, { useState } from "react";
// headless ui
import { Dialog, Transition } from "@headlessui/react";
// ui
-import { SecondaryButton, PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
type Props = {
isOpen: boolean;
@@ -58,29 +58,28 @@ export const ConfirmIssueDiscard: React.FC = (props) => {
-
+
Draft Issue
-
- Would you like to save this issue in drafts?
-
+
Would you like to save this issue in drafts?
- Discard
+
+ Discard
+
-
Cancel
-
+
+ Cancel
+
+
{isLoading ? "Saving..." : "Save Draft"}
-
+
diff --git a/web/components/issues/delete-draft-issue-modal.tsx b/web/components/issues/delete-draft-issue-modal.tsx
index e7f748975ef..e0f84153969 100644
--- a/web/components/issues/delete-draft-issue-modal.tsx
+++ b/web/components/issues/delete-draft-issue-modal.tsx
@@ -16,7 +16,7 @@ import useToast from "hooks/use-toast";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { SecondaryButton, DangerButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import type { IIssue } from "types";
// fetch-keys
@@ -129,10 +129,12 @@ export const DeleteDraftIssueModal: React.FC = (props) => {
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete Issue"}
-
+
diff --git a/web/components/issues/delete-issue-modal.tsx b/web/components/issues/delete-issue-modal.tsx
index 2f23f3f6378..605ec985c15 100644
--- a/web/components/issues/delete-issue-modal.tsx
+++ b/web/components/issues/delete-issue-modal.tsx
@@ -14,7 +14,7 @@ import useToast from "hooks/use-toast";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { SecondaryButton, DangerButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import type { IIssue, ICurrentUserResponse, ISubIssueResponse } from "types";
// fetch-keys
@@ -182,10 +182,12 @@ export const DeleteIssueModal: React.FC = ({
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete Issue"}
-
+
diff --git a/web/components/issues/draft-issue-form.tsx b/web/components/issues/draft-issue-form.tsx
index a2715b6b3d9..43cda61bf57 100644
--- a/web/components/issues/draft-issue-form.tsx
+++ b/web/components/issues/draft-issue-form.tsx
@@ -24,8 +24,8 @@ import {
import { CreateStateModal } from "components/states";
import { CreateLabelModal } from "components/labels";
// ui
-import { CustomMenu, PrimaryButton, SecondaryButton, ToggleSwitch } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomMenu, ToggleSwitch } from "components/ui";
+import { Button, Input } from "@plane/ui";
import { TipTapEditor } from "components/tiptap";
// icons
import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline";
@@ -593,23 +593,27 @@ export const DraftIssueForm: FC = (props) => {
{}} size="md" />
-
Discard
-
+ Discard
+
+
handleCreateUpdateIssue(formData, data?.id ? "updateDraft" : "createDraft")
)}
>
{isSubmitting ? "Saving..." : "Save Draft"}
-
-
+
handleCreateUpdateIssue(formData, data ? "convertToNewIssue" : "createNewIssue")
)}
>
{isSubmitting ? "Saving..." : "Add Issue"}
-
+
diff --git a/web/components/issues/form.tsx b/web/components/issues/form.tsx
index 68dcf71349d..0eae65a3bb6 100644
--- a/web/components/issues/form.tsx
+++ b/web/components/issues/form.tsx
@@ -23,8 +23,8 @@ import {
import { CreateStateModal } from "components/states";
import { CreateLabelModal } from "components/labels";
// ui
-import { CustomMenu, PrimaryButton, SecondaryButton, ToggleSwitch } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomMenu, ToggleSwitch } from "components/ui";
+import { Button, Input } from "@plane/ui";
import { TipTapEditor } from "components/tiptap";
// icons
import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline";
@@ -558,14 +558,15 @@ export const IssueForm: FC = (props) => {
{}} size="md" />
-
{
handleDiscardClose();
}}
>
Discard
-
-
+
+
{status
? isSubmitting
? "Updating Issue..."
@@ -573,7 +574,7 @@ export const IssueForm: FC = (props) => {
: isSubmitting
? "Adding Issue..."
: "Add Issue"}
-
+
diff --git a/web/components/issues/workspace-views/workpace-view-issues.tsx b/web/components/issues/workspace-views/workpace-view-issues.tsx
index 78a12f80706..664d52e5fb1 100644
--- a/web/components/issues/workspace-views/workpace-view-issues.tsx
+++ b/web/components/issues/workspace-views/workpace-view-issues.tsx
@@ -15,8 +15,9 @@ import { useWorkspaceView } from "hooks/use-workspace-view";
import useWorkspaceMembers from "hooks/use-workspace-members";
import useToast from "hooks/use-toast";
// components
+import { Button } from "@plane/ui";
import { WorkspaceViewsNavigation } from "components/workspace/views/workpace-view-navigation";
-import { EmptyState, PrimaryButton } from "components/ui";
+import { EmptyState } from "components/ui";
import { SpreadsheetView, WorkspaceFiltersList } from "components/core";
import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues";
import { CreateUpdateWorkspaceViewModal } from "components/workspace/views/modal";
@@ -38,10 +39,7 @@ export const WorkspaceViewIssues = () => {
const { memberRole } = useProjectMyMembership();
const { user } = useUser();
- const { isGuest, isViewer } = useWorkspaceMembers(
- workspaceSlug?.toString(),
- Boolean(workspaceSlug)
- );
+ const { isGuest, isViewer } = useWorkspaceMembers(workspaceSlug?.toString(), Boolean(workspaceSlug));
const { filters, viewIssues, mutateViewIssues, handleFilters } = useWorkspaceView();
const [createViewModal, setCreateViewModal] = useState(null);
@@ -54,9 +52,7 @@ export const WorkspaceViewIssues = () => {
// update issue modal
const [editIssueModal, setEditIssueModal] = useState(false);
- const [issueToEdit, setIssueToEdit] = useState<
- (IIssue & { actionType: "edit" | "delete" }) | undefined
- >(undefined);
+ const [issueToEdit, setIssueToEdit] = useState<(IIssue & { actionType: "edit" | "delete" }) | undefined>(undefined);
// delete issue modal
const [deleteIssueModal, setDeleteIssueModal] = useState(false);
@@ -192,7 +188,8 @@ export const WorkspaceViewIssues = () => {
})
}
/>
- {
if (globalViewId) {
handleFilters("filters", filters.filters, true);
@@ -210,7 +207,7 @@ export const WorkspaceViewIssues = () => {
>
{!globalViewId && }
{globalViewId ? "Update" : "Save"} view
-
+
{
}
>
diff --git a/web/components/issues/workspace-views/workspace-all-issue.tsx b/web/components/issues/workspace-views/workspace-all-issue.tsx
index 4618c331d1d..3eccae26ef1 100644
--- a/web/components/issues/workspace-views/workspace-all-issue.tsx
+++ b/web/components/issues/workspace-views/workspace-all-issue.tsx
@@ -19,7 +19,7 @@ import { WorkspaceViewsNavigation } from "components/workspace/views/workpace-vi
import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues";
import { CreateUpdateWorkspaceViewModal } from "components/workspace/views/modal";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
// fetch-keys
@@ -43,9 +43,7 @@ export const WorkspaceAllIssue = () => {
// update issue modal
const [editIssueModal, setEditIssueModal] = useState(false);
- const [issueToEdit, setIssueToEdit] = useState<
- (IIssue & { actionType: "edit" | "delete" }) | undefined
- >(undefined);
+ const [issueToEdit, setIssueToEdit] = useState<(IIssue & { actionType: "edit" | "delete" }) | undefined>(undefined);
// delete issue modal
const [deleteIssueModal, setDeleteIssueModal] = useState(false);
@@ -66,16 +64,12 @@ export const WorkspaceAllIssue = () => {
const params: any = {
assignees: filters?.filters?.assignees ? filters?.filters?.assignees.join(",") : undefined,
subscriber: filters?.filters?.subscriber ? filters?.filters?.subscriber.join(",") : undefined,
- state_group: filters?.filters?.state_group
- ? filters?.filters?.state_group.join(",")
- : undefined,
+ state_group: filters?.filters?.state_group ? filters?.filters?.state_group.join(",") : undefined,
priority: filters?.filters?.priority ? filters?.filters?.priority.join(",") : undefined,
labels: filters?.filters?.labels ? filters?.filters?.labels.join(",") : undefined,
created_by: filters?.filters?.created_by ? filters?.filters?.created_by.join(",") : undefined,
start_date: filters?.filters?.start_date ? filters?.filters?.start_date.join(",") : undefined,
- target_date: filters?.filters?.target_date
- ? filters?.filters?.target_date.join(",")
- : undefined,
+ target_date: filters?.filters?.target_date ? filters?.filters?.target_date.join(",") : undefined,
project: filters?.filters?.project ? filters?.filters?.project.join(",") : undefined,
sub_issue: false,
type: undefined,
@@ -203,7 +197,8 @@ export const WorkspaceAllIssue = () => {
})
}
/>
- {
if (globalViewId) handleFilters("filters", filters.filters, true);
else
@@ -215,7 +210,7 @@ export const WorkspaceAllIssue = () => {
>
{!globalViewId && }
{globalViewId ? "Update" : "Save"} view
-
+
{
}
>
diff --git a/web/components/labels/create-label-modal.tsx b/web/components/labels/create-label-modal.tsx
index 12dfd355ea1..f04c77d563f 100644
--- a/web/components/labels/create-label-modal.tsx
+++ b/web/components/labels/create-label-modal.tsx
@@ -13,8 +13,7 @@ import { Dialog, Popover, Transition } from "@headlessui/react";
// services
import issuesService from "services/issue.service";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// icons
import { ChevronDownIcon } from "@heroicons/react/24/outline";
// types
@@ -188,10 +187,12 @@ export const CreateLabelModal: React.FC = ({ isOpen, projectId, handleClo
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Creating Label..." : "Create Label"}
-
+
diff --git a/web/components/labels/create-update-label-inline.tsx b/web/components/labels/create-update-label-inline.tsx
index d81b593b8b1..52ea30fc0b3 100644
--- a/web/components/labels/create-update-label-inline.tsx
+++ b/web/components/labels/create-update-label-inline.tsx
@@ -15,8 +15,7 @@ import { Popover, Transition } from "@headlessui/react";
// services
import issuesService from "services/issue.service";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// types
import { IIssueLabels } from "types";
// fetch-keys
@@ -186,15 +185,17 @@ export const CreateUpdateLabelInline = forwardRef(functio
)}
/>
- handleClose()}>Cancel
+ handleClose()}>
+ Cancel
+
{isUpdating ? (
-
+
{isSubmitting ? "Updating" : "Update"}
-
+
) : (
-
+
{isSubmitting ? "Adding" : "Add"}
-
+
)}
);
diff --git a/web/components/labels/delete-label-modal.tsx b/web/components/labels/delete-label-modal.tsx
index 452fcd79806..d074ef5c8d3 100644
--- a/web/components/labels/delete-label-modal.tsx
+++ b/web/components/labels/delete-label-modal.tsx
@@ -13,7 +13,7 @@ import issuesService from "services/issue.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import type { ICurrentUserResponse, IIssueLabels } from "types";
// fetch-keys
@@ -112,10 +112,12 @@ export const DeleteLabelModal: React.FC = ({ isOpen, onClose, data, user
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/modules/delete-module-modal.tsx b/web/components/modules/delete-module-modal.tsx
index 9faede08f14..354d613cc22 100644
--- a/web/components/modules/delete-module-modal.tsx
+++ b/web/components/modules/delete-module-modal.tsx
@@ -11,7 +11,7 @@ import modulesService from "services/modules.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { SecondaryButton, DangerButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// types
@@ -44,11 +44,7 @@ export const DeleteModuleModal: React.FC = ({ isOpen, setIsOpen, data, us
if (!workspaceSlug || !projectId || !data) return;
- mutate(
- MODULE_LIST(projectId as string),
- (prevData) => prevData?.filter((m) => m.id !== data.id),
- false
- );
+ mutate(MODULE_LIST(projectId as string), (prevData) => prevData?.filter((m) => m.id !== data.id), false);
await modulesService
.deleteModule(workspaceSlug as string, projectId as string, data.id, user)
@@ -96,36 +92,29 @@ export const DeleteModuleModal: React.FC = ({ isOpen, setIsOpen, data, us
-
+
-
+
Delete Module
Are you sure you want to delete module-{" "}
-
- {data?.name}
-
- ? All of the data related to the module will be permanently removed. This
- action cannot be undone.
+ {data?.name} ? All of the
+ data related to the module will be permanently removed. This action cannot be undone.
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/modules/form.tsx b/web/components/modules/form.tsx
index 320b416fb8e..2385532c931 100644
--- a/web/components/modules/form.tsx
+++ b/web/components/modules/form.tsx
@@ -5,8 +5,8 @@ import { Controller, useForm } from "react-hook-form";
// components
import { ModuleLeadSelect, ModuleMembersSelect, ModuleStatusSelect } from "components/modules";
// ui
-import { DateSelect, PrimaryButton, SecondaryButton } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { DateSelect } from "components/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// types
import { IModule } from "types";
@@ -153,8 +153,10 @@ export const ModuleForm: React.FC = ({ handleFormSubmit, handleClose, sta
-
Cancel
-
+
+ Cancel
+
+
{status
? isSubmitting
? "Updating Module..."
@@ -162,7 +164,7 @@ export const ModuleForm: React.FC = ({ handleFormSubmit, handleClose, sta
: isSubmitting
? "Creating Module..."
: "Create Module"}
-
+
);
diff --git a/web/components/notifications/select-snooze-till-modal.tsx b/web/components/notifications/select-snooze-till-modal.tsx
index 99281350e32..979b9e96a8f 100644
--- a/web/components/notifications/select-snooze-till-modal.tsx
+++ b/web/components/notifications/select-snooze-till-modal.tsx
@@ -15,13 +15,8 @@ import { getAllTimeIn30MinutesInterval } from "helpers/date-time.helper";
import useToast from "hooks/use-toast";
// components
-import {
- PrimaryButton,
- SecondaryButton,
- Icon,
- CustomDatePicker,
- CustomSelect,
-} from "components/ui";
+import { Button } from "@plane/ui";
+import { Icon, CustomDatePicker, CustomSelect } from "components/ui";
// types
import type { IUserNotification } from "types";
@@ -158,10 +153,7 @@ export const SnoozeNotificationModal: React.FC = (props) => {
-
+
Customize Snooze Time
@@ -174,9 +166,7 @@ export const SnoozeNotificationModal: React.FC = (props) => {
-
- Pick a date
-
+ Pick a date
= (props) => {
/>
-
- Pick a time
-
+ Pick a time
= (props) => {
{value} {watch("period").toLowerCase()}
) : (
-
- Select a time
-
+ Select a time
)}
}
@@ -259,9 +245,7 @@ export const SnoozeNotificationModal: React.FC
= (props) => {
))
) : (
-
- No available time for this date.
-
+ No available time for this date.
)}
)}
@@ -271,10 +255,12 @@ export const SnoozeNotificationModal: React.FC = (props) => {
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Submitting..." : "Submit"}
-
+
diff --git a/web/components/onboarding/invite-members.tsx b/web/components/onboarding/invite-members.tsx
index 1a709de6b29..4f1887e3795 100644
--- a/web/components/onboarding/invite-members.tsx
+++ b/web/components/onboarding/invite-members.tsx
@@ -9,8 +9,7 @@ import workspaceService from "services/workspace.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// hooks
import useDynamicDropdownPosition from "hooks/use-dynamic-dropdown";
// icons
@@ -258,12 +257,12 @@ export const InviteMembers: React.FC = (props) => {
-
+
{isSubmitting ? "Sending..." : "Send Invite"}
-
-
+
+
Skip this step
-
+
);
diff --git a/web/components/onboarding/join-workspaces.tsx b/web/components/onboarding/join-workspaces.tsx
index 84b5bdfc971..fa0042a2e18 100644
--- a/web/components/onboarding/join-workspaces.tsx
+++ b/web/components/onboarding/join-workspaces.tsx
@@ -7,7 +7,7 @@ import workspaceService from "services/workspace.service";
// hooks
import useUser from "hooks/use-user";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { CheckCircleIcon } from "@heroicons/react/24/outline";
// helpers
@@ -25,11 +25,7 @@ type Props = {
updateLastWorkspace: () => Promise;
};
-export const JoinWorkspaces: React.FC = ({
- finishOnboarding,
- stepChange,
- updateLastWorkspace,
-}) => {
+export const JoinWorkspaces: React.FC = ({ finishOnboarding, stepChange, updateLastWorkspace }) => {
const [isJoiningWorkspaces, setIsJoiningWorkspaces] = useState(false);
const [invitationsRespond, setInvitationsRespond] = useState([]);
@@ -39,16 +35,11 @@ export const JoinWorkspaces: React.FC = ({
workspaceService.userWorkspaceInvitations()
);
- const handleInvitation = (
- workspace_invitation: IWorkspaceMemberInvitation,
- action: "accepted" | "withdraw"
- ) => {
+ const handleInvitation = (workspace_invitation: IWorkspaceMemberInvitation, action: "accepted" | "withdraw") => {
if (action === "accepted") {
setInvitationsRespond((prevData) => [...prevData, workspace_invitation.id]);
} else if (action === "withdraw") {
- setInvitationsRespond((prevData) =>
- prevData.filter((item: string) => item !== workspace_invitation.id)
- );
+ setInvitationsRespond((prevData) => prevData.filter((item: string) => item !== workspace_invitation.id));
}
};
@@ -57,8 +48,7 @@ export const JoinWorkspaces: React.FC = ({
await stepChange({ workspace_join: true });
- if (user.onboarding_step.workspace_create && user.onboarding_step.workspace_invite)
- await finishOnboarding();
+ if (user.onboarding_step.workspace_create && user.onboarding_step.workspace_invite) await finishOnboarding();
};
const submitInvitations = async () => {
@@ -91,9 +81,7 @@ export const JoinWorkspaces: React.FC = ({
handleInvitation(invitation, isSelected ? "withdraw" : "accepted")}
>
@@ -115,16 +103,10 @@ export const JoinWorkspaces: React.FC
= ({
-
- {truncateText(invitation.workspace.name, 30)}
-
+
{truncateText(invitation.workspace.name, 30)}
{ROLE[invitation.role]}
-
+
@@ -132,7 +114,8 @@ export const JoinWorkspaces: React.FC = ({
})}
-
= ({
loading={isJoiningWorkspaces}
>
Accept & Join
-
-
+
+
Skip for now
-
+
);
diff --git a/web/components/onboarding/tour/root.tsx b/web/components/onboarding/tour/root.tsx
index a28d93d975b..5b5038795e8 100644
--- a/web/components/onboarding/tour/root.tsx
+++ b/web/components/onboarding/tour/root.tsx
@@ -7,7 +7,7 @@ import useUser from "hooks/use-user";
// components
import { TourSidebar } from "components/onboarding";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { XMarkIcon } from "@heroicons/react/24/outline";
// images
@@ -52,8 +52,7 @@ const TOUR_STEPS: {
{
key: "modules",
title: "Break into modules",
- description:
- "Modules break your big thing into Projects or Features, to help you organize better.",
+ description: "Modules break your big thing into Projects or Features, to help you organize better.",
image: ModulesTour,
prevStep: "cycles",
nextStep: "views",
@@ -97,11 +96,13 @@ export const TourRoot: React.FC = ({ onComplete }) => {
Welcome to Plane, {user?.first_name} {user?.last_name}
- We{"'"}re glad that you decided to try out Plane. You can now manage your projects
- with ease. Get started by creating a project.
+ We{"'"}re glad that you decided to try out Plane. You can now manage your projects with ease. Get
+ started by creating a project.
-
setStep("issues")}>Take a Product Tour
+
setStep("issues")}>
+ Take a Product Tour
+
= ({ onComplete }) => {
{currentStep?.prevStep && (
-
setStep(currentStep.prevStep ?? "welcome")}>
+ setStep(currentStep.prevStep ?? "welcome")}>
Back
-
+
)}
{currentStep?.nextStep && (
-
setStep(currentStep.nextStep ?? "issues")}>
+ setStep(currentStep.nextStep ?? "issues")}>
Next
-
+
)}
- {TOUR_STEPS.findIndex((tourStep) => tourStep.key === step) ===
- TOUR_STEPS.length - 1 && (
-
Create my first project
+ {TOUR_STEPS.findIndex((tourStep) => tourStep.key === step) === TOUR_STEPS.length - 1 && (
+
+ Create my first project
+
)}
diff --git a/web/components/onboarding/user-details.tsx b/web/components/onboarding/user-details.tsx
index 710a9a7641c..a8f8e616a20 100644
--- a/web/components/onboarding/user-details.tsx
+++ b/web/components/onboarding/user-details.tsx
@@ -9,8 +9,8 @@ import useToast from "hooks/use-toast";
// services
import userService from "services/user.service";
// ui
-import { CustomSearchSelect, CustomSelect, PrimaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomSearchSelect, CustomSelect } from "components/ui";
+import { Button, Input } from "@plane/ui";
// types
import { ICurrentUserResponse, IUser } from "types";
// fetch-keys
@@ -217,9 +217,9 @@ export const UserDetails: React.FC = ({ user }) => {
-
+
{isSubmitting ? "Updating..." : "Continue"}
-
+
);
};
diff --git a/web/components/onboarding/workspace.tsx b/web/components/onboarding/workspace.tsx
index 8f744243273..d595a6f7b97 100644
--- a/web/components/onboarding/workspace.tsx
+++ b/web/components/onboarding/workspace.tsx
@@ -1,7 +1,7 @@
import { useState } from "react";
// ui
-import { SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import { ICurrentUserResponse, IWorkspace, TOnboardingSteps } from "types";
// constants
@@ -15,13 +15,7 @@ type Props = {
workspaces: IWorkspace[] | undefined;
};
-export const Workspace: React.FC = ({
- finishOnboarding,
- stepChange,
- updateLastWorkspace,
- user,
- workspaces,
-}) => {
+export const Workspace: React.FC = ({ finishOnboarding, stepChange, updateLastWorkspace, user, workspaces }) => {
const [defaultValues, setDefaultValues] = useState({
name: "",
slug: "",
@@ -61,9 +55,9 @@ export const Workspace: React.FC = ({
}}
secondaryButton={
workspaces ? (
-
+
{workspaces.length > 0 ? "Skip & continue" : "Back"}
-
+
) : undefined
}
/>
diff --git a/web/components/pages/create-update-block-inline.tsx b/web/components/pages/create-update-block-inline.tsx
index 9452ba5925a..83b00f03015 100644
--- a/web/components/pages/create-update-block-inline.tsx
+++ b/web/components/pages/create-update-block-inline.tsx
@@ -12,8 +12,7 @@ import useToast from "hooks/use-toast";
// components
import { GptAssistantModal } from "components/core";
import { TipTapEditor } from "components/tiptap";
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { TextArea } from "@plane/ui";
+import { Button, TextArea } from "@plane/ui";
// types
import { ICurrentUserResponse, IPageBlock } from "types";
// fetch-keys
@@ -355,10 +354,12 @@ export const CreateUpdateBlockInline: React.FC = ({
-
Cancel
-
+
+ Cancel
+
+
{data ? (isSubmitting ? "Updating..." : "Update block") : isSubmitting ? "Adding..." : "Add block"}
-
+
= ({ isOpen, s
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/pages/page-form.tsx b/web/components/pages/page-form.tsx
index 20bd7dfb7ba..18a9f8f9ee6 100644
--- a/web/components/pages/page-form.tsx
+++ b/web/components/pages/page-form.tsx
@@ -3,8 +3,7 @@ import { useEffect } from "react";
// react-hook-form
import { Controller, useForm } from "react-hook-form";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// types
import { IPage } from "types";
@@ -80,8 +79,10 @@ export const PageForm: React.FC = ({ handleFormSubmit, handleClose, statu
-
Cancel
-
+
+ Cancel
+
+
{status
? isSubmitting
? "Updating Page..."
@@ -89,7 +90,7 @@ export const PageForm: React.FC = ({ handleFormSubmit, handleClose, statu
: isSubmitting
? "Creating Page..."
: "Create Page"}
-
+
);
diff --git a/web/components/project/confirm-project-member-remove.tsx b/web/components/project/confirm-project-member-remove.tsx
index 4edc278219c..f8e477453ce 100644
--- a/web/components/project/confirm-project-member-remove.tsx
+++ b/web/components/project/confirm-project-member-remove.tsx
@@ -4,7 +4,7 @@ import { Dialog, Transition } from "@headlessui/react";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { SecondaryButton, DangerButton } from "components/ui";
+import { Button } from "@plane/ui";
type Props = {
isOpen: boolean;
@@ -57,33 +57,29 @@ const ConfirmProjectMemberRemove: React.FC = ({ isOpen, onClose, data, ha
-
+
-
+
Remove {data?.display_name}?
Are you sure you want to remove member-{" "}
- {data?.display_name} ? They will no
- longer have access to this project. This action cannot be undone.
+ {data?.display_name} ? They will no longer have access to
+ this project. This action cannot be undone.
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Removing..." : "Remove"}
-
+
diff --git a/web/components/project/create-project-modal.tsx b/web/components/project/create-project-modal.tsx
index bd45744135e..ca2f2fc3568 100644
--- a/web/components/project/create-project-modal.tsx
+++ b/web/components/project/create-project-modal.tsx
@@ -12,8 +12,8 @@ import useToast from "hooks/use-toast";
import { useWorkspaceMyMembership } from "contexts/workspace-member.context";
import useWorkspaceMembers from "hooks/use-workspace-members";
// ui
-import { CustomSelect, PrimaryButton, SecondaryButton, Icon, Avatar, CustomSearchSelect } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { CustomSelect, Icon, Avatar, CustomSearchSelect } from "components/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// components
import { ImagePickerPopover } from "components/core";
import EmojiIconPicker from "components/emoji-icon-picker";
@@ -411,10 +411,12 @@ export const CreateProjectModal: React.FC = (props) => {
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Creating..." : "Create Project"}
-
+
diff --git a/web/components/project/delete-project-modal.tsx b/web/components/project/delete-project-modal.tsx
index 7c3a4f0a63d..036abc87d9c 100644
--- a/web/components/project/delete-project-modal.tsx
+++ b/web/components/project/delete-project-modal.tsx
@@ -7,8 +7,7 @@ import useToast from "hooks/use-toast";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// types
import type { IProject } from "types";
// fetch-keys
@@ -161,10 +160,12 @@ export const DeleteProjectModal: React.FC = (props) => {
/>
- Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Deleting..." : "Delete Project"}
-
+
diff --git a/web/components/project/form.tsx b/web/components/project/form.tsx
index 27f1a21bb20..d581a01e867 100644
--- a/web/components/project/form.tsx
+++ b/web/components/project/form.tsx
@@ -3,8 +3,8 @@ import { Controller, useForm } from "react-hook-form";
// components
import EmojiIconPicker from "components/emoji-icon-picker";
import { ImagePickerPopover } from "components/core";
-import { CustomSelect, PrimaryButton } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { CustomSelect } from "components/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// types
import { IProject, IWorkspace } from "types";
// helpers
@@ -269,9 +269,9 @@ export const ProjectDetailsForm: FC = (props) => {
<>
-
+
{isSubmitting ? "Updating Project..." : "Update Project"}
-
+
Created on {renderShortDateWithYearFormat(project?.created_at)}
diff --git a/web/components/project/join-project-modal.tsx b/web/components/project/join-project-modal.tsx
index 984fafa85ec..f4276b2d447 100644
--- a/web/components/project/join-project-modal.tsx
+++ b/web/components/project/join-project-modal.tsx
@@ -1,7 +1,7 @@
import { useState, Fragment } from "react";
import { Transition, Dialog } from "@headlessui/react";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import type { IProject } from "types";
// lib
@@ -73,10 +73,12 @@ export const JoinProjectModal: React.FC
= (props) => {
-
Cancel
-
+
+ Cancel
+
+
{isJoiningLoading ? "Joining..." : "Join Project"}
-
+
diff --git a/web/components/project/leave-project-modal.tsx b/web/components/project/leave-project-modal.tsx
index 6f022f0b491..b313c5a1a71 100644
--- a/web/components/project/leave-project-modal.tsx
+++ b/web/components/project/leave-project-modal.tsx
@@ -5,8 +5,7 @@ import { Dialog, Transition } from "@headlessui/react";
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
import { observer } from "mobx-react-lite";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// fetch-keys
import { PROJECTS_LIST } from "constants/fetch-keys";
// mobx react lite
@@ -198,10 +197,12 @@ export const LeaveProjectModal: FC = observer((props) => {
/>
- Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Leaving..." : "Leave Project"}
-
+
diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx
index 51ad8c9aa6b..4ea215d759a 100644
--- a/web/components/project/publish-project/modal.tsx
+++ b/web/components/project/publish-project/modal.tsx
@@ -6,7 +6,8 @@ import { Controller, useForm } from "react-hook-form";
// headless ui
import { Dialog, Transition } from "@headlessui/react";
// ui components
-import { ToggleSwitch, PrimaryButton, SecondaryButton, Icon, DangerButton, Loader } from "components/ui";
+import { Button } from "@plane/ui";
+import { ToggleSwitch, Icon, Loader } from "components/ui";
import { CustomPopover } from "./popover";
// mobx react lite
import { observer } from "mobx-react-lite";
@@ -306,13 +307,14 @@ export const PublishProjectModal: React.FC = observer(() => {
Publish
{projectPublish.projectPublishSettings !== "not-initialized" && (
- handleUnpublishProject(watch("id") ?? "")}
className="!px-2 !py-1.5"
loading={isUnpublishing}
>
{isUnpublishing ? "Unpublishing..." : "Unpublish"}
-
+
)}
@@ -475,19 +477,21 @@ export const PublishProjectModal: React.FC = observer(() => {
{!projectPublish.fetchSettingsLoader && (
-
Cancel
+
+ Cancel
+
{watch("id") ? (
<>
{isUpdateRequired && (
-
+
{isSubmitting ? "Updating..." : "Update settings"}
-
+
)}
>
) : (
-
+
{isSubmitting ? "Publishing..." : "Publish"}
-
+
)}
)}
diff --git a/web/components/project/send-project-invitation-modal.tsx b/web/components/project/send-project-invitation-modal.tsx
index 07b90840c86..395a3c74fe9 100644
--- a/web/components/project/send-project-invitation-modal.tsx
+++ b/web/components/project/send-project-invitation-modal.tsx
@@ -8,13 +8,8 @@ import { useForm, Controller, useFieldArray } from "react-hook-form";
import { Dialog, Transition } from "@headlessui/react";
// ui
-import {
- Avatar,
- CustomSearchSelect,
- CustomSelect,
- PrimaryButton,
- SecondaryButton,
-} from "components/ui";
+import { Button } from "@plane/ui";
+import { Avatar, CustomSearchSelect, CustomSelect } from "components/ui";
//icons
import { PlusIcon, XMarkIcon } from "@heroicons/react/24/outline";
import { ChevronDownIcon } from "@heroicons/react/20/solid";
@@ -178,24 +173,16 @@ const SendProjectInvitationModal: React.FC = (props) => {
-
+
Invite Members
-
- Invite members to work on your project.
-
+
Invite members to work on your project.
{fields.map((field, index) => (
-
+
= (props) => {
{value && value !== "" ? (
-
p.member.id === value)?.member
- }
- />
- {
- people?.find((p) => p.member.id === value)?.member
- .display_name
- }
+ p.member.id === value)?.member} />
+ {people?.find((p) => p.member.id === value)?.member.display_name}
) : (
-
- Select co-worker
-
+ Select co-worker
)}
@@ -307,14 +285,14 @@ const SendProjectInvitationModal: React.FC = (props) => {
Add more
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting
- ? `${
- fields && fields.length > 1 ? "Adding Members..." : "Adding Member..."
- }`
+ ? `${fields && fields.length > 1 ? "Adding Members..." : "Adding Member..."}`
: `${fields && fields.length > 1 ? "Add Members" : "Add Member"}`}
-
+
diff --git a/web/components/project/settings/single-label.tsx b/web/components/project/settings/single-label.tsx
index 25cb7d7c813..b7acc272c8a 100644
--- a/web/components/project/settings/single-label.tsx
+++ b/web/components/project/settings/single-label.tsx
@@ -7,8 +7,8 @@ import { TwitterPicker } from "react-color";
// headless ui
import { Popover, Transition } from "@headlessui/react";
// ui
-import { CustomMenu, PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomMenu } from "components/ui";
+import { Button, Input } from "@plane/ui";
// icons
import { PencilIcon, RectangleGroupIcon } from "@heroicons/react/24/outline";
// types
@@ -123,8 +123,12 @@ const SingleLabel: React.FC
= ({ label, issueLabels, editLabel, handleLab
)}
/>
-
setNewLabelForm(false)}>Cancel
-
{isSubmitting ? "Adding" : "Add"}
+
setNewLabelForm(false)}>
+ Cancel
+
+
+ {isSubmitting ? "Adding" : "Add"}
+
) : (
diff --git a/web/components/states/create-state-modal.tsx b/web/components/states/create-state-modal.tsx
index 12cf445ab48..355d68c9982 100644
--- a/web/components/states/create-state-modal.tsx
+++ b/web/components/states/create-state-modal.tsx
@@ -15,8 +15,8 @@ import stateService from "services/project_state.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { CustomSelect, PrimaryButton, SecondaryButton } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { CustomSelect } from "components/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// icons
import { ChevronDownIcon } from "@heroicons/react/24/outline";
// types
@@ -256,10 +256,12 @@ export const CreateStateModal: React.FC = ({ isOpen, projectId, handleClo
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Creating State..." : "Create State"}
-
+
diff --git a/web/components/states/create-update-state-inline.tsx b/web/components/states/create-update-state-inline.tsx
index 74a50413a73..e30c2e803cb 100644
--- a/web/components/states/create-update-state-inline.tsx
+++ b/web/components/states/create-update-state-inline.tsx
@@ -15,8 +15,8 @@ import stateService from "services/project_state.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { CustomSelect, PrimaryButton, SecondaryButton, Tooltip } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomSelect, Tooltip } from "components/ui";
+import { Button, Input } from "@plane/ui";
// types
import type { ICurrentUserResponse, IState, IStateResponse } from "types";
// fetch-keys
@@ -273,10 +273,12 @@ export const CreateUpdateStateInline: React.FC = ({ data, onClose, select
/>
)}
/>
- Cancel
-
+
+ Cancel
+
+
{isSubmitting ? (data ? "Updating..." : "Creating...") : data ? "Update" : "Create"}
-
+
);
};
diff --git a/web/components/states/delete-state-modal.tsx b/web/components/states/delete-state-modal.tsx
index 580d42bdc34..9e428d0be06 100644
--- a/web/components/states/delete-state-modal.tsx
+++ b/web/components/states/delete-state-modal.tsx
@@ -13,7 +13,7 @@ import stateServices from "services/project_state.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// types
import type { ICurrentUserResponse, IState, IStateResponse } from "types";
// fetch-keys
@@ -129,10 +129,12 @@ export const DeleteStateModal: React.FC = ({ isOpen, onClose, data, user
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/ui/empty-state.tsx b/web/components/ui/empty-state.tsx
index e39b10801f2..4b70b5ee42f 100644
--- a/web/components/ui/empty-state.tsx
+++ b/web/components/ui/empty-state.tsx
@@ -3,7 +3,7 @@ import React from "react";
import Image from "next/image";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
type Props = {
title: string;
@@ -28,25 +28,22 @@ export const EmptyState: React.FC = ({
isFullScreen = true,
disabled = false,
}) => (
-
+
{title}
{description &&
{description}
}
{primaryButton && (
-
{primaryButton.icon}
{primaryButton.text}
-
+
)}
{secondaryButton}
diff --git a/web/components/views/delete-view-modal.tsx b/web/components/views/delete-view-modal.tsx
index 61c627430f0..8ed64487af8 100644
--- a/web/components/views/delete-view-modal.tsx
+++ b/web/components/views/delete-view-modal.tsx
@@ -11,7 +11,7 @@ import viewsService from "services/views.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// types
@@ -46,9 +46,7 @@ export const DeleteViewModal: React.FC
= ({ isOpen, data, setIsOpen, user
await viewsService
.deleteView(workspaceSlug as string, projectId as string, data.id, user)
.then(() => {
- mutate(VIEWS_LIST(projectId as string), (views) =>
- views?.filter((view) => view.id !== data.id)
- );
+ mutate(VIEWS_LIST(projectId as string), (views) => views?.filter((view) => view.id !== data.id));
handleClose();
@@ -100,36 +98,29 @@ export const DeleteViewModal: React.FC = ({ isOpen, data, setIsOpen, user
-
+
-
+
Delete View
Are you sure you want to delete view-{" "}
-
- {data?.name}
-
- ? All of the data related to the view will be permanently removed. This
- action cannot be undone.
+ {data?.name} ? All of the
+ data related to the view will be permanently removed. This action cannot be undone.
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/views/form.tsx b/web/components/views/form.tsx
index 13cf67d42b7..8ee414b7f58 100644
--- a/web/components/views/form.tsx
+++ b/web/components/views/form.tsx
@@ -14,8 +14,7 @@ import useProjectMembers from "hooks/use-project-members";
import { FiltersList } from "components/core";
import { SelectFilters } from "components/views";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// helpers
import { checkIfArraysHaveSameElements } from "helpers/array.helper";
import { getStatesList } from "helpers/state.helper";
@@ -203,8 +202,10 @@ export const ViewForm: React.FC = ({ handleFormSubmit, handleClose, statu
-
Cancel
-
+
+ Cancel
+
+
{status
? isSubmitting
? "Updating View..."
@@ -212,7 +213,7 @@ export const ViewForm: React.FC = ({ handleFormSubmit, handleClose, statu
: isSubmitting
? "Creating View..."
: "Create View"}
-
+
);
diff --git a/web/components/web-view/add-comment.tsx b/web/components/web-view/add-comment.tsx
index b4f49d7beb0..3ed76d515a6 100644
--- a/web/components/web-view/add-comment.tsx
+++ b/web/components/web-view/add-comment.tsx
@@ -16,10 +16,11 @@ import { TipTapEditor } from "components/tiptap";
import { Send } from "lucide-react";
// ui
-import { Icon, SecondaryButton, Tooltip, PrimaryButton } from "components/ui";
+import { Icon, Tooltip } from "components/ui";
// types
import type { IIssueComment } from "types";
+import { Button } from "@plane/ui";
const defaultValues: Partial
= {
access: "INTERNAL",
@@ -120,13 +121,14 @@ export const AddComment: React.FC = ({ disabled = false, onSubmit }) => {
);
diff --git a/web/components/web-view/create-update-link-form.tsx b/web/components/web-view/create-update-link-form.tsx
index d29667ef8b2..1b378974806 100644
--- a/web/components/web-view/create-update-link-form.tsx
+++ b/web/components/web-view/create-update-link-form.tsx
@@ -20,8 +20,7 @@ import { ISSUE_DETAILS } from "constants/fetch-keys";
import useToast from "hooks/use-toast";
// ui
-import { PrimaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// types
import type { linkDetails, IIssueLink, IIssue } from "types";
@@ -178,13 +177,14 @@ export const CreateUpdateLinkForm: React.FC = (props) => {
-
{data ? (isSubmitting ? "Updating Link..." : "Update Link") : isSubmitting ? "Adding Link..." : "Add Link"}
-
+
);
diff --git a/web/components/web-view/issue-link-list.tsx b/web/components/web-view/issue-link-list.tsx
index 5df652300df..767e2a55bb8 100644
--- a/web/components/web-view/issue-link-list.tsx
+++ b/web/components/web-view/issue-link-list.tsx
@@ -19,7 +19,7 @@ import { Link as LinkIcon, Plus, Pencil, X } from "lucide-react";
import { Label, WebViewModal, CreateUpdateLinkForm } from "components/web-view";
// ui
-import { SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// fetch keys
import { ISSUE_DETAILS } from "constants/fetch-keys";
@@ -123,7 +123,8 @@ export const IssueLinks: React.FC = (props) => {
)}
))}
- setIsOpen(true)}
@@ -131,7 +132,7 @@ export const IssueLinks: React.FC = (props) => {
>
Add
-
+
);
diff --git a/web/components/web-view/issue-properties-detail.tsx b/web/components/web-view/issue-properties-detail.tsx
index 65a2eb173bb..ebfd607f78c 100644
--- a/web/components/web-view/issue-properties-detail.tsx
+++ b/web/components/web-view/issue-properties-detail.tsx
@@ -27,7 +27,8 @@ import { ChevronDown, PlayIcon, User, X, CalendarDays, LayoutGrid, Users } from
import useEstimateOption from "hooks/use-estimate-option";
// ui
-import { SecondaryButton, CustomDatePicker } from "components/ui";
+import { Button } from "@plane/ui";
+import { CustomDatePicker } from "components/ui";
// components
import {
@@ -391,14 +392,15 @@ export const IssuePropertiesDetail: React.FC = (props) => {
>
)}
- setIsViewAllOpen((prev) => !prev)}
className="w-full flex justify-center items-center gap-1 !py-2"
>
{isViewAllOpen ? "View less" : "View all"}
-
+
);
diff --git a/web/components/workspace/confirm-workspace-member-remove.tsx b/web/components/workspace/confirm-workspace-member-remove.tsx
index 9ca80c3dc67..945e7211356 100644
--- a/web/components/workspace/confirm-workspace-member-remove.tsx
+++ b/web/components/workspace/confirm-workspace-member-remove.tsx
@@ -4,7 +4,7 @@ import { Dialog, Transition } from "@headlessui/react";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
type Props = {
isOpen: boolean;
@@ -57,33 +57,29 @@ const ConfirmWorkspaceMemberRemove: React.FC = ({ isOpen, onClose, data,
-
+
-
+
Remove {data?.display_name}?
Are you sure you want to remove member-{" "}
- {data?.display_name} ? They will no
- longer have access to this workspace. This action cannot be undone.
+ {data?.display_name} ? They will no longer have access to
+ this workspace. This action cannot be undone.
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Removing..." : "Remove"}
-
+
diff --git a/web/components/workspace/create-workspace-form.tsx b/web/components/workspace/create-workspace-form.tsx
index 9736a08e888..27e00245c77 100644
--- a/web/components/workspace/create-workspace-form.tsx
+++ b/web/components/workspace/create-workspace-form.tsx
@@ -9,8 +9,8 @@ import workspaceService from "services/workspace.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { CustomSelect, PrimaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomSelect } from "components/ui";
+import { Button, Input } from "@plane/ui";
// types
import { ICurrentUserResponse, IWorkspace } from "types";
// fetch-keys
@@ -220,9 +220,9 @@ export const CreateWorkspaceForm: React.FC = ({
{secondaryButton}
-
+
{isSubmitting ? primaryButtonText.loading : primaryButtonText.default}
-
+
);
diff --git a/web/components/workspace/delete-workspace-modal.tsx b/web/components/workspace/delete-workspace-modal.tsx
index 1f55f2d33d7..e87181a0eb6 100644
--- a/web/components/workspace/delete-workspace-modal.tsx
+++ b/web/components/workspace/delete-workspace-modal.tsx
@@ -15,8 +15,7 @@ import useToast from "hooks/use-toast";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
// types
import type { ICurrentUserResponse, IWorkspace } from "types";
// fetch-keys
@@ -179,10 +178,12 @@ export const DeleteWorkspaceModal: React.FC = ({ isOpen, data, onClose, u
- Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Deleting..." : "Delete Workspace"}
-
+
diff --git a/web/components/workspace/send-workspace-invitation-modal.tsx b/web/components/workspace/send-workspace-invitation-modal.tsx
index 025622369b0..2655d4dd153 100644
--- a/web/components/workspace/send-workspace-invitation-modal.tsx
+++ b/web/components/workspace/send-workspace-invitation-modal.tsx
@@ -11,8 +11,8 @@ import workspaceService from "services/workspace.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { CustomSelect, PrimaryButton, SecondaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomSelect } from "components/ui";
+import { Button, Input } from "@plane/ui";
// icons
import { PlusIcon, XMarkIcon } from "@heroicons/react/24/outline";
// types
@@ -235,10 +235,12 @@ const SendWorkspaceInvitationModal: React.FC = (props) => {
Add more
-
Cancel
-
+
+ Cancel
+
+
{isSubmitting ? "Sending Invitation..." : "Send Invitation"}
-
+
diff --git a/web/components/workspace/views/delete-workspace-view-modal.tsx b/web/components/workspace/views/delete-workspace-view-modal.tsx
index 6030f630f11..cf4441f0587 100644
--- a/web/components/workspace/views/delete-workspace-view-modal.tsx
+++ b/web/components/workspace/views/delete-workspace-view-modal.tsx
@@ -11,7 +11,7 @@ import workspaceService from "services/workspace.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { DangerButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// types
@@ -100,36 +100,29 @@ export const DeleteWorkspaceViewModal: React.FC = ({ isOpen, data, setIsO
-
+
-
+
Delete View
Are you sure you want to delete view-{" "}
-
- {data?.name}
-
- ? All of the data related to the view will be permanently removed. This
- action cannot be undone.
+ {data?.name} ? All of the
+ data related to the view will be permanently removed. This action cannot be undone.
- Cancel
-
+
+ Cancel
+
+
{isDeleteLoading ? "Deleting..." : "Delete"}
-
+
diff --git a/web/components/workspace/views/form.tsx b/web/components/workspace/views/form.tsx
index 21db24510de..685d6e47879 100644
--- a/web/components/workspace/views/form.tsx
+++ b/web/components/workspace/views/form.tsx
@@ -17,8 +17,7 @@ import { WorkspaceFiltersList } from "components/core";
import { GlobalSelectFilters } from "components/workspace/views/global-select-filters";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
-import { Input, TextArea } from "@plane/ui";
+import { Button, Input, TextArea } from "@plane/ui";
// helpers
import { checkIfArraysHaveSameElements } from "helpers/array.helper";
// types
@@ -202,8 +201,10 @@ export const WorkspaceViewForm: React.FC = ({ handleFormSubmit, handleClo
-
Cancel
-
+
+ Cancel
+
+
{status
? isSubmitting
? "Updating View..."
@@ -211,7 +212,7 @@ export const WorkspaceViewForm: React.FC = ({ handleFormSubmit, handleClo
: isSubmitting
? "Creating View..."
: "Create View"}
-
+
);
diff --git a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
index 85191fdd522..f182ea8737e 100644
--- a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
@@ -13,7 +13,8 @@ import AppSidebar from "layouts/app-layout-legacy/app-sidebar";
import { NotAuthorizedView, JoinProject } from "components/auth-screens";
import { CommandPalette } from "components/command-palette";
// ui
-import { EmptyState, PrimaryButton, Spinner } from "components/ui";
+import { Button } from "@plane/ui";
+import { EmptyState, Spinner } from "components/ui";
// icons
import { LayerDiagonalIcon } from "components/icons";
// images
@@ -90,9 +91,9 @@ const ProjectAuthorizationWrapped: React.FC = ({
actionButton={
-
+
Go to issues
-
+
}
diff --git a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
index c66945d4234..04aa33ad3c2 100644
--- a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
@@ -14,10 +14,11 @@ import AppSidebar from "layouts/app-layout-legacy/app-sidebar";
import AppHeader from "layouts/app-layout-legacy/app-header";
import { UserAuthorizationLayout } from "./user-authorization-wrapper";
// components
+import { Button } from "@plane/ui";
import { NotAuthorizedView, NotAWorkspaceMember } from "components/auth-screens";
import { CommandPalette } from "components/command-palette";
// icons
-import { PrimaryButton, Spinner } from "components/ui";
+import { Spinner } from "components/ui";
import { LayerDiagonalIcon } from "components/icons";
// fetch-keys
import { WORKSPACE_MEMBERS_ME } from "constants/fetch-keys";
@@ -89,9 +90,9 @@ export const WorkspaceAuthorizationLayout: React.FC = ({
actionButton={
-
+
Go to workspace
-
+
}
diff --git a/web/layouts/auth-layout/workspace-wrapper.tsx b/web/layouts/auth-layout/workspace-wrapper.tsx
index 99233abc924..bfd38828178 100644
--- a/web/layouts/auth-layout/workspace-wrapper.tsx
+++ b/web/layouts/auth-layout/workspace-wrapper.tsx
@@ -4,8 +4,9 @@ import Link from "next/link";
import useSWR from "swr";
// services
import workspaceServices from "services/workspace.service";
-// icons
-import { Spinner, PrimaryButton, SecondaryButton } from "components/ui";
+// ui
+import { Spinner } from "components/ui";
+import { Button } from "@plane/ui";
// fetch-keys
import { WORKSPACE_MEMBERS_ME } from "constants/fetch-keys";
@@ -54,12 +55,12 @@ export const WorkspaceAuthWrapper: FC = (props) => {
diff --git a/web/pages/404.tsx b/web/pages/404.tsx
index 6386093a707..328a74178e5 100644
--- a/web/pages/404.tsx
+++ b/web/pages/404.tsx
@@ -6,7 +6,7 @@ import Image from "next/image";
// layouts
import DefaultLayout from "layouts/default-layout";
// ui
-import { SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// images
import Image404 from "public/404.svg";
// types
@@ -22,13 +22,15 @@ const PageNotFound: NextPage = () => (
Oops! Something went wrong.
- Sorry, the page you are looking for cannot be found. It may have been removed, had its
- name changed, or is temporarily unavailable.
+ Sorry, the page you are looking for cannot be found. It may have been removed, had its name changed, or is
+ temporarily unavailable.
- Go to Home
+
+ Go to Home
+
diff --git a/web/pages/[workspaceSlug]/index.tsx b/web/pages/[workspaceSlug]/index.tsx
index 3968e9be7fa..1e97843a197 100644
--- a/web/pages/[workspaceSlug]/index.tsx
+++ b/web/pages/[workspaceSlug]/index.tsx
@@ -19,7 +19,8 @@ import useProjects from "hooks/use-projects";
import { CompletedIssuesGraph, IssuesList, IssuesPieChart, IssuesStats } from "components/workspace";
import { TourRoot } from "components/onboarding";
// ui
-import { PrimaryButton, ProductUpdatesModal } from "components/ui";
+import { Button } from "@plane/ui";
+import { ProductUpdatesModal } from "components/ui";
// icons
import { BoltOutlined, GridViewOutlined } from "@mui/icons-material";
// images
@@ -175,7 +176,8 @@ const WorkspacePage: NextPage = () => {
Create a project
Manage your projects by creating issues, cycles, modules, views and pages.
-
{
const e = new KeyboardEvent("keydown", {
key: "p",
@@ -184,7 +186,7 @@ const WorkspacePage: NextPage = () => {
}}
>
Create Project
-
+
diff --git a/web/pages/[workspaceSlug]/me/my-issues.tsx b/web/pages/[workspaceSlug]/me/my-issues.tsx
index de12f5b3248..f861c467f7d 100644
--- a/web/pages/[workspaceSlug]/me/my-issues.tsx
+++ b/web/pages/[workspaceSlug]/me/my-issues.tsx
@@ -11,7 +11,7 @@ import useMyIssuesFilters from "hooks/my-issues/use-my-issues-filter";
// components
import { MyIssuesView, MyIssuesViewOptions } from "components/issues";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
import { Breadcrumbs, BreadcrumbItem } from "components/breadcrumbs";
// types
import type { NextPage } from "next";
@@ -85,7 +85,8 @@ const MyIssuesPage: NextPage = () => {
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -94,7 +95,7 @@ const MyIssuesPage: NextPage = () => {
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/me/profile/index.tsx b/web/pages/[workspaceSlug]/me/profile/index.tsx
index 9ef5a9e1451..d18a332f18f 100644
--- a/web/pages/[workspaceSlug]/me/profile/index.tsx
+++ b/web/pages/[workspaceSlug]/me/profile/index.tsx
@@ -16,8 +16,8 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
import { ImagePickerPopover, ImageUploadModal } from "components/core";
import { SettingsSidebar } from "components/project";
// ui
-import { CustomSearchSelect, CustomSelect, PrimaryButton, Spinner } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
+import { CustomSearchSelect, CustomSelect, Spinner } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { UserIcon } from "@heroicons/react/24/outline";
@@ -392,9 +392,9 @@ const Profile: NextPage = () => {
-
+
{isSubmitting ? "Updating Profile..." : "Update Profile"}
-
+
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
index d41813898c5..c1b2f366447 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
@@ -22,7 +22,8 @@ import useUserAuth from "hooks/use-user-auth";
// components
import { AnalyticsProjectModal } from "components/analytics";
// ui
-import { CustomMenu, EmptyState, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { CustomMenu, EmptyState } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// images
import emptyCycle from "public/empty-state/cycle.svg";
@@ -131,13 +132,14 @@ const SingleCycle: React.FC = () => {
right={
-
setAnalyticsModal(true)}
className="!py-1.5 font-normal rounded-md text-custom-text-200 hover:text-custom-text-100"
outline
>
Analytics
-
+
{
}
right={
- {
const e = new KeyboardEvent("keydown", { key: "q" });
@@ -90,7 +92,7 @@ const ProjectCyclesPage: NextPage = observer(() => {
>
Add Cycle
-
+
}
>
{
}
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -44,7 +45,7 @@ const ProjectInbox: NextPage = () => {
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
index 6354af6d65a..598cad15baa 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
@@ -18,7 +18,7 @@ import { ExistingIssuesListModal, IssuesFilterView } from "components/core";
import { ModuleDetailsSidebar } from "components/modules";
import { AnalyticsProjectModal } from "components/analytics";
// ui
-import { CustomMenu, EmptyState, SecondaryButton } from "components/ui";
+import { CustomMenu, EmptyState } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// images
import emptyModule from "public/empty-state/module.svg";
@@ -140,9 +140,9 @@ const SingleModule: React.FC = () => {
<>
setAnalyticsModal(false)} />
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
index 72454e124e8..9b69ce23270 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
@@ -14,7 +14,8 @@ import modulesService from "services/modules.service";
// components
import { CreateUpdateModuleModal, ModulesListGanttChartView, SingleModuleCard } from "components/modules";
// ui
-import { EmptyState, Icon, Loader, PrimaryButton, Tooltip } from "components/ui";
+import { Button } from "@plane/ui";
+import { EmptyState, Icon, Loader, Tooltip } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
@@ -101,7 +102,8 @@ const ProjectModules: NextPage = () => {
))}
- {
const e = new KeyboardEvent("keydown", { key: "m" });
@@ -110,7 +112,7 @@ const ProjectModules: NextPage = () => {
>
Add Module
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
index 3e5e07478e5..f6736a56b95 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
@@ -19,7 +19,7 @@ import { ProjectAuthorizationWrapper } from "layouts/auth-layout-legacy";
// components
import { RecentPagesList, CreateUpdatePageModal, TPagesListProps } from "components/pages";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { ListBulletIcon, Squares2X2Icon } from "@heroicons/react/24/outline";
@@ -99,7 +99,8 @@ const ProjectPages: NextPage = () => {
}
right={
- {
const e = new KeyboardEvent("keydown", { key: "d" });
@@ -108,7 +109,7 @@ const ProjectPages: NextPage = () => {
>
Create Page
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx
index 1f2f5595286..9785fdafc03 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx
@@ -18,7 +18,8 @@ import { SettingsSidebar } from "components/project";
import useToast from "hooks/use-toast";
import useUserAuth from "hooks/use-user-auth";
// ui
-import { EmptyState, Loader, PrimaryButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { EmptyState, Loader } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
@@ -130,16 +131,19 @@ const EstimatesSettings: NextPage = () => {
Estimates
-
{
setEstimateToUpdate(undefined);
setEstimateFormOpen(true);
}}
>
Add Estimate
-
+
{projectDetails?.estimate && (
-
Disable Estimates
+
+ Disable Estimates
+
)}
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
index 4d38582322a..8b96c150098 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
@@ -11,7 +11,8 @@ import { DeleteProjectModal, ProjectDetailsForm, ProjectDetailsFormLoader, Setti
// hooks
import useUserAuth from "hooks/use-user-auth";
// components
-import { Loader, DangerButton, Icon } from "components/ui";
+import { Button } from "@plane/ui";
+import { Loader, Icon } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// helpers
import { truncateText } from "helpers/string.helper";
@@ -128,13 +129,14 @@ const GeneralSettings: NextPage = observer(() => {
{projectDetails ? (
- setSelectedProject(projectDetails.id ?? null)}
className="!text-sm"
outline
>
Delete my project
-
+
) : (
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
index 4f6a236df77..f971f60da80 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
@@ -21,7 +21,8 @@ import {
} from "components/labels";
import { SettingsSidebar } from "components/project";
// ui
-import { EmptyState, Loader, PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { EmptyState, Loader } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
@@ -117,9 +118,9 @@ const LabelsSettings: NextPage = () => {
{labelForm && (
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx
index 4e7d684af0f..ba953410202 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx
@@ -21,15 +21,8 @@ import ConfirmProjectMemberRemove from "components/project/confirm-project-membe
import SendProjectInvitationModal from "components/project/send-project-invitation-modal";
import { MemberSelect, SettingsSidebar } from "components/project";
// ui
-import {
- CustomMenu,
- CustomSearchSelect,
- CustomSelect,
- Icon,
- Loader,
- PrimaryButton,
- SecondaryButton,
-} from "components/ui";
+import { Button } from "@plane/ui";
+import { CustomMenu, CustomSearchSelect, CustomSelect, Icon, Loader } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { PlusIcon, XMarkIcon } from "@heroicons/react/24/outline";
@@ -331,7 +324,9 @@ const MembersSettings: NextPage = () => {
Members
-
setInviteModal(true)}>Add Member
+
setInviteModal(true)}>
+ Add Member
+
{!projectMembers || !projectInvitations ? (
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
index 463a3c7c727..67d4ff2f091 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
@@ -12,7 +12,8 @@ import { IssueViewContextProvider } from "contexts/issue-view.context";
// components
import { IssuesFilterView, IssuesView } from "components/core";
// ui
-import { CustomMenu, EmptyState, PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { CustomMenu, EmptyState } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
@@ -81,7 +82,8 @@ const SingleView: React.FC = () => {
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -90,7 +92,7 @@ const SingleView: React.FC = () => {
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
index bbf34dff2d4..393cbb0e511 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
@@ -20,7 +20,8 @@ import emptyView from "public/empty-state/view.svg";
// fetching keys
import { PROJECT_DETAILS, VIEWS_LIST } from "constants/fetch-keys";
// components
-import { PrimaryButton, Loader, EmptyState } from "components/ui";
+import { Button } from "@plane/ui";
+import { Loader, EmptyState } from "components/ui";
import { DeleteViewModal, CreateUpdateViewModal, SingleViewItem } from "components/views";
// types
import { IView } from "types";
@@ -68,7 +69,8 @@ const ProjectViews: NextPage = () => {
}
right={
-
{
@@ -78,7 +80,7 @@ const ProjectViews: NextPage = () => {
>
Create View
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/projects/index.tsx b/web/pages/[workspaceSlug]/projects/index.tsx
index 1beeb0c5557..26641efe310 100644
--- a/web/pages/[workspaceSlug]/projects/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/index.tsx
@@ -11,7 +11,8 @@ import useUserAuth from "hooks/use-user-auth";
// layouts
import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
// ui
-import { Icon, PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { Icon } from "components/ui";
import { Breadcrumbs, BreadcrumbItem } from "components/breadcrumbs";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
@@ -53,7 +54,8 @@ const ProjectsPage: NextPage = () => {
/>
- {
const e = new KeyboardEvent("keydown", { key: "p" });
@@ -62,7 +64,7 @@ const ProjectsPage: NextPage = () => {
>
Add Project
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/settings/billing.tsx b/web/pages/[workspaceSlug]/settings/billing.tsx
index 1379eb4979f..be7d4574744 100644
--- a/web/pages/[workspaceSlug]/settings/billing.tsx
+++ b/web/pages/[workspaceSlug]/settings/billing.tsx
@@ -11,7 +11,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
// component
import { SettingsSidebar } from "components/project";
// ui
-import { SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// types
import type { NextPage } from "next";
@@ -57,7 +57,9 @@ const BillingSettings: NextPage = () => {
Current plan
You are currently using the free plan
- View Plans
+
+ View Plans
+
diff --git a/web/pages/[workspaceSlug]/settings/index.tsx b/web/pages/[workspaceSlug]/settings/index.tsx
index 567fb0a0416..ee29e3ff854 100644
--- a/web/pages/[workspaceSlug]/settings/index.tsx
+++ b/web/pages/[workspaceSlug]/settings/index.tsx
@@ -20,8 +20,8 @@ import { DeleteWorkspaceModal } from "components/workspace";
import { SettingsSidebar } from "components/project";
// ui
import { Disclosure, Transition } from "@headlessui/react";
-import { Spinner, CustomSelect, DangerButton, PrimaryButton, Icon } from "components/ui";
-import { Input } from "@plane/ui";
+import { Spinner, CustomSelect, Icon } from "components/ui";
+import { Button, Input } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { Pencil } from "lucide-react";
@@ -310,9 +310,9 @@ const WorkspaceSettings: NextPage = () => {
-
+
{isSubmitting ? "Updating..." : "Update Workspace"}
-
+
{isAdmin && (
@@ -345,9 +345,9 @@ const WorkspaceSettings: NextPage = () => {
that workspace will be permanently removed and cannot be recovered.
- setIsOpen(true)} className="!text-sm" outline>
+ setIsOpen(true)} className="!text-sm" outline>
Delete my workspace
-
+
diff --git a/web/pages/[workspaceSlug]/settings/members.tsx b/web/pages/[workspaceSlug]/settings/members.tsx
index e5f65a40bcc..f72f564ad83 100644
--- a/web/pages/[workspaceSlug]/settings/members.tsx
+++ b/web/pages/[workspaceSlug]/settings/members.tsx
@@ -18,7 +18,8 @@ import ConfirmWorkspaceMemberRemove from "components/workspace/confirm-workspace
import SendWorkspaceInvitationModal from "components/workspace/send-workspace-invitation-modal";
import { SettingsSidebar } from "components/project";
// ui
-import { CustomMenu, CustomSelect, Icon, Loader, PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
+import { CustomMenu, CustomSelect, Icon, Loader } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { XMarkIcon } from "components/icons";
@@ -181,7 +182,9 @@ const MembersSettings: NextPage = () => {
Members
-
setInviteModal(true)}>Add Member
+
setInviteModal(true)}>
+ Add Member
+
{!workspaceMembers || !workspaceInvitations ? (
diff --git a/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx b/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
index e41b50a4aa1..5ce4d0789e3 100644
--- a/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
@@ -1,7 +1,7 @@
// layouts
import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
-import { PrimaryButton } from "components/ui";
// component
+import { Button } from "@plane/ui";
import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/workspace-issue-view-option";
import { WorkspaceAllIssue } from "components/issues/workspace-views/workspace-all-issue";
// icons
@@ -20,7 +20,8 @@ const WorkspaceViewAllIssue = () => (
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -29,7 +30,7 @@ const WorkspaceViewAllIssue = () => (
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/workspace-views/assigned.tsx b/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
index 0edef4d81b2..602ce0de482 100644
--- a/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
@@ -4,7 +4,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/workspace-issue-view-option";
import { WorkspaceAssignedIssue } from "components/issues/workspace-views/workspace-assigned-issue";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
import { CheckCircle } from "lucide-react";
@@ -20,7 +20,8 @@ const WorkspaceViewAssignedIssue: React.FC = () => (
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -29,7 +30,7 @@ const WorkspaceViewAssignedIssue: React.FC = () => (
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/workspace-views/created.tsx b/web/pages/[workspaceSlug]/workspace-views/created.tsx
index 07ddbbae996..327cecc4353 100644
--- a/web/pages/[workspaceSlug]/workspace-views/created.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/created.tsx
@@ -4,7 +4,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/workspace-issue-view-option";
import { WorkspaceCreatedIssues } from "components/issues/workspace-views/workspace-created-issues";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
import { CheckCircle } from "lucide-react";
@@ -20,7 +20,8 @@ const WorkspaceViewCreatedIssue: React.FC = () => (
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -29,7 +30,7 @@ const WorkspaceViewCreatedIssue: React.FC = () => (
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/workspace-views/index.tsx b/web/pages/[workspaceSlug]/workspace-views/index.tsx
index 968e735520a..5259dd7259b 100644
--- a/web/pages/[workspaceSlug]/workspace-views/index.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/index.tsx
@@ -16,8 +16,8 @@ import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/wo
import { CreateUpdateWorkspaceViewModal } from "components/workspace/views/modal";
import { DeleteWorkspaceViewModal } from "components/workspace/views/delete-workspace-view-modal";
// ui
-import { EmptyState, Loader, PrimaryButton } from "components/ui";
-import { Input } from "@plane/ui";
+import { EmptyState, Loader } from "components/ui";
+import { Button, Input } from "@plane/ui";
// icons
import { MagnifyingGlassIcon } from "@heroicons/react/24/outline";
import { PlusIcon } from "lucide-react";
@@ -103,10 +103,10 @@ const WorkspaceViews: NextPage = () => {
-
setCreateUpdateViewModal(true)}>
+ setCreateUpdateViewModal(true)}>
New View
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/workspace-views/issues.tsx b/web/pages/[workspaceSlug]/workspace-views/issues.tsx
index 1f94604c700..571da80f13c 100644
--- a/web/pages/[workspaceSlug]/workspace-views/issues.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/issues.tsx
@@ -4,7 +4,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/workspace-issue-view-option";
import { WorkspaceViewIssues } from "components/issues/workspace-views/workpace-view-issues";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
import { CheckCircle } from "lucide-react";
@@ -20,7 +20,8 @@ const WorkspaceView = () => (
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -29,7 +30,7 @@ const WorkspaceView = () => (
>
Add Issue
-
+
}
>
diff --git a/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx b/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
index 50da24a82d2..47dc39ff110 100644
--- a/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
@@ -4,7 +4,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
import { WorkspaceIssuesViewOptions } from "components/issues/workspace-views/workspace-issue-view-option";
import { WorkspaceSubscribedIssues } from "components/issues/workspace-views/workspace-subscribed-issue";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
import { CheckCircle } from "lucide-react";
@@ -20,7 +20,8 @@ const WorkspaceViewSubscribedIssue: React.FC = () => (
right={
-
{
const e = new KeyboardEvent("keydown", { key: "c" });
@@ -29,7 +30,7 @@ const WorkspaceViewSubscribedIssue: React.FC = () => (
>
Add Issue
-
+
}
>
diff --git a/web/pages/_error.tsx b/web/pages/_error.tsx
index 3595c6ce77a..7b0659cbad5 100644
--- a/web/pages/_error.tsx
+++ b/web/pages/_error.tsx
@@ -9,7 +9,7 @@ import useToast from "hooks/use-toast";
// layouts
import DefaultLayout from "layouts/default-layout";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
+import { Button } from "@plane/ui";
const CustomErrorComponent = () => {
const router = useRouter();
@@ -36,9 +36,8 @@ const CustomErrorComponent = () => {
Exception Detected!
- We{"'"}re Sorry! An exception has been detected, and our engineering team has been
- notified. We apologize for any inconvenience this may have caused. Please reach out to
- our engineering team at{" "}
+ We{"'"}re Sorry! An exception has been detected, and our engineering team has been notified. We apologize
+ for any inconvenience this may have caused. Please reach out to our engineering team at{" "}
support@plane.so
{" "}
@@ -55,12 +54,12 @@ const CustomErrorComponent = () => {
-
router.back()}>
+ router.back()}>
Go back
-
-
+
+
Sign out
-
+
diff --git a/web/pages/invitations.tsx b/web/pages/invitations.tsx
index 283e54abffd..d2fbe46f018 100644
--- a/web/pages/invitations.tsx
+++ b/web/pages/invitations.tsx
@@ -17,7 +17,7 @@ import useToast from "hooks/use-toast";
import DefaultLayout from "layouts/default-layout";
import { UserAuthorizationLayout } from "layouts/auth-layout-legacy/user-authorization-wrapper";
// ui
-import { SecondaryButton, PrimaryButton, EmptyState } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { CheckCircleIcon } from "@heroicons/react/24/outline";
// images
@@ -174,7 +174,8 @@ const OnBoard: NextPage = () => {
})}
diff --git a/web/pages/m/[workspaceSlug]/editor.tsx b/web/pages/m/[workspaceSlug]/editor.tsx
index 2bfac63b85a..971c7135e6a 100644
--- a/web/pages/m/[workspaceSlug]/editor.tsx
+++ b/web/pages/m/[workspaceSlug]/editor.tsx
@@ -15,7 +15,8 @@ import WebViewLayout from "layouts/web-view-layout";
// components
import { TipTapEditor } from "components/tiptap";
-import { PrimaryButton, Spinner } from "components/ui";
+import { Spinner } from "components/ui";
+import { Button } from "@plane/ui";
const Editor: NextPage = () => {
const [isLoading, setIsLoading] = useState(false);
@@ -55,9 +56,7 @@ const Editor: NextPage = () => {
{
)}
/>
{isEditable && (
- {
console.log(
@@ -88,7 +88,7 @@ const Editor: NextPage = () => {
}}
>
Submit
-
+
)}
>
)}
diff --git a/web/pages/reset-password.tsx b/web/pages/reset-password.tsx
index 4624d9bef49..34a2ce9def3 100644
--- a/web/pages/reset-password.tsx
+++ b/web/pages/reset-password.tsx
@@ -14,8 +14,8 @@ import userService from "services/user.service";
// layouts
import DefaultLayout from "layouts/default-layout";
// ui
-import { PrimaryButton, Spinner } from "components/ui";
-import { Input } from "@plane/ui";
+import { Button, Input } from "@plane/ui";
+import { Spinner } from "components/ui";
// images
import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png";
// types
@@ -157,9 +157,9 @@ const ResetPasswordPage: NextPage = () => {
)}
/>
-
+
{isSubmitting ? "Resetting..." : "Reset"}
-
+
From e4e93f4a162bf3c542f9087641fed39d80cff36f Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Tue, 10 Oct 2023 20:15:16 +0530
Subject: [PATCH 04/15] chore: button component revamp
---
.../tailwind-config-custom/tailwind.config.js | 2 +-
packages/ui/dist/index.d.ts | 9 +-
packages/ui/dist/index.js | 145 +++++++++++++-----
packages/ui/dist/index.mjs | 145 +++++++++++++-----
packages/ui/src/buttons/button.tsx | 59 +++++++
packages/ui/src/buttons/helper.tsx | 115 ++++++++++++++
packages/ui/src/buttons/index.tsx | 95 ------------
packages/ui/src/index.tsx | 2 +-
8 files changed, 391 insertions(+), 181 deletions(-)
create mode 100644 packages/ui/src/buttons/button.tsx
create mode 100644 packages/ui/src/buttons/helper.tsx
delete mode 100644 packages/ui/src/buttons/index.tsx
diff --git a/packages/tailwind-config-custom/tailwind.config.js b/packages/tailwind-config-custom/tailwind.config.js
index 061168c4f78..4e727ecc1f5 100644
--- a/packages/tailwind-config-custom/tailwind.config.js
+++ b/packages/tailwind-config-custom/tailwind.config.js
@@ -7,7 +7,7 @@ module.exports = {
"./constants/**/*.{js,ts,jsx,tsx}",
"./layouts/**/*.tsx",
"./pages/**/*.tsx",
- "./ui/**/*.tsx",
+ "../packages/ui/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index e98ae316ee7..6a1bc60427e 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -3,11 +3,12 @@ import { FC } from 'react';
interface ButtonProps extends React.ButtonHTMLAttributes {
variant?: "primary" | "secondary" | "danger";
- children: React.ReactNode;
- className?: string;
- loading?: boolean;
size?: "sm" | "md" | "lg";
- outline?: boolean;
+ loading?: boolean;
+ disabled?: boolean;
+ appendIcon?: any;
+ prependIcon?: any;
+ children: React.ReactNode;
}
declare const Button: React.ForwardRefExoticComponent>;
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index 58f9787ec53..4296ea0a972 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -33,58 +33,123 @@ __export(src_exports, {
});
module.exports = __toCommonJS(src_exports);
-// src/buttons/index.tsx
+// src/buttons/button.tsx
var React = __toESM(require("react"));
-var import_clsx = __toESM(require("clsx"));
+
+// src/buttons/helper.tsx
+var buttonStyling = {
+ primary: {
+ default: `text-white bg-custom-primary-100`,
+ hover: `hover:bg-custom-primary-200`,
+ pressed: `focus:text-custom-brand-40 focus:bg-custom-primary-200`,
+ disabled: `cursor-not-allowed !bg-custom-primary-60 hover:bg-custom-primary-60`
+ },
+ "accent-primary": {
+ default: `bg-custom-primary-10 text-custom-primary-100`,
+ hover: `hover:bg-custom-primary-20 hover:text-custom-primary-200`,
+ pressed: `focus:bg-custom-primary-20`,
+ disabled: `cursor-not-allowed !text-custom-primary-60`
+ },
+ "outline-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100 border border-custom-primary-100`,
+ hover: `hover:border-custom-primary-80 hover:bg-custom-primary-10`,
+ pressed: `focus:text-custom-primary-80 focus:bg-custom-primary-10 focus:border-custom-primary-80`,
+ disabled: `cursor-not-allowed !text-custom-primary-60 !border-custom-primary-60 `
+ },
+ "neutral-primary": {
+ default: `text-custom-text-200 bg-custom-background-100 border border-custom-border-200`,
+ hover: `hover:bg-custom-background-90`,
+ pressed: `focus:text-custom-text-300 focus:bg-custom-background-90`,
+ disabled: `cursor-not-allowed !text-custom-text-400`
+ },
+ "link-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100`,
+ hover: `hover:text-custom-primary-200`,
+ pressed: `focus:text-custom-primary-80 `,
+ disabled: `cursor-not-allowed !text-custom-primary-60`
+ },
+ danger: {
+ default: `text-white bg-red-500`,
+ hover: ` hover:bg-red-600`,
+ pressed: `focus:text-red-200 focus:bg-red-600`,
+ disabled: `cursor-not-allowed !bg-red-300`
+ },
+ "accent-danger": {
+ default: `text-red-500 bg-red-50`,
+ hover: `hover:text-red-600 hover:bg-red-100`,
+ pressed: `focus:text-red-500 focus:bg-red-100`,
+ disabled: `cursor-not-allowed !text-red-300`
+ },
+ "outline-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-500`,
+ hover: `hover:text-red-400 hover:border-red-400`,
+ pressed: `focus:text-red-400 focus:border-red-400`,
+ disabled: `cursor-not-allowed !text-red-300 !border-red-300`
+ },
+ "link-danger": {
+ default: `text-red-500 bg-custom-background-100`,
+ hover: `hover:text-red-400`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`
+ },
+ "tertiary-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-200`,
+ hover: `hover:bg-red-50 hover:border-red-300`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`
+ }
+};
+var getButtonStyling = (variant, size, disabled = false) => {
+ let _variant = ``;
+ const currentVariant = buttonStyling[variant];
+ _variant = `${currentVariant.default} ${disabled ? currentVariant.disabled : currentVariant.hover} ${currentVariant.pressed}`;
+ let _size = ``;
+ if (size === "sm")
+ _size = "px-3 py-1.5 font-medium text-xs rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* sm */;
+ if (size === "md")
+ _size = "px-4 py-1.5 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* md */;
+ if (size === "lg")
+ _size = "px-5 py-2 font-medium text-base rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* lg */;
+ return `${_variant} ${_size}`;
+};
+var getIconStyling = (size) => {
+ let icon = ``;
+ if (size === "sm")
+ icon = "h-3 w-3 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* sm */;
+ if (size === "md")
+ icon = "h-3.5 w-3.5 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* md */;
+ if (size === "lg")
+ icon = "h-4 w-4 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* lg */;
+ return icon;
+};
+
+// src/buttons/button.tsx
var Button = React.forwardRef(
(props, ref) => {
const {
- children,
- className = "",
+ variant = "primary",
+ size = "sm",
type = "button",
- disabled = false,
loading = false,
- size = "sm",
- outline = false,
- variant = "primary",
+ disabled = false,
+ prependIcon = null,
+ appendIcon = null,
+ children,
...rest
} = props;
- const buttonStyleClasses = {
- primary: {
- variantStyle: "text-white bg-custom-primary hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle: "text-custom-primary hover:bg-custom-primary hover:text-white",
- variantBorderStyles: "border-custom-primary"
- },
- secondary: {
- variantStyle: "bg-custom-background-100 hover:border-opacity-70 hover:bg-opacity-70",
- variantOutlineStyle: "hover:bg-custom-background-80",
- variantBorderStyles: "border-custom-border-200"
- },
- danger: {
- variantStyle: "text-white bg-red-500 hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle: " text-red-500 hover:bg-red-500 hover:text-white",
- variantBorderStyles: "border-red-500"
- }
- };
+ const buttonStyle = getButtonStyling(variant, size, disabled || loading);
+ const buttonIconStyle = getIconStyling(size);
return /* @__PURE__ */ React.createElement("button", {
- type,
ref,
- className: `${className} border font-medium duration-300 ${size === "sm" ? "rounded px-3 py-2 text-xs" : size === "md" ? "rounded-md px-3.5 py-2 text-sm" : "rounded-lg px-4 py-2 text-base"} ${disabled ? "cursor-not-allowed opacity-70" : ""} ${outline ? (0, import_clsx.default)({
- [buttonStyleClasses.primary.variantOutlineStyle]: variant === "primary",
- [buttonStyleClasses.secondary.variantOutlineStyle]: variant === "secondary",
- [buttonStyleClasses.danger.variantOutlineStyle]: variant === "danger"
- }) : (0, import_clsx.default)({
- [buttonStyleClasses.primary.variantStyle]: variant === "primary",
- [buttonStyleClasses.secondary.variantStyle]: variant === "secondary",
- [buttonStyleClasses.danger.variantStyle]: variant === "danger"
- })} ${loading ? "cursor-wait" : ""} ${(0, import_clsx.default)({
- [buttonStyleClasses.primary.variantBorderStyles]: variant === "primary",
- [buttonStyleClasses.secondary.variantBorderStyles]: variant === "secondary",
- [buttonStyleClasses.danger.variantBorderStyles]: variant === "danger"
- })}`,
+ type,
+ className: `${buttonStyle}`,
disabled: disabled || loading,
...rest
- }, children);
+ }, prependIcon && /* @__PURE__ */ React.createElement("div", {
+ className: buttonIconStyle
+ }, React.cloneElement(prependIcon, { "stroke-width": 2 })), children, appendIcon && /* @__PURE__ */ React.createElement("div", {
+ className: buttonIconStyle
+ }, React.cloneElement(appendIcon, { "stroke-width": 2 })));
}
);
Button.displayName = "plane-ui-button";
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 14bfc7f5f96..645a5e06680 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -1,55 +1,120 @@
-// src/buttons/index.tsx
+// src/buttons/button.tsx
import * as React from "react";
-import clsx from "clsx";
+
+// src/buttons/helper.tsx
+var buttonStyling = {
+ primary: {
+ default: `text-white bg-custom-primary-100`,
+ hover: `hover:bg-custom-primary-200`,
+ pressed: `focus:text-custom-brand-40 focus:bg-custom-primary-200`,
+ disabled: `cursor-not-allowed !bg-custom-primary-60 hover:bg-custom-primary-60`
+ },
+ "accent-primary": {
+ default: `bg-custom-primary-10 text-custom-primary-100`,
+ hover: `hover:bg-custom-primary-20 hover:text-custom-primary-200`,
+ pressed: `focus:bg-custom-primary-20`,
+ disabled: `cursor-not-allowed !text-custom-primary-60`
+ },
+ "outline-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100 border border-custom-primary-100`,
+ hover: `hover:border-custom-primary-80 hover:bg-custom-primary-10`,
+ pressed: `focus:text-custom-primary-80 focus:bg-custom-primary-10 focus:border-custom-primary-80`,
+ disabled: `cursor-not-allowed !text-custom-primary-60 !border-custom-primary-60 `
+ },
+ "neutral-primary": {
+ default: `text-custom-text-200 bg-custom-background-100 border border-custom-border-200`,
+ hover: `hover:bg-custom-background-90`,
+ pressed: `focus:text-custom-text-300 focus:bg-custom-background-90`,
+ disabled: `cursor-not-allowed !text-custom-text-400`
+ },
+ "link-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100`,
+ hover: `hover:text-custom-primary-200`,
+ pressed: `focus:text-custom-primary-80 `,
+ disabled: `cursor-not-allowed !text-custom-primary-60`
+ },
+ danger: {
+ default: `text-white bg-red-500`,
+ hover: ` hover:bg-red-600`,
+ pressed: `focus:text-red-200 focus:bg-red-600`,
+ disabled: `cursor-not-allowed !bg-red-300`
+ },
+ "accent-danger": {
+ default: `text-red-500 bg-red-50`,
+ hover: `hover:text-red-600 hover:bg-red-100`,
+ pressed: `focus:text-red-500 focus:bg-red-100`,
+ disabled: `cursor-not-allowed !text-red-300`
+ },
+ "outline-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-500`,
+ hover: `hover:text-red-400 hover:border-red-400`,
+ pressed: `focus:text-red-400 focus:border-red-400`,
+ disabled: `cursor-not-allowed !text-red-300 !border-red-300`
+ },
+ "link-danger": {
+ default: `text-red-500 bg-custom-background-100`,
+ hover: `hover:text-red-400`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`
+ },
+ "tertiary-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-200`,
+ hover: `hover:bg-red-50 hover:border-red-300`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`
+ }
+};
+var getButtonStyling = (variant, size, disabled = false) => {
+ let _variant = ``;
+ const currentVariant = buttonStyling[variant];
+ _variant = `${currentVariant.default} ${disabled ? currentVariant.disabled : currentVariant.hover} ${currentVariant.pressed}`;
+ let _size = ``;
+ if (size === "sm")
+ _size = "px-3 py-1.5 font-medium text-xs rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* sm */;
+ if (size === "md")
+ _size = "px-4 py-1.5 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* md */;
+ if (size === "lg")
+ _size = "px-5 py-2 font-medium text-base rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline" /* lg */;
+ return `${_variant} ${_size}`;
+};
+var getIconStyling = (size) => {
+ let icon = ``;
+ if (size === "sm")
+ icon = "h-3 w-3 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* sm */;
+ if (size === "md")
+ icon = "h-3.5 w-3.5 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* md */;
+ if (size === "lg")
+ icon = "h-4 w-4 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0" /* lg */;
+ return icon;
+};
+
+// src/buttons/button.tsx
var Button = React.forwardRef(
(props, ref) => {
const {
- children,
- className = "",
+ variant = "primary",
+ size = "sm",
type = "button",
- disabled = false,
loading = false,
- size = "sm",
- outline = false,
- variant = "primary",
+ disabled = false,
+ prependIcon = null,
+ appendIcon = null,
+ children,
...rest
} = props;
- const buttonStyleClasses = {
- primary: {
- variantStyle: "text-white bg-custom-primary hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle: "text-custom-primary hover:bg-custom-primary hover:text-white",
- variantBorderStyles: "border-custom-primary"
- },
- secondary: {
- variantStyle: "bg-custom-background-100 hover:border-opacity-70 hover:bg-opacity-70",
- variantOutlineStyle: "hover:bg-custom-background-80",
- variantBorderStyles: "border-custom-border-200"
- },
- danger: {
- variantStyle: "text-white bg-red-500 hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle: " text-red-500 hover:bg-red-500 hover:text-white",
- variantBorderStyles: "border-red-500"
- }
- };
+ const buttonStyle = getButtonStyling(variant, size, disabled || loading);
+ const buttonIconStyle = getIconStyling(size);
return /* @__PURE__ */ React.createElement("button", {
- type,
ref,
- className: `${className} border font-medium duration-300 ${size === "sm" ? "rounded px-3 py-2 text-xs" : size === "md" ? "rounded-md px-3.5 py-2 text-sm" : "rounded-lg px-4 py-2 text-base"} ${disabled ? "cursor-not-allowed opacity-70" : ""} ${outline ? clsx({
- [buttonStyleClasses.primary.variantOutlineStyle]: variant === "primary",
- [buttonStyleClasses.secondary.variantOutlineStyle]: variant === "secondary",
- [buttonStyleClasses.danger.variantOutlineStyle]: variant === "danger"
- }) : clsx({
- [buttonStyleClasses.primary.variantStyle]: variant === "primary",
- [buttonStyleClasses.secondary.variantStyle]: variant === "secondary",
- [buttonStyleClasses.danger.variantStyle]: variant === "danger"
- })} ${loading ? "cursor-wait" : ""} ${clsx({
- [buttonStyleClasses.primary.variantBorderStyles]: variant === "primary",
- [buttonStyleClasses.secondary.variantBorderStyles]: variant === "secondary",
- [buttonStyleClasses.danger.variantBorderStyles]: variant === "danger"
- })}`,
+ type,
+ className: `${buttonStyle}`,
disabled: disabled || loading,
...rest
- }, children);
+ }, prependIcon && /* @__PURE__ */ React.createElement("div", {
+ className: buttonIconStyle
+ }, React.cloneElement(prependIcon, { "stroke-width": 2 })), children, appendIcon && /* @__PURE__ */ React.createElement("div", {
+ className: buttonIconStyle
+ }, React.cloneElement(appendIcon, { "stroke-width": 2 })));
}
);
Button.displayName = "plane-ui-button";
diff --git a/packages/ui/src/buttons/button.tsx b/packages/ui/src/buttons/button.tsx
new file mode 100644
index 00000000000..b5da4604b2f
--- /dev/null
+++ b/packages/ui/src/buttons/button.tsx
@@ -0,0 +1,59 @@
+import * as React from "react";
+
+import { getIconStyling, getButtonStyling } from "./helper";
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes {
+ variant?: "primary" | "secondary" | "danger";
+ size?: "sm" | "md" | "lg";
+ loading?: boolean;
+ disabled?: boolean;
+ appendIcon?: any;
+ prependIcon?: any;
+ children: React.ReactNode;
+}
+
+const Button = React.forwardRef(
+ (props, ref) => {
+ const {
+ variant = "primary",
+ size = "sm",
+ type = "button",
+ loading = false,
+ disabled = false,
+ prependIcon = null,
+ appendIcon = null,
+ children,
+ ...rest
+ } = props;
+
+ const buttonStyle = getButtonStyling(variant, size, disabled || loading);
+ const buttonIconStyle = getIconStyling(size);
+
+ return (
+
+ {prependIcon && (
+
+ {React.cloneElement(prependIcon, { "stroke-width": 2 })}
+
+ )}
+ {children}
+ {appendIcon && (
+
+ {React.cloneElement(appendIcon, { "stroke-width": 2 })}
+
+ )}
+
+ );
+ }
+);
+
+Button.displayName = "plane-ui-button";
+
+export { Button };
diff --git a/packages/ui/src/buttons/helper.tsx b/packages/ui/src/buttons/helper.tsx
new file mode 100644
index 00000000000..5a0b6a99225
--- /dev/null
+++ b/packages/ui/src/buttons/helper.tsx
@@ -0,0 +1,115 @@
+export type TButtonVariant = "primary" | "secondary" | "danger";
+
+export type TButtonSizes = "sm" | "md" | "lg";
+
+export interface IButtonStyling {
+ [key: string]: {
+ default: string;
+ hover: string;
+ pressed: string;
+ disabled: string;
+ };
+}
+
+enum buttonSizeStyling {
+ sm = `px-3 py-1.5 font-medium text-xs rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`,
+ md = `px-4 py-1.5 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`,
+ lg = `px-5 py-2 font-medium text-base rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`,
+}
+
+enum buttonIconStyling {
+ sm = "h-3 w-3 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0",
+ md = "h-3.5 w-3.5 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0",
+ lg = "h-4 w-4 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0",
+}
+
+export const buttonStyling: IButtonStyling = {
+ primary: {
+ default: `text-white bg-custom-primary-100`,
+ hover: `hover:bg-custom-primary-200`,
+ pressed: `focus:text-custom-brand-40 focus:bg-custom-primary-200`,
+ disabled: `cursor-not-allowed !bg-custom-primary-60 hover:bg-custom-primary-60`,
+ },
+ "accent-primary": {
+ default: `bg-custom-primary-10 text-custom-primary-100`,
+ hover: `hover:bg-custom-primary-20 hover:text-custom-primary-200`,
+ pressed: `focus:bg-custom-primary-20`,
+ disabled: `cursor-not-allowed !text-custom-primary-60`,
+ },
+ "outline-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100 border border-custom-primary-100`,
+ hover: `hover:border-custom-primary-80 hover:bg-custom-primary-10`,
+ pressed: `focus:text-custom-primary-80 focus:bg-custom-primary-10 focus:border-custom-primary-80`,
+ disabled: `cursor-not-allowed !text-custom-primary-60 !border-custom-primary-60 `,
+ },
+ "neutral-primary": {
+ default: `text-custom-text-200 bg-custom-background-100 border border-custom-border-200`,
+ hover: `hover:bg-custom-background-90`,
+ pressed: `focus:text-custom-text-300 focus:bg-custom-background-90`,
+ disabled: `cursor-not-allowed !text-custom-text-400`,
+ },
+ "link-primary": {
+ default: `text-custom-primary-100 bg-custom-background-100`,
+ hover: `hover:text-custom-primary-200`,
+ pressed: `focus:text-custom-primary-80 `,
+ disabled: `cursor-not-allowed !text-custom-primary-60`,
+ },
+
+ danger: {
+ default: `text-white bg-red-500`,
+ hover: ` hover:bg-red-600`,
+ pressed: `focus:text-red-200 focus:bg-red-600`,
+ disabled: `cursor-not-allowed !bg-red-300`,
+ },
+ "accent-danger": {
+ default: `text-red-500 bg-red-50`,
+ hover: `hover:text-red-600 hover:bg-red-100`,
+ pressed: `focus:text-red-500 focus:bg-red-100`,
+ disabled: `cursor-not-allowed !text-red-300`,
+ },
+ "outline-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-500`,
+ hover: `hover:text-red-400 hover:border-red-400`,
+ pressed: `focus:text-red-400 focus:border-red-400`,
+ disabled: `cursor-not-allowed !text-red-300 !border-red-300`,
+ },
+ "link-danger": {
+ default: `text-red-500 bg-custom-background-100`,
+ hover: `hover:text-red-400`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`,
+ },
+ "tertiary-danger": {
+ default: `text-red-500 bg-custom-background-100 border border-red-200`,
+ hover: `hover:bg-red-50 hover:border-red-300`,
+ pressed: `focus:text-red-400`,
+ disabled: `cursor-not-allowed !text-red-300`,
+ },
+};
+
+export const getButtonStyling = (
+ variant: TButtonVariant,
+ size: TButtonSizes,
+ disabled: boolean = false
+): string => {
+ let _variant: string = ``;
+ const currentVariant = buttonStyling[variant];
+
+ _variant = `${currentVariant.default} ${
+ disabled ? currentVariant.disabled : currentVariant.hover
+ } ${currentVariant.pressed}`;
+
+ let _size: string = ``;
+ if (size === "sm") _size = buttonSizeStyling["sm"];
+ if (size === "md") _size = buttonSizeStyling["md"];
+ if (size === "lg") _size = buttonSizeStyling["lg"];
+ return `${_variant} ${_size}`;
+};
+
+export const getIconStyling = (size: TButtonSizes): string => {
+ let icon: string = ``;
+ if (size === "sm") icon = buttonIconStyling["sm"];
+ if (size === "md") icon = buttonIconStyling["md"];
+ if (size === "lg") icon = buttonIconStyling["lg"];
+ return icon;
+};
diff --git a/packages/ui/src/buttons/index.tsx b/packages/ui/src/buttons/index.tsx
deleted file mode 100644
index 59506c2d42c..00000000000
--- a/packages/ui/src/buttons/index.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import * as React from "react";
-import clsx from "clsx";
-
-export interface ButtonProps
- extends React.ButtonHTMLAttributes {
- variant?: "primary" | "secondary" | "danger";
- children: React.ReactNode;
- className?: string;
- loading?: boolean;
- size?: "sm" | "md" | "lg";
- outline?: boolean;
-}
-
-const Button = React.forwardRef(
- (props, ref) => {
- const {
- children,
- className = "",
- type = "button",
- disabled = false,
- loading = false,
- size = "sm",
- outline = false,
- variant = "primary",
- ...rest
- } = props;
-
- const buttonStyleClasses = {
- primary: {
- variantStyle:
- "text-white bg-custom-primary hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle:
- "text-custom-primary hover:bg-custom-primary hover:text-white",
- variantBorderStyles: "border-custom-primary",
- },
- secondary: {
- variantStyle:
- "bg-custom-background-100 hover:border-opacity-70 hover:bg-opacity-70",
- variantOutlineStyle: "hover:bg-custom-background-80",
- variantBorderStyles: "border-custom-border-200",
- },
- danger: {
- variantStyle:
- "text-white bg-red-500 hover:border-opacity-90 hover:bg-opacity-90",
- variantOutlineStyle: " text-red-500 hover:bg-red-500 hover:text-white",
- variantBorderStyles: "border-red-500",
- },
- };
-
- return (
-
- {children}
-
- );
- }
-);
-
-Button.displayName = "plane-ui-button";
-
-export { Button };
diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx
index 3833a91fa31..53f00fb3b04 100644
--- a/packages/ui/src/index.tsx
+++ b/packages/ui/src/index.tsx
@@ -1,3 +1,3 @@
-export * from "./buttons";
+export * from "./buttons/button";
export * from "./form-fields";
export * from "./progress";
From 8e379c45409a04d07c35e509aea6f333ca7a31d4 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Tue, 10 Oct 2023 20:30:09 +0530
Subject: [PATCH 05/15] fix: button type fix
---
packages/ui/dist/index.d.ts | 4 +++-
packages/ui/dist/index.js | 2 +-
packages/ui/dist/index.mjs | 2 +-
packages/ui/src/buttons/button.tsx | 6 +++---
packages/ui/src/buttons/helper.tsx | 12 +++++++++++-
5 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index 967d23ee4d6..5bf2067599d 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -1,8 +1,10 @@
import * as React from 'react';
import { FC } from 'react';
+declare type TButtonVariant = "primary" | "accent-primary" | "outline-primary" | "neutral-primary" | "link-primary" | "danger" | "accent-danger" | "outline-danger" | "link-danger" | "tertiary-danger";
+
interface ButtonProps extends React.ButtonHTMLAttributes {
- variant?: "primary" | "secondary" | "danger";
+ variant?: TButtonVariant;
size?: "sm" | "md" | "lg";
loading?: boolean;
disabled?: boolean;
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index 091476eb050..bbd5542d9e0 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -129,7 +129,7 @@ var Button = React.forwardRef(
(props, ref) => {
const {
variant = "primary",
- size = "sm",
+ size = "md",
type = "button",
loading = false,
disabled = false,
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 011b00f84d5..451153738f2 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -93,7 +93,7 @@ var Button = React.forwardRef(
(props, ref) => {
const {
variant = "primary",
- size = "sm",
+ size = "md",
type = "button",
loading = false,
disabled = false,
diff --git a/packages/ui/src/buttons/button.tsx b/packages/ui/src/buttons/button.tsx
index b5da4604b2f..e301b625ef0 100644
--- a/packages/ui/src/buttons/button.tsx
+++ b/packages/ui/src/buttons/button.tsx
@@ -1,10 +1,10 @@
import * as React from "react";
-import { getIconStyling, getButtonStyling } from "./helper";
+import { getIconStyling, getButtonStyling, TButtonVariant } from "./helper";
export interface ButtonProps
extends React.ButtonHTMLAttributes {
- variant?: "primary" | "secondary" | "danger";
+ variant?: TButtonVariant;
size?: "sm" | "md" | "lg";
loading?: boolean;
disabled?: boolean;
@@ -17,7 +17,7 @@ const Button = React.forwardRef(
(props, ref) => {
const {
variant = "primary",
- size = "sm",
+ size = "md",
type = "button",
loading = false,
disabled = false,
diff --git a/packages/ui/src/buttons/helper.tsx b/packages/ui/src/buttons/helper.tsx
index 5a0b6a99225..1eaee51340c 100644
--- a/packages/ui/src/buttons/helper.tsx
+++ b/packages/ui/src/buttons/helper.tsx
@@ -1,4 +1,14 @@
-export type TButtonVariant = "primary" | "secondary" | "danger";
+export type TButtonVariant =
+ | "primary"
+ | "accent-primary"
+ | "outline-primary"
+ | "neutral-primary"
+ | "link-primary"
+ | "danger"
+ | "accent-danger"
+ | "outline-danger"
+ | "link-danger"
+ | "tertiary-danger";
export type TButtonSizes = "sm" | "md" | "lg";
From fddea280b0917fc13a925f176247fb9ba8dc5f33 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Tue, 10 Oct 2023 23:30:17 +0530
Subject: [PATCH 06/15] chore: secondary button revamp
---
.../account/email-reset-password-form.tsx | 6 +--
.../create-update-analytics-modal.tsx | 2 +-
.../analytics/custom-analytics/sidebar.tsx | 15 +++-----
.../auth-screens/workspace/not-a-member.tsx | 2 +-
.../automation/select-month-modal.tsx | 2 +-
.../core/filters/date-filter-modal.tsx | 2 +-
web/components/core/image-picker-popover.tsx | 3 +-
.../core/modals/bulk-delete-issues-modal.tsx | 2 +-
.../modals/existing-issues-list-modal.tsx | 2 +-
.../core/modals/gpt-assistant-modal.tsx | 2 +-
.../core/modals/image-upload-modal.tsx | 2 +-
web/components/core/modals/link-modal.tsx | 2 +-
web/components/core/views/issues-view.tsx | 7 +---
web/components/cycles/delete-cycle-modal.tsx | 2 +-
web/components/cycles/form.tsx | 2 +-
.../create-update-estimate-modal.tsx | 2 +-
.../estimates/delete-estimate-modal.tsx | 2 +-
web/components/estimates/single-estimate.tsx | 6 +--
web/components/exporter/export-modal.tsx | 2 +-
web/components/inbox/accept-issue-modal.tsx | 2 +-
web/components/inbox/decline-issue-modal.tsx | 2 +-
web/components/inbox/delete-issue-modal.tsx | 2 +-
web/components/inbox/inbox-action-headers.tsx | 37 +++++++++----------
web/components/inbox/select-duplicate.tsx | 2 +-
.../integration/delete-import-modal.tsx | 2 +-
.../integration/github/import-confirm.tsx | 2 +-
.../integration/github/import-data.tsx | 2 +-
.../integration/github/import-users.tsx | 2 +-
.../integration/github/repo-details.tsx | 2 +-
web/components/integration/jira/root.tsx | 2 +-
.../attachment/delete-attachment-modal.tsx | 2 +-
web/components/issues/comment/add-comment.tsx | 2 +-
.../issues/confirm-issue-discard.tsx | 4 +-
.../issues/delete-draft-issue-modal.tsx | 2 +-
web/components/issues/delete-issue-modal.tsx | 2 +-
web/components/issues/draft-issue-form.tsx | 4 +-
web/components/issues/form.tsx | 2 +-
web/components/labels/create-label-modal.tsx | 2 +-
.../labels/create-update-label-inline.tsx | 2 +-
web/components/labels/delete-label-modal.tsx | 2 +-
.../modules/delete-module-modal.tsx | 2 +-
web/components/modules/form.tsx | 2 +-
.../select-snooze-till-modal.tsx | 2 +-
web/components/onboarding/invite-members.tsx | 2 +-
web/components/onboarding/join-workspaces.tsx | 2 +-
web/components/onboarding/tour/root.tsx | 2 +-
web/components/onboarding/workspace.tsx | 2 +-
.../pages/create-update-block-inline.tsx | 2 +-
web/components/pages/delete-page-modal.tsx | 2 +-
web/components/pages/page-form.tsx | 2 +-
.../project/confirm-project-member-remove.tsx | 2 +-
.../project/create-project-modal.tsx | 2 +-
.../project/delete-project-modal.tsx | 2 +-
web/components/project/join-project-modal.tsx | 2 +-
.../project/leave-project-modal.tsx | 2 +-
.../project/publish-project/modal.tsx | 2 +-
.../project/send-project-invitation-modal.tsx | 2 +-
.../project/settings/single-label.tsx | 2 +-
web/components/states/create-state-modal.tsx | 2 +-
.../states/create-update-state-inline.tsx | 2 +-
web/components/states/delete-state-modal.tsx | 2 +-
web/components/views/delete-view-modal.tsx | 2 +-
web/components/views/form.tsx | 2 +-
web/components/web-view/issue-link-list.tsx | 11 +-----
.../web-view/issue-properties-detail.tsx | 8 ++--
.../confirm-workspace-member-remove.tsx | 2 +-
.../workspace/delete-workspace-modal.tsx | 2 +-
.../send-workspace-invitation-modal.tsx | 2 +-
.../views/delete-workspace-view-modal.tsx | 2 +-
web/components/workspace/views/form.tsx | 2 +-
web/layouts/auth-layout/workspace-wrapper.tsx | 2 +-
web/pages/404.tsx | 2 +-
.../projects/[projectId]/cycles/[cycleId].tsx | 7 +---
.../[projectId]/settings/estimates.tsx | 2 +-
.../[workspaceSlug]/settings/billing.tsx | 4 +-
web/pages/_error.tsx | 2 +-
web/pages/invitations/index.tsx | 2 +-
77 files changed, 103 insertions(+), 139 deletions(-)
diff --git a/web/components/account/email-reset-password-form.tsx b/web/components/account/email-reset-password-form.tsx
index 43f5389b1f4..947f045d7f4 100644
--- a/web/components/account/email-reset-password-form.tsx
+++ b/web/components/account/email-reset-password-form.tsx
@@ -91,11 +91,7 @@ export const EmailResetPasswordForm: React.FC = (props) => {
/>
-
setIsResettingPassword(false)}
- >
+ setIsResettingPassword(false)}>
Go Back
diff --git a/web/components/analytics/custom-analytics/create-update-analytics-modal.tsx b/web/components/analytics/custom-analytics/create-update-analytics-modal.tsx
index 30a8eb060d6..508f5722ec0 100644
--- a/web/components/analytics/custom-analytics/create-update-analytics-modal.tsx
+++ b/web/components/analytics/custom-analytics/create-update-analytics-modal.tsx
@@ -156,7 +156,7 @@ export const CreateUpdateAnalyticsModal: React.FC = ({ isOpen, handleClos
-
+
Cancel
diff --git a/web/components/analytics/custom-analytics/sidebar.tsx b/web/components/analytics/custom-analytics/sidebar.tsx
index 12809617251..6c6dbb7a5be 100644
--- a/web/components/analytics/custom-analytics/sidebar.tsx
+++ b/web/components/analytics/custom-analytics/sidebar.tsx
@@ -329,23 +329,18 @@ export const AnalyticsSidebar: React.FC = ({ analytics, params, fullScree
}
onClick={() => {
if (!workspaceSlug) return;
-
mutate(ANALYTICS(workspaceSlug.toString(), params));
}}
>
-
+ Refresh
-
+
+ Export as CSV
diff --git a/web/components/auth-screens/workspace/not-a-member.tsx b/web/components/auth-screens/workspace/not-a-member.tsx
index 852b2fdc31e..6737115a0f7 100644
--- a/web/components/auth-screens/workspace/not-a-member.tsx
+++ b/web/components/auth-screens/workspace/not-a-member.tsx
@@ -19,7 +19,7 @@ export const NotAWorkspaceMember = () => (
- Check pending invites
+ Check pending invites
diff --git a/web/components/automation/select-month-modal.tsx b/web/components/automation/select-month-modal.tsx
index a1fbfb83284..0fc42361a44 100644
--- a/web/components/automation/select-month-modal.tsx
+++ b/web/components/automation/select-month-modal.tsx
@@ -147,7 +147,7 @@ export const SelectMonthModal: React.FC
= ({ type, initialValues, isOpen,
-
+
Cancel
diff --git a/web/components/core/filters/date-filter-modal.tsx b/web/components/core/filters/date-filter-modal.tsx
index dd728de7828..561fa881ca0 100644
--- a/web/components/core/filters/date-filter-modal.tsx
+++ b/web/components/core/filters/date-filter-modal.tsx
@@ -127,7 +127,7 @@ export const DateFilterModal: React.FC = ({ title, handleClose, isOpen, o
)}
-
+
Cancel
diff --git a/web/components/core/image-picker-popover.tsx b/web/components/core/image-picker-popover.tsx
index f34223216d9..6f69e244e96 100644
--- a/web/components/core/image-picker-popover.tsx
+++ b/web/components/core/image-picker-popover.tsx
@@ -317,8 +317,7 @@ export const ImagePickerPopover: React.FC = ({ label, value, control, onC
{
setIsOpen(false);
setImage(null);
diff --git a/web/components/core/modals/bulk-delete-issues-modal.tsx b/web/components/core/modals/bulk-delete-issues-modal.tsx
index 3f4cb049e43..7ecbb3a13b0 100644
--- a/web/components/core/modals/bulk-delete-issues-modal.tsx
+++ b/web/components/core/modals/bulk-delete-issues-modal.tsx
@@ -240,7 +240,7 @@ export const BulkDeleteIssuesModal: React.FC = ({ isOpen, setIsOpen, user
{filteredIssues.length > 0 && (
-
+
Cancel
diff --git a/web/components/core/modals/existing-issues-list-modal.tsx b/web/components/core/modals/existing-issues-list-modal.tsx
index 3657fbbafa6..f6644e84e9b 100644
--- a/web/components/core/modals/existing-issues-list-modal.tsx
+++ b/web/components/core/modals/existing-issues-list-modal.tsx
@@ -293,7 +293,7 @@ export const ExistingIssuesListModal: React.FC = ({
{selectedIssues.length > 0 && (
-
+
Cancel
diff --git a/web/components/core/modals/gpt-assistant-modal.tsx b/web/components/core/modals/gpt-assistant-modal.tsx
index 08566acf67d..3da40b5c5d7 100644
--- a/web/components/core/modals/gpt-assistant-modal.tsx
+++ b/web/components/core/modals/gpt-assistant-modal.tsx
@@ -201,7 +201,7 @@ export const GptAssistantModal: React.FC = ({
)}
-
+
Close
diff --git a/web/components/core/modals/image-upload-modal.tsx b/web/components/core/modals/image-upload-modal.tsx
index 64974b2fa79..a83edfb79bd 100644
--- a/web/components/core/modals/image-upload-modal.tsx
+++ b/web/components/core/modals/image-upload-modal.tsx
@@ -185,7 +185,7 @@ export const ImageUploadModal: React.FC = ({
-
+
Cancel
diff --git a/web/components/core/modals/link-modal.tsx b/web/components/core/modals/link-modal.tsx
index ab1d035e1f4..2e8531bd678 100644
--- a/web/components/core/modals/link-modal.tsx
+++ b/web/components/core/modals/link-modal.tsx
@@ -148,7 +148,7 @@ export const LinkModal: React.FC = ({ isOpen, handleClose, createIssueLin
-
+
Cancel
diff --git a/web/components/core/views/issues-view.tsx b/web/components/core/views/issues-view.tsx
index f461f4d5c84..3df93b3b74d 100644
--- a/web/components/core/views/issues-view.tsx
+++ b/web/components/core/views/issues-view.tsx
@@ -557,12 +557,7 @@ export const IssuesView: React.FC = ({ openIssuesListModal, disableUserAc
: undefined,
secondaryButton:
cycleId || moduleId ? (
- {})}
- >
-
+ } onClick={openIssuesListModal ?? (() => {})}>
Add an existing issue
) : null,
diff --git a/web/components/cycles/delete-cycle-modal.tsx b/web/components/cycles/delete-cycle-modal.tsx
index 9b19da3776a..c2e5085b2cb 100644
--- a/web/components/cycles/delete-cycle-modal.tsx
+++ b/web/components/cycles/delete-cycle-modal.tsx
@@ -156,7 +156,7 @@ export const DeleteCycleModal: React.FC = ({ isOpen,
-
+
Cancel
diff --git a/web/components/cycles/form.tsx b/web/components/cycles/form.tsx
index 74f122cd188..c4188ea00a3 100644
--- a/web/components/cycles/form.tsx
+++ b/web/components/cycles/form.tsx
@@ -114,7 +114,7 @@ export const CycleForm: React.FC = (props) => {
-
+
Cancel
diff --git a/web/components/estimates/create-update-estimate-modal.tsx b/web/components/estimates/create-update-estimate-modal.tsx
index a317d8015e8..5cf9140d761 100644
--- a/web/components/estimates/create-update-estimate-modal.tsx
+++ b/web/components/estimates/create-update-estimate-modal.tsx
@@ -436,7 +436,7 @@ export const CreateUpdateEstimateModal: React.FC = ({ handleClose, data,
-
+
Cancel
diff --git a/web/components/estimates/delete-estimate-modal.tsx b/web/components/estimates/delete-estimate-modal.tsx
index 557e70fede3..ce5eb9db5e3 100644
--- a/web/components/estimates/delete-estimate-modal.tsx
+++ b/web/components/estimates/delete-estimate-modal.tsx
@@ -74,7 +74,7 @@ export const DeleteEstimateModal: React.FC = ({ isOpen, handleClose, data
-
+
Cancel
= ({ user, estimate, editEstimate,
{projectDetails?.estimate !== estimate.id && estimate.points.length > 0 && (
-
+
Use
)}
diff --git a/web/components/exporter/export-modal.tsx b/web/components/exporter/export-modal.tsx
index ebb72366b3c..9b4d35b2c80 100644
--- a/web/components/exporter/export-modal.tsx
+++ b/web/components/exporter/export-modal.tsx
@@ -144,7 +144,7 @@ export const Exporter: React.FC = ({ isOpen, handleClose, user, provider,
Export the data into separate files
-
+
Cancel
= ({ isOpen, handleClose, data, o
-
+
Cancel
diff --git a/web/components/inbox/decline-issue-modal.tsx b/web/components/inbox/decline-issue-modal.tsx
index 118824bd3d1..48786da556b 100644
--- a/web/components/inbox/decline-issue-modal.tsx
+++ b/web/components/inbox/decline-issue-modal.tsx
@@ -76,7 +76,7 @@ export const DeclineIssueModal: React.FC = ({ isOpen, handleClose, data,
-
+
Cancel
diff --git a/web/components/inbox/delete-issue-modal.tsx b/web/components/inbox/delete-issue-modal.tsx
index 232fbdad1e0..fc4f7fd0faf 100644
--- a/web/components/inbox/delete-issue-modal.tsx
+++ b/web/components/inbox/delete-issue-modal.tsx
@@ -131,7 +131,7 @@ export const DeleteIssueModal: React.FC = ({ isOpen, handleClose, data })
-
+
Cancel
diff --git a/web/components/inbox/inbox-action-headers.tsx b/web/components/inbox/inbox-action-headers.tsx
index 7bab9c227a3..42450768bfc 100644
--- a/web/components/inbox/inbox-action-headers.tsx
+++ b/web/components/inbox/inbox-action-headers.tsx
@@ -196,9 +196,12 @@ export const InboxActionHeader = () => {
-
-
- Snooze
+ }
+ size="sm"
+ >
+ Snooze
@@ -236,52 +239,48 @@ export const InboxActionHeader = () => {
{isAllowed && issueStatus === -2 && (
}
onClick={() => setSelectDuplicateIssue(true)}
>
-
- Mark as duplicate
+ Mark as duplicate
)}
{isAllowed && (issueStatus === 0 || issueStatus === -2) && (
}
onClick={() => setAcceptIssueModal(true)}
>
-
- Accept
+ Accept
)}
{isAllowed && issueStatus === -2 && (
}
onClick={() => setDeclineIssueModal(true)}
>
-
- Decline
+ Decline
)}
{(isAllowed || user?.id === issue?.created_by) && (
}
onClick={() => setDeleteIssueModal(true)}
>
-
- Delete
+ Delete
)}
diff --git a/web/components/inbox/select-duplicate.tsx b/web/components/inbox/select-duplicate.tsx
index 7f066a88a51..6bf68341247 100644
--- a/web/components/inbox/select-duplicate.tsx
+++ b/web/components/inbox/select-duplicate.tsx
@@ -170,7 +170,7 @@ export const SelectDuplicateInboxIssueModal: React.FC = (props) => {
{filteredIssues.length > 0 && (
-
+
Cancel
diff --git a/web/components/integration/delete-import-modal.tsx b/web/components/integration/delete-import-modal.tsx
index 855b9aac84e..b4de8b3871c 100644
--- a/web/components/integration/delete-import-modal.tsx
+++ b/web/components/integration/delete-import-modal.tsx
@@ -123,7 +123,7 @@ export const DeleteImportModal: React.FC = ({ isOpen, handleClose, data,
/>
-
+
Cancel
= ({ handleStepChange, watch }) => (
to complete the process.
-
handleStepChange("import-users")}>
+ handleStepChange("import-users")}>
Back
diff --git a/web/components/integration/github/import-data.tsx b/web/components/integration/github/import-data.tsx
index f7dce7a8688..380bcfa5248 100644
--- a/web/components/integration/github/import-data.tsx
+++ b/web/components/integration/github/import-data.tsx
@@ -108,7 +108,7 @@ export const GithubImportData: FC = ({ handleStepChange, integration, con
- handleStepChange("import-configure")}>
+ handleStepChange("import-configure")}>
Back
= ({ handleStepChange, users, setUsers
-
handleStepChange("repo-details")}>
+ handleStepChange("repo-details")}>
Back
handleStepChange("import-confirm")} disabled={isInvalid}>
diff --git a/web/components/integration/github/repo-details.tsx b/web/components/integration/github/repo-details.tsx
index 8f1a41b2da8..a59197750a6 100644
--- a/web/components/integration/github/repo-details.tsx
+++ b/web/components/integration/github/repo-details.tsx
@@ -86,7 +86,7 @@ export const GithubRepoDetails: FC = ({ selectedRepo, handleStepChange, s
)}
-
handleStepChange("import-data")}>
+ handleStepChange("import-data")}>
Back
= ({ user }) => {
{currentStep?.state !== "import-configure" && (
{
const currentElementIndex = integrationWorkflowData.findIndex(
(i) => i?.key === currentStep?.state
diff --git a/web/components/issues/attachment/delete-attachment-modal.tsx b/web/components/issues/attachment/delete-attachment-modal.tsx
index 908d59e047d..3dead2d39a6 100644
--- a/web/components/issues/attachment/delete-attachment-modal.tsx
+++ b/web/components/issues/attachment/delete-attachment-modal.tsx
@@ -106,7 +106,7 @@ export const DeleteAttachmentModal: React.FC = ({ isOpen, setIsOpen, data
-
+
Cancel
= ({ disabled = false, onSubmit, showAc
/>
-
+
{isSubmitting ? "Adding..." : "Comment"}
diff --git a/web/components/issues/confirm-issue-discard.tsx b/web/components/issues/confirm-issue-discard.tsx
index 24ccc3f2b10..98b4eaf4806 100644
--- a/web/components/issues/confirm-issue-discard.tsx
+++ b/web/components/issues/confirm-issue-discard.tsx
@@ -69,12 +69,12 @@ export const ConfirmIssueDiscard: React.FC = (props) => {
-
+
Discard
-
+
Cancel
diff --git a/web/components/issues/delete-draft-issue-modal.tsx b/web/components/issues/delete-draft-issue-modal.tsx
index e0f84153969..1b54f2c0972 100644
--- a/web/components/issues/delete-draft-issue-modal.tsx
+++ b/web/components/issues/delete-draft-issue-modal.tsx
@@ -129,7 +129,7 @@ export const DeleteDraftIssueModal: React.FC = (props) => {
-
+
Cancel
diff --git a/web/components/issues/delete-issue-modal.tsx b/web/components/issues/delete-issue-modal.tsx
index 605ec985c15..0dcf08f5ee2 100644
--- a/web/components/issues/delete-issue-modal.tsx
+++ b/web/components/issues/delete-issue-modal.tsx
@@ -182,7 +182,7 @@ export const DeleteIssueModal: React.FC = ({
-
+
Cancel
diff --git a/web/components/issues/draft-issue-form.tsx b/web/components/issues/draft-issue-form.tsx
index 43cda61bf57..5c384c2b5f0 100644
--- a/web/components/issues/draft-issue-form.tsx
+++ b/web/components/issues/draft-issue-form.tsx
@@ -593,11 +593,11 @@ export const DraftIssueForm: FC = (props) => {
{}} size="md" />
-
+
Discard
handleCreateUpdateIssue(formData, data?.id ? "updateDraft" : "createDraft")
diff --git a/web/components/issues/form.tsx b/web/components/issues/form.tsx
index 0eae65a3bb6..f073f1e4b0a 100644
--- a/web/components/issues/form.tsx
+++ b/web/components/issues/form.tsx
@@ -559,7 +559,7 @@ export const IssueForm: FC = (props) => {
{
handleDiscardClose();
}}
diff --git a/web/components/labels/create-label-modal.tsx b/web/components/labels/create-label-modal.tsx
index f04c77d563f..158eefb9499 100644
--- a/web/components/labels/create-label-modal.tsx
+++ b/web/components/labels/create-label-modal.tsx
@@ -187,7 +187,7 @@ export const CreateLabelModal: React.FC = ({ isOpen, projectId, handleClo
-
+
Cancel
diff --git a/web/components/labels/create-update-label-inline.tsx b/web/components/labels/create-update-label-inline.tsx
index 52ea30fc0b3..de87a1341a6 100644
--- a/web/components/labels/create-update-label-inline.tsx
+++ b/web/components/labels/create-update-label-inline.tsx
@@ -185,7 +185,7 @@ export const CreateUpdateLabelInline = forwardRef(functio
)}
/>
- handleClose()}>
+ handleClose()}>
Cancel
{isUpdating ? (
diff --git a/web/components/labels/delete-label-modal.tsx b/web/components/labels/delete-label-modal.tsx
index d074ef5c8d3..99362741ffd 100644
--- a/web/components/labels/delete-label-modal.tsx
+++ b/web/components/labels/delete-label-modal.tsx
@@ -112,7 +112,7 @@ export const DeleteLabelModal: React.FC = ({ isOpen, onClose, data, user
-
+
Cancel
diff --git a/web/components/modules/delete-module-modal.tsx b/web/components/modules/delete-module-modal.tsx
index 354d613cc22..06bf44a4b72 100644
--- a/web/components/modules/delete-module-modal.tsx
+++ b/web/components/modules/delete-module-modal.tsx
@@ -109,7 +109,7 @@ export const DeleteModuleModal: React.FC = ({ isOpen, setIsOpen, data, us
-
+
Cancel
diff --git a/web/components/modules/form.tsx b/web/components/modules/form.tsx
index 2385532c931..fa52e227ff4 100644
--- a/web/components/modules/form.tsx
+++ b/web/components/modules/form.tsx
@@ -153,7 +153,7 @@ export const ModuleForm: React.FC = ({ handleFormSubmit, handleClose, sta
-
+
Cancel
diff --git a/web/components/notifications/select-snooze-till-modal.tsx b/web/components/notifications/select-snooze-till-modal.tsx
index 979b9e96a8f..46600549c45 100644
--- a/web/components/notifications/select-snooze-till-modal.tsx
+++ b/web/components/notifications/select-snooze-till-modal.tsx
@@ -255,7 +255,7 @@ export const SnoozeNotificationModal: React.FC = (props) => {
-
+
Cancel
diff --git a/web/components/onboarding/invite-members.tsx b/web/components/onboarding/invite-members.tsx
index 4f1887e3795..cf05bc9aeb4 100644
--- a/web/components/onboarding/invite-members.tsx
+++ b/web/components/onboarding/invite-members.tsx
@@ -260,7 +260,7 @@ export const InviteMembers: React.FC = (props) => {
{isSubmitting ? "Sending..." : "Send Invite"}
-
+
Skip this step
diff --git a/web/components/onboarding/join-workspaces.tsx b/web/components/onboarding/join-workspaces.tsx
index fa0042a2e18..43828961728 100644
--- a/web/components/onboarding/join-workspaces.tsx
+++ b/web/components/onboarding/join-workspaces.tsx
@@ -124,7 +124,7 @@ export const JoinWorkspaces: React.FC
= ({ finishOnboarding, stepChange,
>
Accept & Join
-
+
Skip for now
diff --git a/web/components/onboarding/tour/root.tsx b/web/components/onboarding/tour/root.tsx
index 5b5038795e8..001e13be8ae 100644
--- a/web/components/onboarding/tour/root.tsx
+++ b/web/components/onboarding/tour/root.tsx
@@ -138,7 +138,7 @@ export const TourRoot: React.FC = ({ onComplete }) => {
{currentStep?.prevStep && (
-
setStep(currentStep.prevStep ?? "welcome")}>
+ setStep(currentStep.prevStep ?? "welcome")}>
Back
)}
diff --git a/web/components/onboarding/workspace.tsx b/web/components/onboarding/workspace.tsx
index d595a6f7b97..e433268b7a6 100644
--- a/web/components/onboarding/workspace.tsx
+++ b/web/components/onboarding/workspace.tsx
@@ -55,7 +55,7 @@ export const Workspace: React.FC = ({ finishOnboarding, stepChange, updat
}}
secondaryButton={
workspaces ? (
-
+
{workspaces.length > 0 ? "Skip & continue" : "Back"}
) : undefined
diff --git a/web/components/pages/create-update-block-inline.tsx b/web/components/pages/create-update-block-inline.tsx
index 83b00f03015..3639b48191e 100644
--- a/web/components/pages/create-update-block-inline.tsx
+++ b/web/components/pages/create-update-block-inline.tsx
@@ -354,7 +354,7 @@ export const CreateUpdateBlockInline: React.FC = ({
-
+
Cancel
diff --git a/web/components/pages/delete-page-modal.tsx b/web/components/pages/delete-page-modal.tsx
index 4e7a9cc850a..9b2d5d4538b 100644
--- a/web/components/pages/delete-page-modal.tsx
+++ b/web/components/pages/delete-page-modal.tsx
@@ -128,7 +128,7 @@ export const DeletePageModal: React.FC = ({ isOpen, s
-
+
Cancel
diff --git a/web/components/pages/page-form.tsx b/web/components/pages/page-form.tsx
index 18a9f8f9ee6..160a0f4f0db 100644
--- a/web/components/pages/page-form.tsx
+++ b/web/components/pages/page-form.tsx
@@ -79,7 +79,7 @@ export const PageForm: React.FC = ({ handleFormSubmit, handleClose, statu
-
+
Cancel
diff --git a/web/components/project/confirm-project-member-remove.tsx b/web/components/project/confirm-project-member-remove.tsx
index f8e477453ce..772a3045e84 100644
--- a/web/components/project/confirm-project-member-remove.tsx
+++ b/web/components/project/confirm-project-member-remove.tsx
@@ -74,7 +74,7 @@ const ConfirmProjectMemberRemove: React.FC = ({ isOpen, onClose, data, ha
-
+
Cancel
diff --git a/web/components/project/create-project-modal.tsx b/web/components/project/create-project-modal.tsx
index ca2f2fc3568..d80c25c576f 100644
--- a/web/components/project/create-project-modal.tsx
+++ b/web/components/project/create-project-modal.tsx
@@ -411,7 +411,7 @@ export const CreateProjectModal: React.FC = (props) => {
-
+
Cancel
diff --git a/web/components/project/delete-project-modal.tsx b/web/components/project/delete-project-modal.tsx
index 036abc87d9c..d2cfdc5b111 100644
--- a/web/components/project/delete-project-modal.tsx
+++ b/web/components/project/delete-project-modal.tsx
@@ -160,7 +160,7 @@ export const DeleteProjectModal: React.FC = (props) => {
/>
-
+
Cancel
diff --git a/web/components/project/join-project-modal.tsx b/web/components/project/join-project-modal.tsx
index f4276b2d447..ef6874db928 100644
--- a/web/components/project/join-project-modal.tsx
+++ b/web/components/project/join-project-modal.tsx
@@ -73,7 +73,7 @@ export const JoinProjectModal: React.FC = (props) => {
-
+
Cancel
diff --git a/web/components/project/leave-project-modal.tsx b/web/components/project/leave-project-modal.tsx
index b313c5a1a71..584ad9d5b78 100644
--- a/web/components/project/leave-project-modal.tsx
+++ b/web/components/project/leave-project-modal.tsx
@@ -197,7 +197,7 @@ export const LeaveProjectModal: FC = observer((props) => {
/>
-
+
Cancel
diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx
index 4ea215d759a..74f9a1131e9 100644
--- a/web/components/project/publish-project/modal.tsx
+++ b/web/components/project/publish-project/modal.tsx
@@ -477,7 +477,7 @@ export const PublishProjectModal: React.FC = observer(() => {
{!projectPublish.fetchSettingsLoader && (
-
+
Cancel
{watch("id") ? (
diff --git a/web/components/project/send-project-invitation-modal.tsx b/web/components/project/send-project-invitation-modal.tsx
index 395a3c74fe9..1ffb2bf7cbf 100644
--- a/web/components/project/send-project-invitation-modal.tsx
+++ b/web/components/project/send-project-invitation-modal.tsx
@@ -285,7 +285,7 @@ const SendProjectInvitationModal: React.FC = (props) => {
Add more
-
+
Cancel
diff --git a/web/components/project/settings/single-label.tsx b/web/components/project/settings/single-label.tsx
index b7acc272c8a..6b0c58afbca 100644
--- a/web/components/project/settings/single-label.tsx
+++ b/web/components/project/settings/single-label.tsx
@@ -123,7 +123,7 @@ const SingleLabel: React.FC = ({ label, issueLabels, editLabel, handleLab
)}
/>
-
setNewLabelForm(false)}>
+ setNewLabelForm(false)}>
Cancel
diff --git a/web/components/states/create-state-modal.tsx b/web/components/states/create-state-modal.tsx
index 355d68c9982..de109b9987e 100644
--- a/web/components/states/create-state-modal.tsx
+++ b/web/components/states/create-state-modal.tsx
@@ -256,7 +256,7 @@ export const CreateStateModal: React.FC = ({ isOpen, projectId, handleClo
-
+
Cancel
diff --git a/web/components/states/create-update-state-inline.tsx b/web/components/states/create-update-state-inline.tsx
index e30c2e803cb..46d8a068c43 100644
--- a/web/components/states/create-update-state-inline.tsx
+++ b/web/components/states/create-update-state-inline.tsx
@@ -273,7 +273,7 @@ export const CreateUpdateStateInline: React.FC = ({ data, onClose, select
/>
)}
/>
-
+
Cancel
diff --git a/web/components/states/delete-state-modal.tsx b/web/components/states/delete-state-modal.tsx
index 9e428d0be06..7d089319351 100644
--- a/web/components/states/delete-state-modal.tsx
+++ b/web/components/states/delete-state-modal.tsx
@@ -129,7 +129,7 @@ export const DeleteStateModal: React.FC = ({ isOpen, onClose, data, user
-
+
Cancel
diff --git a/web/components/views/delete-view-modal.tsx b/web/components/views/delete-view-modal.tsx
index 8ed64487af8..31bdd7db7e9 100644
--- a/web/components/views/delete-view-modal.tsx
+++ b/web/components/views/delete-view-modal.tsx
@@ -115,7 +115,7 @@ export const DeleteViewModal: React.FC = ({ isOpen, data, setIsOpen, user
-
+
Cancel
diff --git a/web/components/views/form.tsx b/web/components/views/form.tsx
index 8ee414b7f58..07877355f95 100644
--- a/web/components/views/form.tsx
+++ b/web/components/views/form.tsx
@@ -202,7 +202,7 @@ export const ViewForm: React.FC = ({ handleFormSubmit, handleClose, statu
-
+
Cancel
diff --git a/web/components/web-view/issue-link-list.tsx b/web/components/web-view/issue-link-list.tsx
index 767e2a55bb8..746ea7eb6c6 100644
--- a/web/components/web-view/issue-link-list.tsx
+++ b/web/components/web-view/issue-link-list.tsx
@@ -123,15 +123,8 @@ export const IssueLinks: React.FC = (props) => {
)}
))}
- setIsOpen(true)}
- className="w-full !py-2 text-custom-text-300 !text-base flex items-center justify-center"
- >
-
- Add
+ } disabled={!allowed} onClick={() => setIsOpen(true)}>
+ Add
diff --git a/web/components/web-view/issue-properties-detail.tsx b/web/components/web-view/issue-properties-detail.tsx
index ebfd607f78c..27457333b6e 100644
--- a/web/components/web-view/issue-properties-detail.tsx
+++ b/web/components/web-view/issue-properties-detail.tsx
@@ -393,13 +393,11 @@ export const IssuePropertiesDetail: React.FC = (props) => {
)}
}
onClick={() => setIsViewAllOpen((prev) => !prev)}
- className="w-full flex justify-center items-center gap-1 !py-2"
>
- {isViewAllOpen ? "View less" : "View all"}
-
+ {isViewAllOpen ? "View less" : "View all"}
diff --git a/web/components/workspace/confirm-workspace-member-remove.tsx b/web/components/workspace/confirm-workspace-member-remove.tsx
index 945e7211356..aa2f4cd4dc1 100644
--- a/web/components/workspace/confirm-workspace-member-remove.tsx
+++ b/web/components/workspace/confirm-workspace-member-remove.tsx
@@ -74,7 +74,7 @@ const ConfirmWorkspaceMemberRemove: React.FC = ({ isOpen, onClose, data,
-
+
Cancel
diff --git a/web/components/workspace/delete-workspace-modal.tsx b/web/components/workspace/delete-workspace-modal.tsx
index e87181a0eb6..3e18d7575e4 100644
--- a/web/components/workspace/delete-workspace-modal.tsx
+++ b/web/components/workspace/delete-workspace-modal.tsx
@@ -178,7 +178,7 @@ export const DeleteWorkspaceModal: React.FC = ({ isOpen, data, onClose, u
-
+
Cancel
diff --git a/web/components/workspace/send-workspace-invitation-modal.tsx b/web/components/workspace/send-workspace-invitation-modal.tsx
index 2655d4dd153..c243fd1c911 100644
--- a/web/components/workspace/send-workspace-invitation-modal.tsx
+++ b/web/components/workspace/send-workspace-invitation-modal.tsx
@@ -235,7 +235,7 @@ const SendWorkspaceInvitationModal: React.FC = (props) => {
Add more
-
+
Cancel
diff --git a/web/components/workspace/views/delete-workspace-view-modal.tsx b/web/components/workspace/views/delete-workspace-view-modal.tsx
index cf4441f0587..0bddaa306c0 100644
--- a/web/components/workspace/views/delete-workspace-view-modal.tsx
+++ b/web/components/workspace/views/delete-workspace-view-modal.tsx
@@ -117,7 +117,7 @@ export const DeleteWorkspaceViewModal: React.FC = ({ isOpen, data, setIsO
-
+
Cancel
diff --git a/web/components/workspace/views/form.tsx b/web/components/workspace/views/form.tsx
index 685d6e47879..a0069fd0dbf 100644
--- a/web/components/workspace/views/form.tsx
+++ b/web/components/workspace/views/form.tsx
@@ -201,7 +201,7 @@ export const WorkspaceViewForm: React.FC = ({ handleFormSubmit, handleClo
-
+
Cancel
diff --git a/web/layouts/auth-layout/workspace-wrapper.tsx b/web/layouts/auth-layout/workspace-wrapper.tsx
index bfd38828178..37d6a399ea3 100644
--- a/web/layouts/auth-layout/workspace-wrapper.tsx
+++ b/web/layouts/auth-layout/workspace-wrapper.tsx
@@ -55,7 +55,7 @@ export const WorkspaceAuthWrapper: FC = (props) => {
- Check pending invites
+ Check pending invites
diff --git a/web/pages/404.tsx b/web/pages/404.tsx
index 328a74178e5..e5f5ee7fd68 100644
--- a/web/pages/404.tsx
+++ b/web/pages/404.tsx
@@ -28,7 +28,7 @@ const PageNotFound: NextPage = () => (
-
+
Go to Home
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
index 0934ac9a6f9..40ab0b4819f 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx
@@ -133,12 +133,7 @@ const SingleCycle: React.FC = () => {
right={
-
setAnalyticsModal(true)}
- className="!py-1.5 font-normal rounded-md text-custom-text-200 hover:text-custom-text-100"
- outline
- >
+ setAnalyticsModal(true)}>
Analytics
{
Add Estimate
{projectDetails?.estimate && (
-
+
Disable Estimates
)}
diff --git a/web/pages/[workspaceSlug]/settings/billing.tsx b/web/pages/[workspaceSlug]/settings/billing.tsx
index be7d4574744..c852fe9e1ce 100644
--- a/web/pages/[workspaceSlug]/settings/billing.tsx
+++ b/web/pages/[workspaceSlug]/settings/billing.tsx
@@ -57,9 +57,7 @@ const BillingSettings: NextPage = () => {
Current plan
You are currently using the free plan
-
- View Plans
-
+ View Plans
diff --git a/web/pages/_error.tsx b/web/pages/_error.tsx
index 7b0659cbad5..c285dd41542 100644
--- a/web/pages/_error.tsx
+++ b/web/pages/_error.tsx
@@ -57,7 +57,7 @@ const CustomErrorComponent = () => {
router.back()}>
Go back
-
+
Sign out
diff --git a/web/pages/invitations/index.tsx b/web/pages/invitations/index.tsx
index d2fbe46f018..0f6c68edcb5 100644
--- a/web/pages/invitations/index.tsx
+++ b/web/pages/invitations/index.tsx
@@ -186,7 +186,7 @@ const OnBoard: NextPage = () => {
-
+
Go Home
From 26743833deefa08e102aa9a01c94fbc4dfcd3fe9 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 01:46:58 +0530
Subject: [PATCH 07/15] chore: button props updated
---
packages/ui/dist/index.d.ts | 1 +
packages/ui/dist/index.js | 3 ++-
packages/ui/dist/index.mjs | 3 ++-
packages/ui/src/buttons/button.tsx | 4 +++-
.../components/accounts/email-reset-password-form.tsx | 11 ++++++-----
web/components/account/email-code-form.tsx | 4 ++--
web/components/account/email-password-form.tsx | 2 +-
web/components/account/email-reset-password-form.tsx | 4 ++--
web/components/account/email-signup-form.tsx | 2 +-
web/components/analytics/custom-analytics/sidebar.tsx | 3 +--
web/components/auth-screens/project/join-project.tsx | 8 ++++++--
web/components/core/filters/date-filter-modal.tsx | 4 ++--
web/components/core/modals/gpt-assistant-modal.tsx | 2 +-
web/components/core/modals/image-upload-modal.tsx | 2 +-
web/components/core/views/issues-view.tsx | 3 +--
web/components/cycles/transfer-issues.tsx | 5 ++---
web/components/exporter/guide.tsx | 4 +---
web/components/exporter/single-export.tsx | 2 +-
web/components/inbox/inbox-action-headers.tsx | 1 -
web/components/integration/guide.tsx | 4 +---
.../integration/single-integration-card.tsx | 2 +-
.../issues/workspace-views/workpace-view-issues.tsx | 3 +--
.../issues/workspace-views/workspace-all-issue.tsx | 2 +-
web/components/project/publish-project/modal.tsx | 1 -
web/components/ui/empty-state.tsx | 3 +--
web/components/web-view/add-comment.tsx | 7 +------
web/components/web-view/create-update-link-form.tsx | 7 +------
.../project-authorization-wrapper.tsx | 4 ++--
.../workspace-authorization-wrapper.tsx | 4 ++--
web/pages/[workspaceSlug]/me/my-issues.tsx | 3 +--
.../projects/[projectId]/cycles/index.tsx | 3 +--
.../projects/[projectId]/inbox/[inboxId].tsx | 3 +--
.../projects/[projectId]/modules/index.tsx | 3 +--
.../projects/[projectId]/pages/index.tsx | 3 +--
.../projects/[projectId]/settings/index.tsx | 7 +------
.../projects/[projectId]/settings/labels.tsx | 2 +-
.../projects/[projectId]/views/[viewId].tsx | 3 +--
.../projects/[projectId]/views/index.tsx | 4 +---
web/pages/[workspaceSlug]/projects/index.tsx | 3 +--
web/pages/[workspaceSlug]/settings/index.tsx | 2 +-
.../[workspaceSlug]/workspace-views/all-issues.tsx | 3 +--
.../[workspaceSlug]/workspace-views/assigned.tsx | 3 +--
web/pages/[workspaceSlug]/workspace-views/created.tsx | 3 +--
web/pages/[workspaceSlug]/workspace-views/index.tsx | 3 +--
web/pages/[workspaceSlug]/workspace-views/issues.tsx | 3 +--
.../[workspaceSlug]/workspace-views/subscribed.tsx | 3 +--
web/pages/accounts/reset-password.tsx | 2 +-
47 files changed, 65 insertions(+), 96 deletions(-)
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index 5bf2067599d..4413cd58797 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -6,6 +6,7 @@ declare type TButtonVariant = "primary" | "accent-primary" | "outline-primary" |
interface ButtonProps extends React.ButtonHTMLAttributes {
variant?: TButtonVariant;
size?: "sm" | "md" | "lg";
+ className?: string;
loading?: boolean;
disabled?: boolean;
appendIcon?: any;
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index bbd5542d9e0..ddf2336f309 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -130,6 +130,7 @@ var Button = React.forwardRef(
const {
variant = "primary",
size = "md",
+ className = "",
type = "button",
loading = false,
disabled = false,
@@ -143,7 +144,7 @@ var Button = React.forwardRef(
return /* @__PURE__ */ React.createElement("button", {
ref,
type,
- className: `${buttonStyle}`,
+ className: `${buttonStyle} ${className}`,
disabled: disabled || loading,
...rest
}, prependIcon && /* @__PURE__ */ React.createElement("div", {
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 451153738f2..3503eb8040f 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -94,6 +94,7 @@ var Button = React.forwardRef(
const {
variant = "primary",
size = "md",
+ className = "",
type = "button",
loading = false,
disabled = false,
@@ -107,7 +108,7 @@ var Button = React.forwardRef(
return /* @__PURE__ */ React.createElement("button", {
ref,
type,
- className: `${buttonStyle}`,
+ className: `${buttonStyle} ${className}`,
disabled: disabled || loading,
...rest
}, prependIcon && /* @__PURE__ */ React.createElement("div", {
diff --git a/packages/ui/src/buttons/button.tsx b/packages/ui/src/buttons/button.tsx
index e301b625ef0..a11ce9e8bf1 100644
--- a/packages/ui/src/buttons/button.tsx
+++ b/packages/ui/src/buttons/button.tsx
@@ -6,6 +6,7 @@ export interface ButtonProps
extends React.ButtonHTMLAttributes {
variant?: TButtonVariant;
size?: "sm" | "md" | "lg";
+ className?: string;
loading?: boolean;
disabled?: boolean;
appendIcon?: any;
@@ -18,6 +19,7 @@ const Button = React.forwardRef(
const {
variant = "primary",
size = "md",
+ className = "",
type = "button",
loading = false,
disabled = false,
@@ -34,7 +36,7 @@ const Button = React.forwardRef(
diff --git a/space/components/accounts/email-reset-password-form.tsx b/space/components/accounts/email-reset-password-form.tsx
index c850b305cec..ee71890ecd3 100644
--- a/space/components/accounts/email-reset-password-form.tsx
+++ b/space/components/accounts/email-reset-password-form.tsx
@@ -7,7 +7,8 @@ import userService from "services/user.service";
// hooks
// import useToast from "hooks/use-toast";
// ui
-import { Input, PrimaryButton, SecondaryButton } from "components/ui";
+import { Input } from "components/ui";
+import { Button } from "@plane/ui";
// types
type Props = {
setIsResettingPassword: React.Dispatch>;
@@ -77,12 +78,12 @@ export const EmailResetPasswordForm: React.FC = ({ setIsResettingPassword
{errors.email && {errors.email.message}
}
-
setIsResettingPassword(false)}>
+ setIsResettingPassword(false)}>
Go Back
-
-
+
+
{isSubmitting ? "Sending link..." : "Send reset link"}
-
+
);
diff --git a/web/components/account/email-code-form.tsx b/web/components/account/email-code-form.tsx
index 52fea3b5b8d..1a4b1208d89 100644
--- a/web/components/account/email-code-form.tsx
+++ b/web/components/account/email-code-form.tsx
@@ -200,7 +200,7 @@ export const EmailCodeForm = ({ handleSignIn }: any) => {
{
) : (
{
handleSubmit(onSubmit)().then(() => {
diff --git a/web/components/account/email-password-form.tsx b/web/components/account/email-password-form.tsx
index eb2da3ab007..8420dd2c0a1 100644
--- a/web/components/account/email-password-form.tsx
+++ b/web/components/account/email-password-form.tsx
@@ -91,7 +91,7 @@ export const EmailPasswordForm: React.FC = (props) => {
diff --git a/web/components/account/email-reset-password-form.tsx b/web/components/account/email-reset-password-form.tsx
index 947f045d7f4..850e141c35d 100644
--- a/web/components/account/email-reset-password-form.tsx
+++ b/web/components/account/email-reset-password-form.tsx
@@ -91,10 +91,10 @@ export const EmailResetPasswordForm: React.FC = (props) => {
/>
- setIsResettingPassword(false)}>
+ setIsResettingPassword(false)}>
Go Back
-
+
{isSubmitting ? "Sending link..." : "Send reset link"}
diff --git a/web/components/account/email-signup-form.tsx b/web/components/account/email-signup-form.tsx
index 21f8844dfc8..76c7e523be3 100644
--- a/web/components/account/email-signup-form.tsx
+++ b/web/components/account/email-signup-form.tsx
@@ -122,7 +122,7 @@ export const EmailSignUpForm: React.FC = (props) => {
diff --git a/web/components/analytics/custom-analytics/sidebar.tsx b/web/components/analytics/custom-analytics/sidebar.tsx
index 6c6dbb7a5be..e39f726cd62 100644
--- a/web/components/analytics/custom-analytics/sidebar.tsx
+++ b/web/components/analytics/custom-analytics/sidebar.tsx
@@ -338,8 +338,7 @@ export const AnalyticsSidebar: React.FC = ({ analytics, params, fullScree
>
Refresh
-
-
+ } onClick={exportAnalytics}>
Export as CSV
diff --git a/web/components/auth-screens/project/join-project.tsx b/web/components/auth-screens/project/join-project.tsx
index d9a1263662f..7e2c8cebd5a 100644
--- a/web/components/auth-screens/project/join-project.tsx
+++ b/web/components/auth-screens/project/join-project.tsx
@@ -53,8 +53,12 @@ export const JoinProject: React.FC = () => {
-
-
+ }
+ loading={isJoiningProject}
+ onClick={handleJoin}
+ >
{isJoiningProject ? "Joining..." : "Click to join"}
diff --git a/web/components/core/filters/date-filter-modal.tsx b/web/components/core/filters/date-filter-modal.tsx
index 561fa881ca0..a94dd809ee1 100644
--- a/web/components/core/filters/date-filter-modal.tsx
+++ b/web/components/core/filters/date-filter-modal.tsx
@@ -127,10 +127,10 @@ export const DateFilterModal: React.FC = ({ title, handleClose, isOpen, o
)}
-
+
Cancel
-
+
Apply
diff --git a/web/components/core/modals/gpt-assistant-modal.tsx b/web/components/core/modals/gpt-assistant-modal.tsx
index 3da40b5c5d7..c48c72796db 100644
--- a/web/components/core/modals/gpt-assistant-modal.tsx
+++ b/web/components/core/modals/gpt-assistant-modal.tsx
@@ -204,7 +204,7 @@ export const GptAssistantModal: React.FC = ({
Close
-
+
{isSubmitting ? "Generating response..." : response === "" ? "Generate response" : "Generate again"}
diff --git a/web/components/core/modals/image-upload-modal.tsx b/web/components/core/modals/image-upload-modal.tsx
index a83edfb79bd..eb299af3cff 100644
--- a/web/components/core/modals/image-upload-modal.tsx
+++ b/web/components/core/modals/image-upload-modal.tsx
@@ -180,7 +180,7 @@ export const ImageUploadModal: React.FC = ({
-
+
{isRemoving ? "Removing..." : "Remove"}
diff --git a/web/components/core/views/issues-view.tsx b/web/components/core/views/issues-view.tsx
index 3df93b3b74d..ff3754cc05b 100644
--- a/web/components/core/views/issues-view.tsx
+++ b/web/components/core/views/issues-view.tsx
@@ -500,6 +500,7 @@ export const IssuesView: React.FC
= ({ openIssuesListModal, disableUserAc
/>
}
onClick={() => {
if (viewId) {
setFilters({}, true);
@@ -513,9 +514,7 @@ export const IssuesView: React.FC = ({ openIssuesListModal, disableUserAc
query: filters,
});
}}
- className="flex items-center gap-2 text-sm"
>
- {!viewId && }
{viewId ? "Update" : "Save"} view
diff --git a/web/components/cycles/transfer-issues.tsx b/web/components/cycles/transfer-issues.tsx
index 2a849347ec6..a604bc7e697 100644
--- a/web/components/cycles/transfer-issues.tsx
+++ b/web/components/cycles/transfer-issues.tsx
@@ -40,9 +40,8 @@ export const TransferIssues: React.FC = ({ handleClick }) => {
{transferableIssuesCount > 0 && (
-
-
- Transfer Issues
+ } onClick={handleClick}>
+ Transfer Issues
)}
diff --git a/web/components/exporter/guide.tsx b/web/components/exporter/guide.tsx
index 2b13c3a9bae..e5f0278006d 100644
--- a/web/components/exporter/guide.tsx
+++ b/web/components/exporter/guide.tsx
@@ -66,9 +66,7 @@ const IntegrationGuide = () => {
diff --git a/web/components/exporter/single-export.tsx b/web/components/exporter/single-export.tsx
index 8abde68c2db..2eea9887579 100644
--- a/web/components/exporter/single-export.tsx
+++ b/web/components/exporter/single-export.tsx
@@ -58,7 +58,7 @@ export const SingleExport: React.FC = ({ service, refreshing }) => {
{service.status == "completed" && (
-
+
{isLoading ? "Downloading..." : "Download"}
diff --git a/web/components/inbox/inbox-action-headers.tsx b/web/components/inbox/inbox-action-headers.tsx
index 42450768bfc..ea397a35a89 100644
--- a/web/components/inbox/inbox-action-headers.tsx
+++ b/web/components/inbox/inbox-action-headers.tsx
@@ -219,7 +219,6 @@ export const InboxActionHeader = () => {
/>
{
close();
markInboxStatus({
diff --git a/web/components/integration/guide.tsx b/web/components/integration/guide.tsx
index 8f1bb7fd6a1..c428beb2a7f 100644
--- a/web/components/integration/guide.tsx
+++ b/web/components/integration/guide.tsx
@@ -91,9 +91,7 @@ const IntegrationGuide = () => {
diff --git a/web/components/integration/single-integration-card.tsx b/web/components/integration/single-integration-card.tsx
index 7780edd1796..798b8d2b131 100644
--- a/web/components/integration/single-integration-card.tsx
+++ b/web/components/integration/single-integration-card.tsx
@@ -114,7 +114,7 @@ export const SingleIntegrationCard: React.FC = ({ integration }) => {
{workspaceIntegrations ? (
isInstalled ? (
-
+
{deletingIntegration ? "Uninstalling..." : "Uninstall"}
) : (
diff --git a/web/components/issues/workspace-views/workpace-view-issues.tsx b/web/components/issues/workspace-views/workpace-view-issues.tsx
index 664d52e5fb1..c9e8ba30e97 100644
--- a/web/components/issues/workspace-views/workpace-view-issues.tsx
+++ b/web/components/issues/workspace-views/workpace-view-issues.tsx
@@ -190,6 +190,7 @@ export const WorkspaceViewIssues = () => {
/>
}
onClick={() => {
if (globalViewId) {
handleFilters("filters", filters.filters, true);
@@ -203,9 +204,7 @@ export const WorkspaceViewIssues = () => {
query: filters.filters,
});
}}
- className="flex items-center gap-2 text-sm"
>
- {!globalViewId && }
{globalViewId ? "Update" : "Save"} view
diff --git a/web/components/issues/workspace-views/workspace-all-issue.tsx b/web/components/issues/workspace-views/workspace-all-issue.tsx
index 3eccae26ef1..aa5be95c468 100644
--- a/web/components/issues/workspace-views/workspace-all-issue.tsx
+++ b/web/components/issues/workspace-views/workspace-all-issue.tsx
@@ -199,6 +199,7 @@ export const WorkspaceAllIssue = () => {
/>
}
onClick={() => {
if (globalViewId) handleFilters("filters", filters.filters, true);
else
@@ -208,7 +209,6 @@ export const WorkspaceAllIssue = () => {
}}
className="flex items-center gap-2 text-sm"
>
- {!globalViewId && }
{globalViewId ? "Update" : "Save"} view
diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx
index 74f9a1131e9..088e83f9b60 100644
--- a/web/components/project/publish-project/modal.tsx
+++ b/web/components/project/publish-project/modal.tsx
@@ -310,7 +310,6 @@ export const PublishProjectModal: React.FC = observer(() => {
handleUnpublishProject(watch("id") ?? "")}
- className="!px-2 !py-1.5"
loading={isUnpublishing}
>
{isUnpublishing ? "Unpublishing..." : "Unpublish"}
diff --git a/web/components/ui/empty-state.tsx b/web/components/ui/empty-state.tsx
index 4b70b5ee42f..146d4bf85b3 100644
--- a/web/components/ui/empty-state.tsx
+++ b/web/components/ui/empty-state.tsx
@@ -37,11 +37,10 @@ export const EmptyState: React.FC = ({
{primaryButton && (
- {primaryButton.icon}
{primaryButton.text}
)}
diff --git a/web/components/web-view/add-comment.tsx b/web/components/web-view/add-comment.tsx
index 3ed76d515a6..7111a128178 100644
--- a/web/components/web-view/add-comment.tsx
+++ b/web/components/web-view/add-comment.tsx
@@ -121,12 +121,7 @@ export const AddComment: React.FC = ({ disabled = false, onSubmit }) => {
-
+
diff --git a/web/components/web-view/create-update-link-form.tsx b/web/components/web-view/create-update-link-form.tsx
index 1b378974806..fb356758d45 100644
--- a/web/components/web-view/create-update-link-form.tsx
+++ b/web/components/web-view/create-update-link-form.tsx
@@ -177,12 +177,7 @@ export const CreateUpdateLinkForm: React.FC = (props) => {
-
+
{data ? (isSubmitting ? "Updating Link..." : "Update Link") : isSubmitting ? "Adding Link..." : "Add Link"}
diff --git a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
index f182ea8737e..c3c9d588e25 100644
--- a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
@@ -91,8 +91,8 @@ const ProjectAuthorizationWrapped: React.FC = ({
actionButton={
-
- Go to issues
+ }>
+ Go to issues
diff --git a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
index 04aa33ad3c2..6dfdf313141 100644
--- a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
@@ -90,8 +90,8 @@ export const WorkspaceAuthorizationLayout: React.FC = ({
actionButton={
-
- Go to workspace
+ }>
+ Go to workspace
diff --git a/web/pages/[workspaceSlug]/me/my-issues.tsx b/web/pages/[workspaceSlug]/me/my-issues.tsx
index f861c467f7d..697e739e54b 100644
--- a/web/pages/[workspaceSlug]/me/my-issues.tsx
+++ b/web/pages/[workspaceSlug]/me/my-issues.tsx
@@ -87,13 +87,12 @@ const MyIssuesPage: NextPage = () => {
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx
index 6135bda429d..7f9005be09a 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx
@@ -84,13 +84,12 @@ const ProjectCyclesPage: NextPage = observer(() => {
right={
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "q" });
document.dispatchEvent(e);
}}
>
-
Add Cycle
}
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx
index 0543f368b97..efbc960c8df 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx
@@ -37,13 +37,12 @@ const ProjectInbox: NextPage = () => {
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
index 9b69ce23270..aeb8659db3f 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx
@@ -104,13 +104,12 @@ const ProjectModules: NextPage = () => {
))}
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "m" });
document.dispatchEvent(e);
}}
>
-
Add Module
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
index f6736a56b95..1ebf7d5a027 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx
@@ -101,13 +101,12 @@ const ProjectPages: NextPage = () => {
right={
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "d" });
document.dispatchEvent(e);
}}
>
-
Create Page
}
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
index 8b96c150098..9c67e28b5da 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx
@@ -129,12 +129,7 @@ const GeneralSettings: NextPage = observer(() => {
{projectDetails ? (
- setSelectedProject(projectDetails.id ?? null)}
- className="!text-sm"
- outline
- >
+ setSelectedProject(projectDetails.id ?? null)}>
Delete my project
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
index f971f60da80..c49d5de0092 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx
@@ -118,7 +118,7 @@ const LabelsSettings: NextPage = () => {
Labels
-
+
Add label
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
index 67d4ff2f091..a1ce938ad88 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx
@@ -84,13 +84,12 @@ const SingleView: React.FC = () => {
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
index 393cbb0e511..14661269d3e 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx
@@ -71,14 +71,12 @@ const ProjectViews: NextPage = () => {
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "v" });
document.dispatchEvent(e);
}}
>
-
Create View
diff --git a/web/pages/[workspaceSlug]/projects/index.tsx b/web/pages/[workspaceSlug]/projects/index.tsx
index 26641efe310..7af8d852214 100644
--- a/web/pages/[workspaceSlug]/projects/index.tsx
+++ b/web/pages/[workspaceSlug]/projects/index.tsx
@@ -56,13 +56,12 @@ const ProjectsPage: NextPage = () => {
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "p" });
document.dispatchEvent(e);
}}
>
-
Add Project
diff --git a/web/pages/[workspaceSlug]/settings/index.tsx b/web/pages/[workspaceSlug]/settings/index.tsx
index ee29e3ff854..84c6b86fbee 100644
--- a/web/pages/[workspaceSlug]/settings/index.tsx
+++ b/web/pages/[workspaceSlug]/settings/index.tsx
@@ -345,7 +345,7 @@ const WorkspaceSettings: NextPage = () => {
that workspace will be permanently removed and cannot be recovered.
- setIsOpen(true)} className="!text-sm" outline>
+ setIsOpen(true)}>
Delete my workspace
diff --git a/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx b/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
index 5ce4d0789e3..3175d609eb6 100644
--- a/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/all-issues.tsx
@@ -22,13 +22,12 @@ const WorkspaceViewAllIssue = () => (
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/workspace-views/assigned.tsx b/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
index 602ce0de482..05bbdde0547 100644
--- a/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/assigned.tsx
@@ -22,13 +22,12 @@ const WorkspaceViewAssignedIssue: React.FC = () => (
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/workspace-views/created.tsx b/web/pages/[workspaceSlug]/workspace-views/created.tsx
index 327cecc4353..e276e9dd9b4 100644
--- a/web/pages/[workspaceSlug]/workspace-views/created.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/created.tsx
@@ -22,13 +22,12 @@ const WorkspaceViewCreatedIssue: React.FC = () => (
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/workspace-views/index.tsx b/web/pages/[workspaceSlug]/workspace-views/index.tsx
index 5259dd7259b..b8390ca0c98 100644
--- a/web/pages/[workspaceSlug]/workspace-views/index.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/index.tsx
@@ -103,8 +103,7 @@ const WorkspaceViews: NextPage = () => {
-
setCreateUpdateViewModal(true)}>
-
+ } onClick={() => setCreateUpdateViewModal(true)}>
New View
diff --git a/web/pages/[workspaceSlug]/workspace-views/issues.tsx b/web/pages/[workspaceSlug]/workspace-views/issues.tsx
index 571da80f13c..fa818602621 100644
--- a/web/pages/[workspaceSlug]/workspace-views/issues.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/issues.tsx
@@ -22,13 +22,12 @@ const WorkspaceView = () => (
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx b/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
index 47dc39ff110..45da026d4f8 100644
--- a/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/subscribed.tsx
@@ -22,13 +22,12 @@ const WorkspaceViewSubscribedIssue: React.FC = () => (
}
onClick={() => {
const e = new KeyboardEvent("keydown", { key: "c" });
document.dispatchEvent(e);
}}
>
-
Add Issue
diff --git a/web/pages/accounts/reset-password.tsx b/web/pages/accounts/reset-password.tsx
index 34a2ce9def3..977a21a7ee6 100644
--- a/web/pages/accounts/reset-password.tsx
+++ b/web/pages/accounts/reset-password.tsx
@@ -157,7 +157,7 @@ const ResetPasswordPage: NextPage = () => {
)}
/>
-
+
{isSubmitting ? "Resetting..." : "Reset"}
From 5859775311ea4b0cff6d88e10e58136afb058f71 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 02:25:19 +0530
Subject: [PATCH 08/15] chore: swap loader component with plane/ui package
---
packages/ui/dist/index.d.ts | 18 ++-
packages/ui/dist/index.js | 15 +++
packages/ui/dist/index.mjs | 14 +++
packages/ui/src/index.tsx | 1 +
packages/ui/src/loader.tsx | 30 +++++
.../custom-analytics/custom-analytics.tsx | 3 +-
.../scope-and-demand/scope-and-demand.tsx | 3 +-
web/components/command-palette/command-k.tsx | 3 +-
web/components/core/image-picker-popover.tsx | 3 +-
.../modals/existing-issues-list-modal.tsx | 4 +-
.../cycles/active-cycle-details.tsx | 104 +++++-------------
web/components/cycles/cycles-list.tsx | 2 +-
web/components/cycles/cycles-view-legacy.tsx | 2 +-
web/components/cycles/cycles-view.tsx | 2 +-
web/components/cycles/sidebar.tsx | 3 +-
web/components/exporter/guide.tsx | 4 +-
web/components/gantt-chart/sidebar.tsx | 15 +--
web/components/inbox/inbox-main-content.tsx | 42 ++-----
web/components/inbox/issues-list-sidebar.tsx | 11 +-
.../integration/github/repo-details.tsx | 3 +-
web/components/integration/guide.tsx | 3 +-
.../integration/single-integration-card.tsx | 3 +-
.../integration/slack/select-channel.tsx | 2 +-
web/components/issues/activity.tsx | 27 ++---
.../filters/header/filters/assignee.tsx | 3 +-
.../filters/header/filters/created-by.tsx | 3 +-
.../filters/header/filters/labels.tsx | 2 +-
.../filters/header/filters/state.tsx | 2 +-
.../issues/parent-issues-list-modal.tsx | 34 ++----
.../peek-overview/full-screen-peek-view.tsx | 8 +-
.../issues/peek-overview/side-peek-view.tsx | 10 +-
web/components/modules/sidebar.tsx | 75 +++----------
.../notifications/notification-popover.tsx | 15 +--
.../pages/pages-list/recent-pages-list.tsx | 3 +-
web/components/pages/pages-view.tsx | 3 +-
web/components/profile/overview/activity.tsx | 11 +-
.../overview/priority-distribution.tsx | 3 +-
web/components/profile/overview/stats.tsx | 3 +-
web/components/profile/sidebar.tsx | 35 ++----
web/components/project/card-list.tsx | 3 +-
web/components/project/form-loader.tsx | 2 +-
.../project/publish-project/modal.tsx | 4 +-
web/components/ui/multi-level-dropdown.tsx | 14 +--
web/components/ui/product-updates-modal.tsx | 8 +-
web/components/workspace/issues-list.tsx | 20 +---
web/components/workspace/issues-stats.tsx | 8 +-
web/components/workspace/sidebar-dropdown.tsx | 29 +++--
.../[workspaceSlug]/me/profile/activity.tsx | 3 +-
.../archived-issues/[archivedIssueId].tsx | 3 +-
.../projects/[projectId]/issues/[issueId].tsx | 3 +-
.../projects/[projectId]/modules/index.tsx | 4 +-
.../projects/[projectId]/pages/[pageId].tsx | 4 +-
.../[projectId]/settings/estimates.tsx | 4 +-
.../projects/[projectId]/settings/index.tsx | 4 +-
.../[projectId]/settings/integrations.tsx | 3 +-
.../projects/[projectId]/settings/labels.tsx | 4 +-
.../projects/[projectId]/settings/members.tsx | 4 +-
.../projects/[projectId]/settings/states.tsx | 2 +-
.../projects/[projectId]/views/index.tsx | 4 +-
.../[workspaceSlug]/settings/integrations.tsx | 3 +-
.../[workspaceSlug]/settings/members.tsx | 4 +-
.../[workspaceSlug]/workspace-views/index.tsx | 4 +-
62 files changed, 272 insertions(+), 396 deletions(-)
create mode 100644 packages/ui/src/loader.tsx
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index 4413cd58797..3664cacd4cc 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { FC } from 'react';
+import React__default, { FC } from 'react';
declare type TButtonVariant = "primary" | "accent-primary" | "outline-primary" | "neutral-primary" | "link-primary" | "danger" | "accent-danger" | "outline-danger" | "link-danger" | "tertiary-danger";
@@ -37,4 +37,18 @@ declare const RadialProgressBar: FC;
declare const Spinner: React.FC;
-export { Button, ButtonProps, Input, InputProps, RadialProgressBar, Spinner, TextArea, TextAreaProps };
+declare type Props = {
+ children: React__default.ReactNode;
+ className?: string;
+};
+declare const Loader: {
+ ({ children, className }: Props): JSX.Element;
+ Item: React__default.FC;
+ displayName: string;
+};
+declare type ItemProps = {
+ height?: string;
+ width?: string;
+};
+
+export { Button, ButtonProps, Input, InputProps, Loader, RadialProgressBar, Spinner, TextArea, TextAreaProps };
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index ddf2336f309..f85a5360a8f 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -28,6 +28,7 @@ var src_exports = {};
__export(src_exports, {
Button: () => Button,
Input: () => Input,
+ Loader: () => Loader,
RadialProgressBar: () => RadialProgressBar,
Spinner: () => Spinner,
TextArea: () => TextArea
@@ -275,10 +276,24 @@ var Spinner = () => /* @__PURE__ */ React5.createElement("div", {
})), /* @__PURE__ */ React5.createElement("span", {
className: "sr-only"
}, "Loading..."));
+
+// src/loader.tsx
+var import_react2 = __toESM(require("react"));
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ import_react2.default.createElement("div", {
+ className: `${className} animate-pulse`,
+ role: "status"
+}, children);
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ import_react2.default.createElement("div", {
+ className: "rounded-md bg-custom-background-80",
+ style: { height, width }
+});
+Loader.Item = Item;
+Loader.displayName = "plane-ui-loader";
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Button,
Input,
+ Loader,
RadialProgressBar,
Spinner,
TextArea
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 3503eb8040f..4c2215e8b66 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -239,9 +239,23 @@ var Spinner = () => /* @__PURE__ */ React5.createElement("div", {
})), /* @__PURE__ */ React5.createElement("span", {
className: "sr-only"
}, "Loading..."));
+
+// src/loader.tsx
+import React6 from "react";
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ React6.createElement("div", {
+ className: `${className} animate-pulse`,
+ role: "status"
+}, children);
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ React6.createElement("div", {
+ className: "rounded-md bg-custom-background-80",
+ style: { height, width }
+});
+Loader.Item = Item;
+Loader.displayName = "plane-ui-loader";
export {
Button,
Input,
+ Loader,
RadialProgressBar,
Spinner,
TextArea
diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx
index 6c5ec5538d2..2ef42f7b180 100644
--- a/packages/ui/src/index.tsx
+++ b/packages/ui/src/index.tsx
@@ -2,3 +2,4 @@ export * from "./buttons/button";
export * from "./form-fields";
export * from "./progress";
export * from "./spinners";
+export * from "./loader";
diff --git a/packages/ui/src/loader.tsx b/packages/ui/src/loader.tsx
new file mode 100644
index 00000000000..cd12bc22f57
--- /dev/null
+++ b/packages/ui/src/loader.tsx
@@ -0,0 +1,30 @@
+import React from "react";
+
+type Props = {
+ children: React.ReactNode;
+ className?: string;
+};
+
+const Loader = ({ children, className = "" }: Props) => (
+
+ {children}
+
+);
+
+type ItemProps = {
+ height?: string;
+ width?: string;
+};
+
+const Item: React.FC = ({ height = "auto", width = "auto" }) => (
+
+);
+
+Loader.Item = Item;
+
+Loader.displayName = "plane-ui-loader";
+
+export { Loader };
diff --git a/web/components/analytics/custom-analytics/custom-analytics.tsx b/web/components/analytics/custom-analytics/custom-analytics.tsx
index a0fdf42cce9..c07e6b9eedd 100644
--- a/web/components/analytics/custom-analytics/custom-analytics.tsx
+++ b/web/components/analytics/custom-analytics/custom-analytics.tsx
@@ -7,10 +7,9 @@ import { Control, UseFormSetValue } from "react-hook-form";
// hooks
import useProjects from "hooks/use-projects";
// components
-import { Button } from "@plane/ui";
import { AnalyticsGraph, AnalyticsSelectBar, AnalyticsSidebar, AnalyticsTable } from "components/analytics";
// ui
-import { Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
// helpers
import { convertResponseToBarGraphData } from "helpers/analytics.helper";
// types
diff --git a/web/components/analytics/scope-and-demand/scope-and-demand.tsx b/web/components/analytics/scope-and-demand/scope-and-demand.tsx
index 41915d805c2..aef15880f9d 100644
--- a/web/components/analytics/scope-and-demand/scope-and-demand.tsx
+++ b/web/components/analytics/scope-and-demand/scope-and-demand.tsx
@@ -5,10 +5,9 @@ import useSWR from "swr";
// services
import analyticsService from "services/analytics.service";
// components
-import { Button } from "@plane/ui";
import { AnalyticsDemand, AnalyticsLeaderboard, AnalyticsScope, AnalyticsYearWiseIssues } from "components/analytics";
// ui
-import { Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
// fetch-keys
import { DEFAULT_ANALYTICS } from "constants/fetch-keys";
diff --git a/web/components/command-palette/command-k.tsx b/web/components/command-palette/command-k.tsx
index d51d269cd09..53cdca7d78c 100644
--- a/web/components/command-palette/command-k.tsx
+++ b/web/components/command-palette/command-k.tsx
@@ -26,7 +26,8 @@ import {
commandGroups,
} from "components/command-palette";
// ui
-import { Icon, Loader, ToggleSwitch, Tooltip } from "components/ui";
+import { Icon, ToggleSwitch, Tooltip } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { DiscordIcon, GithubIcon, SettingIcon } from "components/icons";
import { InboxIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/core/image-picker-popover.tsx b/web/components/core/image-picker-popover.tsx
index 6f69e244e96..7ab0ec6bfbc 100644
--- a/web/components/core/image-picker-popover.tsx
+++ b/web/components/core/image-picker-popover.tsx
@@ -13,8 +13,7 @@ import fileService from "services/file.service";
import useWorkspaceDetails from "hooks/use-workspace-details";
import useOutsideClickDetector from "hooks/use-outside-click-detector";
// components
-import { Loader } from "components/ui";
-import { Button, Input } from "@plane/ui";
+import { Button, Input, Loader } from "@plane/ui";
const tabOptions = [
{
diff --git a/web/components/core/modals/existing-issues-list-modal.tsx b/web/components/core/modals/existing-issues-list-modal.tsx
index f6644e84e9b..5b9a6c3c369 100644
--- a/web/components/core/modals/existing-issues-list-modal.tsx
+++ b/web/components/core/modals/existing-issues-list-modal.tsx
@@ -13,8 +13,8 @@ import useToast from "hooks/use-toast";
import useIssuesView from "hooks/use-issues-view";
import useDebounce from "hooks/use-debounce";
// ui
-import { Button } from "@plane/ui";
-import { Loader, ToggleSwitch, Tooltip } from "components/ui";
+import { Button, Loader } from "@plane/ui";
+import { ToggleSwitch, Tooltip } from "components/ui";
// icons
import { LaunchOutlined } from "@mui/icons-material";
import { MagnifyingGlassIcon, XMarkIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/cycles/active-cycle-details.tsx b/web/components/cycles/active-cycle-details.tsx
index 7816f0edba1..76391984682 100644
--- a/web/components/cycles/active-cycle-details.tsx
+++ b/web/components/cycles/active-cycle-details.tsx
@@ -10,9 +10,10 @@ import cyclesService from "services/cycles.service";
// hooks
import useToast from "hooks/use-toast";
// ui
-import { LinearProgressIndicator, Loader, Tooltip } from "components/ui";
+import { LinearProgressIndicator, Tooltip } from "components/ui";
import { AssigneesList } from "components/ui/avatar";
import { SingleProgressStats } from "components/core";
+import { Loader } from "@plane/ui";
// components
import ProgressChart from "components/core/sidebar/progress-chart";
import { ActiveCycleProgressStats } from "components/cycles";
@@ -34,11 +35,7 @@ import { StarIcon } from "@heroicons/react/24/outline";
// components
import { ViewIssueLabel } from "components/issues";
// helpers
-import {
- getDateRangeStatus,
- renderShortDateWithYearFormat,
- findHowManyDaysLeft,
-} from "helpers/date-time.helper";
+import { getDateRangeStatus, renderShortDateWithYearFormat, findHowManyDaysLeft } from "helpers/date-time.helper";
import { truncateText } from "helpers/string.helper";
// types
import { ICycle, IIssue } from "types";
@@ -82,24 +79,18 @@ export const ActiveCycleDetails: React.FC = () => {
const { data: currentCycle } = useSWR(
workspaceSlug && projectId ? CURRENT_CYCLE_LIST(projectId as string) : null,
workspaceSlug && projectId
- ? () =>
- cyclesService.getCyclesWithParams(workspaceSlug as string, projectId as string, "current")
+ ? () => cyclesService.getCyclesWithParams(workspaceSlug as string, projectId as string, "current")
: null
);
const cycle = currentCycle ? currentCycle[0] : null;
const { data: issues } = useSWR(
- workspaceSlug && projectId && cycle?.id
- ? CYCLE_ISSUES_WITH_PARAMS(cycle?.id, { priority: "urgent,high" })
- : null,
+ workspaceSlug && projectId && cycle?.id ? CYCLE_ISSUES_WITH_PARAMS(cycle?.id, { priority: "urgent,high" }) : null,
workspaceSlug && projectId && cycle?.id
? () =>
- cyclesService.getCycleIssuesWithParams(
- workspaceSlug as string,
- projectId as string,
- cycle.id,
- { priority: "urgent,high" }
- )
+ cyclesService.getCycleIssuesWithParams(workspaceSlug as string, projectId as string, cycle.id, {
+ priority: "urgent,high",
+ })
: null
) as { data: IIssue[] | undefined };
@@ -115,20 +106,8 @@ export const ActiveCycleDetails: React.FC = () => {
-
-
+
+
{
false
);
- cyclesService
- .removeCycleFromFavorites(workspaceSlug as string, projectId as string, cycle.id)
- .catch(() => {
- setToastAlert({
- type: "error",
- title: "Error!",
- message: "Couldn't remove the cycle from favorites. Please try again.",
- });
+ cyclesService.removeCycleFromFavorites(workspaceSlug as string, projectId as string, cycle.id).catch(() => {
+ setToastAlert({
+ type: "error",
+ title: "Error!",
+ message: "Couldn't remove the cycle from favorites. Please try again.",
});
+ });
};
const progressIndicatorData = stateGroups.map((group, index) => ({
id: index,
name: group.title,
- value:
- cycle.total_issues > 0
- ? ((cycle[group.key as keyof ICycle] as number) / cycle.total_issues) * 100
- : 0,
+ value: cycle.total_issues > 0 ? ((cycle[group.key as keyof ICycle] as number) / cycle.total_issues) * 100 : 0,
color: group.color,
}));
@@ -270,9 +244,7 @@ export const ActiveCycleDetails: React.FC = () => {
/>
-
- {truncateText(cycle.name, 70)}
-
+ {truncateText(cycle.name, 70)}
@@ -304,9 +276,7 @@ export const ActiveCycleDetails: React.FC = () => {
{cycle.total_issues - cycle.completed_issues > 0 && (
@@ -443,9 +413,7 @@ export const ActiveCycleDetails: React.FC = () => {
issues.map((issue) => (
- router.push(`/${workspaceSlug}/projects/${projectId}/issues/${issue.id}`)
- }
+ onClick={() => router.push(`/${workspaceSlug}/projects/${projectId}/issues/${issue.id}`)}
className="flex flex-wrap cursor-pointer rounded-md items-center justify-between gap-2 border border-custom-border-200 bg-custom-background-90 px-3 py-1.5"
>
@@ -459,14 +427,8 @@ export const ActiveCycleDetails: React.FC = () => {
-
-
- {truncateText(issue.name, 30)}
-
+
+ {truncateText(issue.name, 30)}
@@ -481,15 +443,9 @@ export const ActiveCycleDetails: React.FC = () => {
- {issue.assignees &&
- issue.assignees.length > 0 &&
- Array.isArray(issue.assignees) ? (
+ {issue.assignees && issue.assignees.length > 0 && Array.isArray(issue.assignees) ? (
) : (
""
@@ -522,17 +478,14 @@ export const ActiveCycleDetails: React.FC = () => {
width:
issues &&
`${
- (issues.filter((issue) => issue?.state_detail?.group === "completed")
- ?.length /
- issues.length) *
+ (issues.filter((issue) => issue?.state_detail?.group === "completed")?.length / issues.length) *
100 ?? 0
}%`,
}}
/>
- {issues?.filter((issue) => issue?.state_detail?.group === "completed")?.length} of{" "}
- {issues?.length}
+ {issues?.filter((issue) => issue?.state_detail?.group === "completed")?.length} of {issues?.length}
)}
@@ -553,10 +506,7 @@ export const ActiveCycleDetails: React.FC = () => {
-
- Pending Issues -{" "}
- {cycle.total_issues - (cycle.completed_issues + cycle.cancelled_issues)}
-
+
Pending Issues - {cycle.total_issues - (cycle.completed_issues + cycle.cancelled_issues)}
diff --git a/web/components/cycles/cycles-list.tsx b/web/components/cycles/cycles-list.tsx
index 923bdc20ab7..ec8a40837ec 100644
--- a/web/components/cycles/cycles-list.tsx
+++ b/web/components/cycles/cycles-list.tsx
@@ -1,6 +1,6 @@
import { FC } from "react";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { ICycle } from "types";
import { CyclesListItem } from "./cycles-list-item";
diff --git a/web/components/cycles/cycles-view-legacy.tsx b/web/components/cycles/cycles-view-legacy.tsx
index 5d025e4fdce..da858bf52db 100644
--- a/web/components/cycles/cycles-view-legacy.tsx
+++ b/web/components/cycles/cycles-view-legacy.tsx
@@ -16,7 +16,7 @@ import {
SingleCycleList,
} from "components/cycles";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// helpers
import { getDateRangeStatus } from "helpers/date-time.helper";
// types
diff --git a/web/components/cycles/cycles-view.tsx b/web/components/cycles/cycles-view.tsx
index 42e0a427213..2404c27da35 100644
--- a/web/components/cycles/cycles-view.tsx
+++ b/web/components/cycles/cycles-view.tsx
@@ -5,7 +5,7 @@ import { observer } from "mobx-react-lite";
import { useMobxStore } from "lib/mobx/store-provider";
// components
import { CyclesBoard, CyclesList } from "components/cycles";
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
export interface ICyclesView {
filter: "all" | "current" | "upcoming" | "draft" | "completed" | "incomplete";
diff --git a/web/components/cycles/sidebar.tsx b/web/components/cycles/sidebar.tsx
index e2ca98d3f86..4b2e1efeaa4 100644
--- a/web/components/cycles/sidebar.tsx
+++ b/web/components/cycles/sidebar.tsx
@@ -17,7 +17,8 @@ import { SidebarProgressStats } from "components/core";
import ProgressChart from "components/core/sidebar/progress-chart";
import { DeleteCycleModal } from "components/cycles";
// ui
-import { CustomMenu, CustomRangeDatePicker, Loader, ProgressBar } from "components/ui";
+import { CustomMenu, CustomRangeDatePicker, ProgressBar } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import {
CalendarDaysIcon,
diff --git a/web/components/exporter/guide.tsx b/web/components/exporter/guide.tsx
index e5f0278006d..5df8b1d9327 100644
--- a/web/components/exporter/guide.tsx
+++ b/web/components/exporter/guide.tsx
@@ -13,8 +13,8 @@ import IntegrationService from "services/integration.service";
// components
import { Exporter, SingleExport } from "components/exporter";
// ui
-import { Button } from "@plane/ui";
-import { Icon, Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
+import { Icon } from "components/ui";
// icons
import { ArrowPathIcon } from "@heroicons/react/24/outline";
// fetch-keys
diff --git a/web/components/gantt-chart/sidebar.tsx b/web/components/gantt-chart/sidebar.tsx
index 2aec274d9e2..85a5031cf52 100644
--- a/web/components/gantt-chart/sidebar.tsx
+++ b/web/components/gantt-chart/sidebar.tsx
@@ -5,7 +5,7 @@ import StrictModeDroppable from "components/dnd/StrictModeDroppable";
// hooks
import { useChart } from "./hooks";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { EllipsisVerticalIcon } from "@heroicons/react/24/outline";
// helpers
@@ -55,8 +55,7 @@ export const GanttSidebar: React.FC
= (props) => {
// update the sort order to the lowest if dropped at the top
if (destination.index === 0) updatedSortOrder = blocks[0].sort_order - 1000;
// update the sort order to the highest if dropped at the bottom
- else if (destination.index === blocks.length - 1)
- updatedSortOrder = blocks[blocks.length - 1].sort_order + 1000;
+ else if (destination.index === blocks.length - 1) updatedSortOrder = blocks[blocks.length - 1].sort_order + 1000;
// update the sort order to the average of the two adjacent blocks if dropped in between
else {
const destinationSortingOrder = blocks[destination.index].sort_order;
@@ -95,11 +94,7 @@ export const GanttSidebar: React.FC = (props) => {
<>
{blocks ? (
blocks.map((block, index) => {
- const duration = findTotalDaysInRange(
- block.start_date ?? "",
- block.target_date ?? "",
- true
- );
+ const duration = findTotalDaysInRange(block.start_date ?? "", block.target_date ?? "", true);
return (
= (props) => {
>
{(provided, snapshot) => (
updateActiveBlock(block)}
onMouseLeave={() => updateActiveBlock(null)}
ref={provided.innerRef}
diff --git a/web/components/inbox/inbox-main-content.tsx b/web/components/inbox/inbox-main-content.tsx
index 6c096072963..5b0fb1da70a 100644
--- a/web/components/inbox/inbox-main-content.tsx
+++ b/web/components/inbox/inbox-main-content.tsx
@@ -17,7 +17,7 @@ import useUserAuth from "hooks/use-user-auth";
import { IssueDescriptionForm, IssueDetailsSidebar, IssueReaction } from "components/issues";
import { InboxIssueActivity } from "components/inbox";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import {
ArrowTopRightOnSquareIcon,
@@ -117,16 +117,7 @@ export const InboxMainContent: React.FC = () => {
mutate(PROJECT_ISSUES_ACTIVITY(issueDetails.id));
});
},
- [
- workspaceSlug,
- inboxIssueId,
- projectId,
- mutateIssueDetails,
- inboxId,
- user,
- issueDetails,
- params,
- ]
+ [workspaceSlug, inboxIssueId, projectId, mutateIssueDetails, inboxId, user, issueDetails, params]
);
const onKeyDown = useCallback(
@@ -178,8 +169,7 @@ export const InboxMainContent: React.FC = () => {
reset({
...issueDetails,
- assignees_list:
- issueDetails.assignees_list ?? (issueDetails.assignee_details ?? []).map((user) => user.id),
+ assignees_list: issueDetails.assignees_list ?? (issueDetails.assignee_details ?? []).map((user) => user.id),
labels_list: issueDetails.labels_list ?? issueDetails.labels,
});
}, [issueDetails, reset, inboxIssueId]);
@@ -194,13 +184,11 @@ export const InboxMainContent: React.FC = () => {
{inboxIssues && inboxIssues.length > 0 ? (
- {inboxIssues?.length} issues found. Select an issue from the sidebar to view its
- details.
+ {inboxIssues?.length} issues found. Select an issue from the sidebar to view its details.
) : (
- No issues found. Use{" "}
- C shortcut
+ No issues found. Use C shortcut
to create a new issue
)}
@@ -247,18 +235,12 @@ export const InboxMainContent: React.FC = () => {
{new Date(issueDetails.issue_inbox[0].snoozed_till ?? "") < new Date() ? (
This issue was snoozed till{" "}
- {renderShortDateWithYearFormat(
- issueDetails.issue_inbox[0].snoozed_till ?? ""
- )}
- .
+ {renderShortDateWithYearFormat(issueDetails.issue_inbox[0].snoozed_till ?? "")}.
) : (
This issue has been snoozed till{" "}
- {renderShortDateWithYearFormat(
- issueDetails.issue_inbox[0].snoozed_till ?? ""
- )}
- .
+ {renderShortDateWithYearFormat(issueDetails.issue_inbox[0].snoozed_till ?? "")}.
)}
>
@@ -293,17 +275,11 @@ export const InboxMainContent: React.FC = () => {
description_html: issueDetails.description_html,
}}
handleFormSubmit={submitChanges}
- isAllowed={
- memberRole.isMember || memberRole.isOwner || user?.id === issueDetails.created_by
- }
+ isAllowed={memberRole.isMember || memberRole.isOwner || user?.id === issueDetails.created_by}
/>
-
+
diff --git a/web/components/inbox/issues-list-sidebar.tsx b/web/components/inbox/issues-list-sidebar.tsx
index 5f0fd116a2e..31fb3e7e6f5 100644
--- a/web/components/inbox/issues-list-sidebar.tsx
+++ b/web/components/inbox/issues-list-sidebar.tsx
@@ -5,7 +5,7 @@ import useInboxView from "hooks/use-inbox-view";
// components
import { InboxIssueCard, InboxFiltersList } from "components/inbox";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
export const IssuesListSidebar = () => {
const router = useRouter();
@@ -20,17 +20,12 @@ export const IssuesListSidebar = () => {
inboxIssues.length > 0 ? (
{inboxIssues.map((issue) => (
-
+
))}
) : (
- {filtersLength > 0 &&
- "No issues found for the selected filters. Try changing the filters."}
+ {filtersLength > 0 && "No issues found for the selected filters. Try changing the filters."}
)
) : (
diff --git a/web/components/integration/github/repo-details.tsx b/web/components/integration/github/repo-details.tsx
index a59197750a6..1e78f924151 100644
--- a/web/components/integration/github/repo-details.tsx
+++ b/web/components/integration/github/repo-details.tsx
@@ -9,8 +9,7 @@ import { UseFormSetValue } from "react-hook-form";
// services
import GithubIntegrationService from "services/github.service";
// ui
-import { Loader } from "components/ui";
-import { Button } from "@plane/ui";
+import { Button, Loader } from "@plane/ui";
// types
import { IUserDetails, TFormValues, TIntegrationSteps } from "components/integration";
// fetch-keys
diff --git a/web/components/integration/guide.tsx b/web/components/integration/guide.tsx
index c428beb2a7f..6ed5d03f36a 100644
--- a/web/components/integration/guide.tsx
+++ b/web/components/integration/guide.tsx
@@ -13,8 +13,7 @@ import IntegrationService from "services/integration.service";
// components
import { DeleteImportModal, GithubImporterRoot, JiraImporterRoot, SingleImport } from "components/integration";
// ui
-import { Button } from "@plane/ui";
-import { Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
// icons
import { ArrowPathIcon } from "@heroicons/react/24/outline";
// types
diff --git a/web/components/integration/single-integration-card.tsx b/web/components/integration/single-integration-card.tsx
index 798b8d2b131..081de73788e 100644
--- a/web/components/integration/single-integration-card.tsx
+++ b/web/components/integration/single-integration-card.tsx
@@ -11,8 +11,7 @@ import IntegrationService from "services/integration.service";
import useToast from "hooks/use-toast";
import useIntegrationPopup from "hooks/use-integration-popup";
// ui
-import { Button } from "@plane/ui";
-import { Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
// icons
import GithubLogo from "public/services/github.png";
import SlackLogo from "public/services/slack.png";
diff --git a/web/components/integration/slack/select-channel.tsx b/web/components/integration/slack/select-channel.tsx
index 728b582f146..6455011d44e 100644
--- a/web/components/integration/slack/select-channel.tsx
+++ b/web/components/integration/slack/select-channel.tsx
@@ -6,7 +6,7 @@ import useSWR, { mutate } from "swr";
// services
import appinstallationsService from "services/app_installation.service";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// hooks
import useToast from "hooks/use-toast";
import useIntegrationPopup from "hooks/use-integration-popup";
diff --git a/web/components/issues/activity.tsx b/web/components/issues/activity.tsx
index e6f54f51246..5e5f5b4df99 100644
--- a/web/components/issues/activity.tsx
+++ b/web/components/issues/activity.tsx
@@ -7,7 +7,8 @@ import { useRouter } from "next/router";
import { ActivityIcon, ActivityMessage } from "components/core";
import { CommentCard } from "components/issues/comment";
// ui
-import { Icon, Loader, Tooltip } from "components/ui";
+import { Icon, Tooltip } from "components/ui";
+import { Loader } from "@plane/ui";
// helpers
import { render24HourFormatTime, renderLongDateFormat, timeAgo } from "helpers/date-time.helper";
// types
@@ -52,11 +53,7 @@ export const IssueActivitySection: React.FC = ({
{activity.map((activityItem, index) => {
// determines what type of action is performed
- const message = activityItem.field ? (
-
- ) : (
- "created the issue."
- );
+ const message = activityItem.field ? : "created the issue.";
if ("field" in activityItem && activityItem.field !== "updated_by") {
return (
@@ -79,8 +76,7 @@ export const IssueActivitySection: React.FC = ({
) : (
)
- ) : activityItem.actor_detail.avatar &&
- activityItem.actor_detail.avatar !== "" ? (
+ ) : activityItem.actor_detail.avatar && activityItem.actor_detail.avatar !== "" ? (
= ({
diff --git a/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx b/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx
index 9e41784f8ca..eace4bec53e 100644
--- a/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx
+++ b/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx
@@ -3,7 +3,8 @@ import React, { useState } from "react";
// components
import { FilterHeader, FilterOption } from "components/issues";
// ui
-import { Avatar, Loader } from "components/ui";
+import { Avatar } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IUserLite } from "types";
diff --git a/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx b/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx
index 9be5bd05c1d..5d8978ffd29 100644
--- a/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx
+++ b/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx
@@ -3,7 +3,8 @@ import React, { useState } from "react";
// components
import { FilterHeader, FilterOption } from "components/issues";
// ui
-import { Avatar, Loader } from "components/ui";
+import { Avatar } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IUserLite } from "types";
diff --git a/web/components/issues/issue-layouts/filters/header/filters/labels.tsx b/web/components/issues/issue-layouts/filters/header/filters/labels.tsx
index a4140507633..37f6846f944 100644
--- a/web/components/issues/issue-layouts/filters/header/filters/labels.tsx
+++ b/web/components/issues/issue-layouts/filters/header/filters/labels.tsx
@@ -3,7 +3,7 @@ import React, { useState } from "react";
// components
import { FilterHeader, FilterOption } from "components/issues";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IIssueLabels } from "types";
diff --git a/web/components/issues/issue-layouts/filters/header/filters/state.tsx b/web/components/issues/issue-layouts/filters/header/filters/state.tsx
index ae719758af9..6f3472c8e13 100644
--- a/web/components/issues/issue-layouts/filters/header/filters/state.tsx
+++ b/web/components/issues/issue-layouts/filters/header/filters/state.tsx
@@ -3,7 +3,7 @@ import React, { useState } from "react";
// components
import { FilterHeader, FilterOption } from "components/issues";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { StateGroupIcon } from "components/icons";
// helpers
diff --git a/web/components/issues/parent-issues-list-modal.tsx b/web/components/issues/parent-issues-list-modal.tsx
index a29fa6521c4..c98ee8e14d9 100644
--- a/web/components/issues/parent-issues-list-modal.tsx
+++ b/web/components/issues/parent-issues-list-modal.tsx
@@ -11,7 +11,8 @@ import useDebounce from "hooks/use-debounce";
// components
import { LayerDiagonalIcon } from "components/icons";
// ui
-import { Loader, ToggleSwitch, Tooltip } from "components/ui";
+import { ToggleSwitch, Tooltip } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { LaunchOutlined } from "@mui/icons-material";
import { MagnifyingGlassIcon } from "@heroicons/react/24/outline";
@@ -69,12 +70,7 @@ export const ParentIssuesListModal: React.FC = ({
return (
<>
- setSearchTerm("")}
- appear
- >
+ setSearchTerm("")} appear>
= ({
)}
- {!isSearching &&
- issues.length === 0 &&
- searchTerm !== "" &&
- debouncedSearchTerm !== "" && (
-
-
-
- No issues found. Create a new issue with{" "}
-
- C
-
- .
-
-
- )}
+ {!isSearching && issues.length === 0 && searchTerm !== "" && debouncedSearchTerm !== "" && (
+
+
+
+ No issues found. Create a new issue with{" "}
+ C .
+
+
+ )}
{isSearching ? (
diff --git a/web/components/issues/peek-overview/full-screen-peek-view.tsx b/web/components/issues/peek-overview/full-screen-peek-view.tsx
index 9c04e0b6ae5..47d0d1e7d53 100644
--- a/web/components/issues/peek-overview/full-screen-peek-view.tsx
+++ b/web/components/issues/peek-overview/full-screen-peek-view.tsx
@@ -7,7 +7,7 @@ import {
TPeekOverviewModes,
} from "components/issues";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IIssue } from "types";
@@ -59,11 +59,7 @@ export const FullScreenPeekView: React.FC = ({
{/* issue activity/comments */}
) : (
diff --git a/web/components/issues/peek-overview/side-peek-view.tsx b/web/components/issues/peek-overview/side-peek-view.tsx
index 1bdeed4791f..cb3e8316b4a 100644
--- a/web/components/issues/peek-overview/side-peek-view.tsx
+++ b/web/components/issues/peek-overview/side-peek-view.tsx
@@ -7,7 +7,7 @@ import {
TPeekOverviewModes,
} from "components/issues";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IIssue } from "types";
@@ -69,13 +69,7 @@ export const SidePeekView: React.FC = ({
{/* issue activity/comments */}
- {issue && (
-
- )}
+ {issue &&
}
) : (
diff --git a/web/components/modules/sidebar.tsx b/web/components/modules/sidebar.tsx
index e815d19506f..e7613000be7 100644
--- a/web/components/modules/sidebar.tsx
+++ b/web/components/modules/sidebar.tsx
@@ -29,7 +29,8 @@ import useToast from "hooks/use-toast";
import { LinkModal, LinksList, SidebarProgressStats } from "components/core";
import { DeleteModuleModal, SidebarLeadSelect, SidebarMembersSelect } from "components/modules";
import ProgressChart from "components/core/sidebar/progress-chart";
-import { CustomMenu, CustomSelect, Loader, ProgressBar } from "components/ui";
+import { CustomMenu, CustomSelect, ProgressBar } from "components/ui";
+import { Loader } from "@plane/ui";
// icon
import { ExclamationIcon } from "components/icons";
import { LinkIcon } from "@heroicons/react/20/solid";
@@ -169,8 +170,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
};
const handleCopyText = () => {
- const originURL =
- typeof window !== "undefined" && window.location.origin ? window.location.origin : "";
+ const originURL = typeof window !== "undefined" && window.location.origin ? window.location.origin : "";
copyTextToClipboard(`${workspaceSlug}/projects/${projectId}/modules/${module?.id}`)
.then(() => {
@@ -198,9 +198,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
const isStartValid = new Date(`${module?.start_date}`) <= new Date();
const isEndValid = new Date(`${module?.target_date}`) >= new Date(`${module?.start_date}`);
- const progressPercentage = module
- ? Math.round((module.completed_issues / module.total_issues) * 100)
- : null;
+ const progressPercentage = module ? Math.round((module.completed_issues / module.total_issues) * 100) : null;
const handleEditLink = (link: linkDetails) => {
setSelectedLinkToUpdate(link);
@@ -220,12 +218,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
createIssueLink={handleCreateLink}
updateIssueLink={handleUpdateLink}
/>
-
+
= ({ module, isOpen, moduleIs
}`}
>
-
- {renderShortDateWithYearFormat(
- new Date(`${module.start_date}`),
- "Start date"
- )}
-
+
{renderShortDateWithYearFormat(new Date(`${module.start_date}`), "Start date")}
= ({ module, isOpen, moduleIs
>
{
submitChanges({
start_date: renderDateFormat(date),
@@ -324,12 +308,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
>
-
- {renderShortDateWithYearFormat(
- new Date(`${module?.target_date}`),
- "End date"
- )}
-
+ {renderShortDateWithYearFormat(new Date(`${module?.target_date}`), "End date")}
= ({ module, isOpen, moduleIs
>
{
submitChanges({
target_date: renderDateFormat(date),
@@ -372,9 +347,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
-
- {module.name}
-
+ {module.name}
setModuleDeleteModal(true)}>
@@ -431,10 +404,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
-
+
{module.completed_issues}/{module.total_issues}
@@ -446,9 +416,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
{({ open }) => (
-
+
Progress
@@ -470,11 +438,7 @@ export const ModuleDetailsSidebar: React.FC
= ({ module, isOpen, moduleIs
) : (
-
+
Invalid date. Please enter valid date.
@@ -492,8 +456,7 @@ export const ModuleDetailsSidebar: React.FC
= ({ module, isOpen, moduleIs
Pending Issues -{" "}
- {module.total_issues -
- (module.completed_issues + module.cancelled_issues)}{" "}
+ {module.total_issues - (module.completed_issues + module.cancelled_issues)}{" "}
@@ -530,9 +493,7 @@ export const ModuleDetailsSidebar: React.FC = ({ module, isOpen, moduleIs
{({ open }) => (
-
+
Other Information
@@ -547,11 +508,7 @@ export const ModuleDetailsSidebar: React.FC
= ({ module, isOpen, moduleIs
) : (
-
+
No issues found. Please add issue.
diff --git a/web/components/notifications/notification-popover.tsx b/web/components/notifications/notification-popover.tsx
index f01fdafd155..d465d8c776c 100644
--- a/web/components/notifications/notification-popover.tsx
+++ b/web/components/notifications/notification-popover.tsx
@@ -9,12 +9,9 @@ import { Popover, Transition } from "@headlessui/react";
import useUserNotification from "hooks/use-user-notifications";
// components
-import { Loader, EmptyState, Tooltip } from "components/ui";
-import {
- SnoozeNotificationModal,
- NotificationCard,
- NotificationHeader,
-} from "components/notifications";
+import { EmptyState, Tooltip } from "components/ui";
+import { SnoozeNotificationModal, NotificationCard, NotificationHeader } from "components/notifications";
+import { Loader } from "@plane/ui";
// icons
import { NotificationsOutlined } from "@mui/icons-material";
// images
@@ -63,11 +60,7 @@ export const NotificationPopover = () => {
isOpen={selectedNotificationForSnooze !== null}
onClose={() => setSelectedNotificationForSnooze(null)}
onSubmit={markSnoozeNotification}
- notification={
- notifications?.find(
- (notification) => notification.id === selectedNotificationForSnooze
- ) || null
- }
+ notification={notifications?.find((notification) => notification.id === selectedNotificationForSnooze) || null}
onSuccess={() => {
setSelectedNotificationForSnooze(null);
}}
diff --git a/web/components/pages/pages-list/recent-pages-list.tsx b/web/components/pages/pages-list/recent-pages-list.tsx
index 6ea8f9d010c..f302d607b23 100644
--- a/web/components/pages/pages-list/recent-pages-list.tsx
+++ b/web/components/pages/pages-list/recent-pages-list.tsx
@@ -9,7 +9,8 @@ import pagesService from "services/page.service";
// components
import { PagesView } from "components/pages";
// ui
-import { EmptyState, Loader } from "components/ui";
+import { EmptyState } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
// images
diff --git a/web/components/pages/pages-view.tsx b/web/components/pages/pages-view.tsx
index b7fc0249c51..ba385a3168e 100644
--- a/web/components/pages/pages-view.tsx
+++ b/web/components/pages/pages-view.tsx
@@ -12,7 +12,8 @@ import useUserAuth from "hooks/use-user-auth";
// components
import { CreateUpdatePageModal, DeletePageModal, SinglePageDetailedItem, SinglePageListItem } from "components/pages";
// ui
-import { EmptyState, Loader } from "components/ui";
+import { EmptyState } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { PlusIcon } from "@heroicons/react/24/outline";
// images
diff --git a/web/components/profile/overview/activity.tsx b/web/components/profile/overview/activity.tsx
index 0458123632f..e2cc01c8f24 100644
--- a/web/components/profile/overview/activity.tsx
+++ b/web/components/profile/overview/activity.tsx
@@ -7,7 +7,8 @@ import userService from "services/user.service";
// components
import { ActivityMessage } from "components/core";
// ui
-import { ProfileEmptyState, Icon, Loader } from "components/ui";
+import { ProfileEmptyState, Icon } from "components/ui";
+import { Loader } from "@plane/ui";
// image
import recentActivityEmptyState from "public/empty-state/recent_activity.svg";
// helpers
@@ -20,9 +21,7 @@ export const ProfileActivity = () => {
const { workspaceSlug, userId } = router.query;
const { data: userProfileActivity } = useSWR(
- workspaceSlug && userId
- ? USER_PROFILE_ACTIVITY(workspaceSlug.toString(), userId.toString())
- : null,
+ workspaceSlug && userId ? USER_PROFILE_ACTIVITY(workspaceSlug.toString(), userId.toString()) : null,
workspaceSlug && userId
? () => userService.getUserProfileActivity(workspaceSlug.toString(), userId.toString())
: null
@@ -54,9 +53,7 @@ export const ProfileActivity = () => {
-
- {activity.actor_detail.display_name}{" "}
-
+ {activity.actor_detail.display_name}
{activity.field ? (
) : (
diff --git a/web/components/profile/overview/priority-distribution.tsx b/web/components/profile/overview/priority-distribution.tsx
index d72985285dd..de88cf5175f 100644
--- a/web/components/profile/overview/priority-distribution.tsx
+++ b/web/components/profile/overview/priority-distribution.tsx
@@ -1,5 +1,6 @@
// ui
-import { BarGraph, ProfileEmptyState, Loader } from "components/ui";
+import { BarGraph, ProfileEmptyState } from "components/ui";
+import { Loader } from "@plane/ui";
// image
import emptyBarGraph from "public/empty-state/empty_bar_graph.svg";
// helpers
diff --git a/web/components/profile/overview/stats.tsx b/web/components/profile/overview/stats.tsx
index 0277ac5b387..f6ec73778cd 100644
--- a/web/components/profile/overview/stats.tsx
+++ b/web/components/profile/overview/stats.tsx
@@ -2,7 +2,8 @@ import { useRouter } from "next/router";
import Link from "next/link";
// ui
-import { Icon, Loader } from "components/ui";
+import { Icon } from "components/ui";
+import { Loader } from "@plane/ui";
// types
import { IUserProfileData } from "types";
diff --git a/web/components/profile/sidebar.tsx b/web/components/profile/sidebar.tsx
index 59cc5528bec..b61c20e369f 100644
--- a/web/components/profile/sidebar.tsx
+++ b/web/components/profile/sidebar.tsx
@@ -10,7 +10,8 @@ import userService from "services/user.service";
// hooks
import useUser from "hooks/use-user";
// ui
-import { Icon, Loader, Tooltip } from "components/ui";
+import { Icon, Tooltip } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { EditOutlined } from "@mui/icons-material";
// helpers
@@ -26,12 +27,9 @@ export const ProfileSidebar = () => {
const { user } = useUser();
const { data: userProjectsData } = useSWR(
+ workspaceSlug && userId ? USER_PROFILE_PROJECT_SEGREGATION(workspaceSlug.toString(), userId.toString()) : null,
workspaceSlug && userId
- ? USER_PROFILE_PROJECT_SEGREGATION(workspaceSlug.toString(), userId.toString())
- : null,
- workspaceSlug && userId
- ? () =>
- userService.getUserProfileProjectsSegregation(workspaceSlug.toString(), userId.toString())
+ ? () => userService.getUserProfileProjectsSegregation(workspaceSlug.toString(), userId.toString())
: null
);
@@ -54,8 +52,7 @@ export const ProfileSidebar = () => {
label: "Timezone",
value: (
- {timeString}{" "}
- {userProjectsData?.user_data.user_timezone}
+ {timeString} {userProjectsData?.user_data.user_timezone}
),
},
@@ -81,8 +78,7 @@ export const ProfileSidebar = () => {
)}
{
{userProjectsData.user_data.first_name} {userProjectsData.user_data.last_name}
-
- ({userProjectsData.user_data.display_name})
-
+
({userProjectsData.user_data.display_name})
{userDetails.map((detail) => (
@@ -121,10 +115,7 @@ export const ProfileSidebar = () => {
{userProjectsData.project_data.map((project, index) => {
const totalIssues =
- project.created_issues +
- project.assigned_issues +
- project.pending_issues +
- project.completed_issues;
+ project.created_issues + project.assigned_issues + project.pending_issues + project.completed_issues;
const completedIssuePercentage =
project.assigned_issues === 0
@@ -132,11 +123,7 @@ export const ProfileSidebar = () => {
: Math.round((project.completed_issues / project.assigned_issues) * 100);
return (
-
+
{({ open }) => (
@@ -154,9 +141,7 @@ export const ProfileSidebar = () => {
{project?.name.charAt(0)}
)}
-
- {project.name}
-
+ {project.name}
{project.assigned_issues > 0 && (
diff --git a/web/components/project/card-list.tsx b/web/components/project/card-list.tsx
index 0aff18b3755..1c8e5958e49 100644
--- a/web/components/project/card-list.tsx
+++ b/web/components/project/card-list.tsx
@@ -4,7 +4,8 @@ import { observer } from "mobx-react-lite";
import { useMobxStore } from "lib/mobx/store-provider";
// components
import { ProjectCard } from "components/project";
-import { Loader, EmptyState } from "components/ui";
+import { EmptyState } from "components/ui";
+import { Loader } from "@plane/ui";
// images
import emptyProject from "public/empty-state/project.svg";
// icons
diff --git a/web/components/project/form-loader.tsx b/web/components/project/form-loader.tsx
index 325807b83a6..039cdd25f6f 100644
--- a/web/components/project/form-loader.tsx
+++ b/web/components/project/form-loader.tsx
@@ -1,6 +1,6 @@
import { FC } from "react";
// components
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
export interface IProjectDetailsFormLoader {}
diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx
index 088e83f9b60..de5205bc9d9 100644
--- a/web/components/project/publish-project/modal.tsx
+++ b/web/components/project/publish-project/modal.tsx
@@ -6,8 +6,8 @@ import { Controller, useForm } from "react-hook-form";
// headless ui
import { Dialog, Transition } from "@headlessui/react";
// ui components
-import { Button } from "@plane/ui";
-import { ToggleSwitch, Icon, Loader } from "components/ui";
+import { Button, Loader } from "@plane/ui";
+import { ToggleSwitch, Icon } from "components/ui";
import { CustomPopover } from "./popover";
// mobx react lite
import { observer } from "mobx-react-lite";
diff --git a/web/components/ui/multi-level-dropdown.tsx b/web/components/ui/multi-level-dropdown.tsx
index cfdaa72d55c..1c435594305 100644
--- a/web/components/ui/multi-level-dropdown.tsx
+++ b/web/components/ui/multi-level-dropdown.tsx
@@ -3,7 +3,7 @@ import { Fragment, useState } from "react";
// headless ui
import { Menu, Transition } from "@headlessui/react";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { CheckIcon, ChevronDownIcon } from "@heroicons/react/24/outline";
import { ChevronRightIcon, ChevronLeftIcon } from "@heroicons/react/20/solid";
@@ -108,9 +108,7 @@ export const MultiLevelDropdown: React.FC
= ({
{option.hasChildren && option.id === openChildFor && (
= ({
{option.children ? (
{option.children.length === 0 ? (
-
- No {option.label} found
-
//if no children found, show this message.
+
No {option.label} found
//if no children found, show this message.
) : (
option.children.map((child) => {
if (child.element) return child.element;
@@ -144,9 +140,7 @@ export const MultiLevelDropdown: React.FC
= ({
>
{child.label}{" "}
);
diff --git a/web/components/ui/product-updates-modal.tsx b/web/components/ui/product-updates-modal.tsx
index 4f5bad7b3f1..2c88419ddd7 100644
--- a/web/components/ui/product-updates-modal.tsx
+++ b/web/components/ui/product-updates-modal.tsx
@@ -7,7 +7,8 @@ import { Dialog, Transition } from "@headlessui/react";
// services
import workspaceService from "services/workspace.service";
// components
-import { Loader, MarkdownRenderer } from "components/ui";
+import { MarkdownRenderer } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { XMarkIcon } from "@heroicons/react/20/solid";
// helpers
@@ -48,10 +49,7 @@ export const ProductUpdatesModal: React.FC = ({ isOpen, setIsOpen }) => {
>
-
+
Product Updates
setIsOpen(false)}>
diff --git a/web/components/workspace/issues-list.tsx b/web/components/workspace/issues-list.tsx
index 0cb8416c04b..a27951280e4 100644
--- a/web/components/workspace/issues-list.tsx
+++ b/web/components/workspace/issues-list.tsx
@@ -8,7 +8,7 @@ import { renderShortDateWithYearFormat } from "helpers/date-time.helper";
import { truncateText } from "helpers/string.helper";
// types
import { IIssueLite } from "types";
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
import { LayerDiagonalIcon } from "components/icons";
type Props = {
@@ -55,24 +55,15 @@ export const IssuesList: React.FC = ({ issues, type }) => {
const dateDifference = getDateDifference(new Date(date as string));
return (
-
+
6
- ? "text-red-500"
- : "text-yellow-400"
- : ""
+ type === "overdue" ? (dateDifference > 6 ? "text-red-500" : "text-yellow-400") : ""
}`}
>
- {type === "overdue" && (
-
- )}
+ {type === "overdue" && }
{dateDifference} {dateDifference > 1 ? "days" : "day"}
{truncateText(issue.name, 30)}
@@ -89,8 +80,7 @@ export const IssuesList: React.FC
= ({ issues, type }) => {
- No issues found. Use{" "}
- C {" "}
+ No issues found. Use C {" "}
shortcut to create a new issue
diff --git a/web/components/workspace/issues-stats.tsx b/web/components/workspace/issues-stats.tsx
index 2c874d5033b..76e6a197053 100644
--- a/web/components/workspace/issues-stats.tsx
+++ b/web/components/workspace/issues-stats.tsx
@@ -1,7 +1,8 @@
// components
import { ActivityGraph } from "components/workspace";
// ui
-import { Loader, Tooltip } from "components/ui";
+import { Tooltip } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { InformationCircleIcon } from "@heroicons/react/24/outline";
// types
@@ -23,10 +24,7 @@ export const IssuesStats: React.FC = ({ data }) => {
Issues assigned to you
{data ? (
- router.push(`/${workspaceSlug}/me/my-issues`)}
- >
+
router.push(`/${workspaceSlug}/me/my-issues`)}>
{data.assigned_issues_count}
) : (
diff --git a/web/components/workspace/sidebar-dropdown.tsx b/web/components/workspace/sidebar-dropdown.tsx
index f3bbc029b6d..8d9ae1ff6c0 100644
--- a/web/components/workspace/sidebar-dropdown.tsx
+++ b/web/components/workspace/sidebar-dropdown.tsx
@@ -14,7 +14,8 @@ import useToast from "hooks/use-toast";
import userService from "services/user.service";
import authenticationService from "services/authentication.service";
// components
-import { Avatar, Icon, Loader } from "components/ui";
+import { Avatar, Icon } from "components/ui";
+import { Loader } from "@plane/ui";
// icons
import { CheckIcon, PlusIcon } from "@heroicons/react/24/outline";
// helpers
@@ -171,9 +172,7 @@ export const WorkspaceSidebarDropdown = () => {
{truncateText(workspace.name, 18)}
@@ -261,18 +260,16 @@ export const WorkspaceSidebarDropdown = () => {
>
{user?.email}
- {profileLinks(workspaceSlug?.toString() ?? "", user?.id ?? "").map(
- (link, index) => (
-
-
-
-
- {link.name}
-
-
-
- )
- )}
+ {profileLinks(workspaceSlug?.toString() ?? "", user?.id ?? "").map((link, index) => (
+
+
+
+
+ {link.name}
+
+
+
+ ))}
Date: Wed, 11 Oct 2023 14:48:32 +0530
Subject: [PATCH 09/15] fix: build error fix
---
web/components/workspace/views/form.tsx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/web/components/workspace/views/form.tsx b/web/components/workspace/views/form.tsx
index eb85b59b3af..bfe08981ff6 100644
--- a/web/components/workspace/views/form.tsx
+++ b/web/components/workspace/views/form.tsx
@@ -1,7 +1,7 @@
import { useEffect } from "react";
import { useRouter } from "next/router";
import { observer } from "mobx-react-lite";
-import { Controller, Controller, useForm } from "react-hook-form";
+import { Controller, useForm } from "react-hook-form";
// mobx store
import { useMobxStore } from "lib/mobx/store-provider";
@@ -39,7 +39,6 @@ export const WorkspaceViewForm: React.FC = observer((props) => {
const { workspace: workspaceStore, project: projectStore } = useMobxStore();
const {
- control,
formState: { errors, isSubmitting },
handleSubmit,
control,
From 996c869530a2d9e0f316d50ecae08b01478e6830 Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 15:09:06 +0530
Subject: [PATCH 10/15] chore: button component refactor
---
packages/ui/dist/index.js | 6 ++--
packages/ui/dist/index.mjs | 6 ++--
.../ui/src/{buttons => button}/button.tsx | 0
.../ui/src/{buttons => button}/helper.tsx | 0
packages/ui/src/button/index.tsx | 1 +
packages/ui/src/index.tsx | 2 +-
web/components/headers/global-issues.tsx | 8 ++---
.../applied-filters/global-views-root.tsx | 6 ++--
web/components/ui/buttons/danger-button.tsx | 36 -------------------
web/components/ui/buttons/index.ts | 3 --
web/components/ui/buttons/primary-button.tsx | 32 -----------------
.../ui/buttons/secondary-button.tsx | 32 -----------------
web/components/ui/buttons/type.d.ts | 10 ------
web/components/ui/index.ts | 1 -
14 files changed, 15 insertions(+), 128 deletions(-)
rename packages/ui/src/{buttons => button}/button.tsx (100%)
rename packages/ui/src/{buttons => button}/helper.tsx (100%)
create mode 100644 packages/ui/src/button/index.tsx
delete mode 100644 web/components/ui/buttons/danger-button.tsx
delete mode 100644 web/components/ui/buttons/index.ts
delete mode 100644 web/components/ui/buttons/primary-button.tsx
delete mode 100644 web/components/ui/buttons/secondary-button.tsx
delete mode 100644 web/components/ui/buttons/type.d.ts
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index f85a5360a8f..33357be1def 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -35,10 +35,10 @@ __export(src_exports, {
});
module.exports = __toCommonJS(src_exports);
-// src/buttons/button.tsx
+// src/button/button.tsx
var React = __toESM(require("react"));
-// src/buttons/helper.tsx
+// src/button/helper.tsx
var buttonStyling = {
primary: {
default: `text-white bg-custom-primary-100`,
@@ -125,7 +125,7 @@ var getIconStyling = (size) => {
return icon;
};
-// src/buttons/button.tsx
+// src/button/button.tsx
var Button = React.forwardRef(
(props, ref) => {
const {
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 4c2215e8b66..94edef0d82f 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -1,7 +1,7 @@
-// src/buttons/button.tsx
+// src/button/button.tsx
import * as React from "react";
-// src/buttons/helper.tsx
+// src/button/helper.tsx
var buttonStyling = {
primary: {
default: `text-white bg-custom-primary-100`,
@@ -88,7 +88,7 @@ var getIconStyling = (size) => {
return icon;
};
-// src/buttons/button.tsx
+// src/button/button.tsx
var Button = React.forwardRef(
(props, ref) => {
const {
diff --git a/packages/ui/src/buttons/button.tsx b/packages/ui/src/button/button.tsx
similarity index 100%
rename from packages/ui/src/buttons/button.tsx
rename to packages/ui/src/button/button.tsx
diff --git a/packages/ui/src/buttons/helper.tsx b/packages/ui/src/button/helper.tsx
similarity index 100%
rename from packages/ui/src/buttons/helper.tsx
rename to packages/ui/src/button/helper.tsx
diff --git a/packages/ui/src/button/index.tsx b/packages/ui/src/button/index.tsx
new file mode 100644
index 00000000000..98d55acde68
--- /dev/null
+++ b/packages/ui/src/button/index.tsx
@@ -0,0 +1 @@
+export * from "./button";
diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx
index 2ef42f7b180..36eb08ef419 100644
--- a/packages/ui/src/index.tsx
+++ b/packages/ui/src/index.tsx
@@ -1,4 +1,4 @@
-export * from "./buttons/button";
+export * from "./button";
export * from "./form-fields";
export * from "./progress";
export * from "./spinners";
diff --git a/web/components/headers/global-issues.tsx b/web/components/headers/global-issues.tsx
index 962eb85b303..a976f070482 100644
--- a/web/components/headers/global-issues.tsx
+++ b/web/components/headers/global-issues.tsx
@@ -10,7 +10,8 @@ import { useMobxStore } from "lib/mobx/store-provider";
import { DisplayFiltersSelection, FiltersDropdown, FilterSelection } from "components/issues";
import { CreateUpdateWorkspaceViewModal } from "components/workspace";
// ui
-import { PrimaryButton, Tooltip } from "components/ui";
+import { Tooltip } from "components/ui";
+import { Button } from "@plane/ui";
// icons
import { List, PlusIcon, Sheet } from "lucide-react";
// types
@@ -148,10 +149,9 @@ export const GlobalIssuesHeader: React.FC = observer((props) => {
>
)}
- setCreateViewModal(true)}>
-
+ } onClick={() => setCreateViewModal(true)}>
New View
-
+
>
);
diff --git a/web/components/issues/issue-layouts/filters/applied-filters/global-views-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/global-views-root.tsx
index 9c5ba1db108..283fac906ce 100644
--- a/web/components/issues/issue-layouts/filters/applied-filters/global-views-root.tsx
+++ b/web/components/issues/issue-layouts/filters/applied-filters/global-views-root.tsx
@@ -7,7 +7,7 @@ import { useMobxStore } from "lib/mobx/store-provider";
// components
import { AppliedFiltersList } from "components/issues";
// ui
-import { PrimaryButton } from "components/ui";
+import { Button } from "@plane/ui";
// helpers
import { areFiltersDifferent } from "helpers/filter.helper";
// types
@@ -93,9 +93,9 @@ export const GlobalViewsAppliedFiltersRoot = observer(() => {
projects={workspaceSlug ? projectStore.projects[workspaceSlug.toString()] : undefined}
/>
{storedFilters && viewDetails && areFiltersDifferent(storedFilters, viewDetails.query_data.filters ?? {}) && (
-
+
Update view
-
+
)}
);
diff --git a/web/components/ui/buttons/danger-button.tsx b/web/components/ui/buttons/danger-button.tsx
deleted file mode 100644
index 3adb7012b1c..00000000000
--- a/web/components/ui/buttons/danger-button.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-// types
-import { ButtonProps } from "./type";
-
-export const DangerButton: React.FC = ({
- children,
- className = "",
- onClick,
- type = "button",
- disabled = false,
- loading = false,
- size = "sm",
- outline = false,
-}) => (
-
- {children}
-
-);
diff --git a/web/components/ui/buttons/index.ts b/web/components/ui/buttons/index.ts
deleted file mode 100644
index 0ce5c556a80..00000000000
--- a/web/components/ui/buttons/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from "./danger-button";
-export * from "./primary-button";
-export * from "./secondary-button";
diff --git a/web/components/ui/buttons/primary-button.tsx b/web/components/ui/buttons/primary-button.tsx
deleted file mode 100644
index 8817679b42d..00000000000
--- a/web/components/ui/buttons/primary-button.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-// types
-import { ButtonProps } from "./type";
-
-export const PrimaryButton: React.FC = ({
- children,
- className = "",
- onClick,
- type = "button",
- disabled = false,
- loading = false,
- size = "sm",
- outline = false,
-}) => (
-
- {children}
-
-);
diff --git a/web/components/ui/buttons/secondary-button.tsx b/web/components/ui/buttons/secondary-button.tsx
deleted file mode 100644
index a642dd65ffc..00000000000
--- a/web/components/ui/buttons/secondary-button.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-// types
-import { ButtonProps } from "./type";
-
-export const SecondaryButton: React.FC = ({
- children,
- className = "",
- onClick,
- type = "button",
- disabled = false,
- loading = false,
- size = "sm",
- outline = false,
-}) => (
-
- {children}
-
-);
diff --git a/web/components/ui/buttons/type.d.ts b/web/components/ui/buttons/type.d.ts
deleted file mode 100644
index b227887ef6e..00000000000
--- a/web/components/ui/buttons/type.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export type ButtonProps = {
- children: React.ReactNode;
- className?: string;
- onClick?: (e: any) => void;
- type?: "button" | "submit" | "reset";
- disabled?: boolean;
- loading?: boolean;
- size?: "sm" | "md" | "lg";
- outline?: boolean;
-};
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index 3f981553354..137f15a5885 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -1,4 +1,3 @@
-export * from "./buttons";
export * from "./dropdowns";
export * from "./graphs";
export * from "./input";
From 172f6242a7666de19d71e178bdaf1a76246be68d Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 15:11:59 +0530
Subject: [PATCH 11/15] chore: code refactor
---
web/components/ui/circular-progress.tsx | 39 ---------
web/components/ui/index.ts | 3 -
web/components/ui/input/index.tsx | 52 ------------
web/components/ui/input/types.d.ts | 15 ----
web/components/ui/text-area/index.tsx | 85 -------------------
web/components/ui/text-area/types.d.ts | 13 ---
.../[workspaceSlug]/workspace-views/index.tsx | 3 +-
7 files changed, 1 insertion(+), 209 deletions(-)
delete mode 100644 web/components/ui/circular-progress.tsx
delete mode 100644 web/components/ui/input/index.tsx
delete mode 100644 web/components/ui/input/types.d.ts
delete mode 100644 web/components/ui/text-area/index.tsx
delete mode 100644 web/components/ui/text-area/types.d.ts
diff --git a/web/components/ui/circular-progress.tsx b/web/components/ui/circular-progress.tsx
deleted file mode 100644
index af808ee8a7e..00000000000
--- a/web/components/ui/circular-progress.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import React, { useEffect, useState } from "react";
-
-export const CircularProgress = ({ progress }: { progress: number }) => {
- const [circumference, setCircumference] = useState(0);
-
- useEffect(() => {
- const radius = 40;
- const calcCircumference = 2 * Math.PI * radius;
- setCircumference(calcCircumference);
- }, []);
-
- const progressAngle = (progress / 100) * 360 >= 360 ? 359.9 : (progress / 100) * 360;
- const progressX = 50 + Math.cos((progressAngle - 90) * (Math.PI / 180)) * 40;
- const progressY = 50 + Math.sin((progressAngle - 90) * (Math.PI / 180)) * 40;
-
- return (
-
-
-
- 50 ? 1 : 0} 1 ${progressX} ${progressY}
- L50 50 Z`}
- strokeWidth="12"
- strokeLinecap="round"
- />
-
-
- );
-};
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index 137f15a5885..5857d44982e 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -1,7 +1,5 @@
export * from "./dropdowns";
export * from "./graphs";
-export * from "./input";
-export * from "./text-area";
export * from "./avatar";
export * from "./date";
export * from "./datepicker";
@@ -21,5 +19,4 @@ export * from "./markdown-to-component";
export * from "./product-updates-modal";
export * from "./integration-and-import-export-banner";
export * from "./range-datepicker";
-export * from "./circular-progress";
export * from "./profile-empty-state";
diff --git a/web/components/ui/input/index.tsx b/web/components/ui/input/index.tsx
deleted file mode 100644
index 867712a2907..00000000000
--- a/web/components/ui/input/index.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import * as React from "react";
-
-// types
-import { Props } from "./types";
-
-export const Input: React.FC = ({
- label,
- value,
- name,
- register,
- validations,
- error,
- mode = "primary",
- onChange,
- className = "",
- type,
- id,
- size = "rg",
- fullWidth = true,
- ...rest
-}) => (
- <>
- {label && (
-
- {label}
-
- )}
- {
- register && register(name ?? "").onChange(e);
- onChange && onChange(e);
- }}
- className={`block rounded-md bg-transparent text-sm focus:outline-none placeholder-custom-text-400 ${
- mode === "primary"
- ? "rounded-md border border-custom-border-200"
- : mode === "transparent"
- ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-custom-primary"
- : mode === "trueTransparent"
- ? "rounded border-none bg-transparent ring-0"
- : ""
- } ${error ? "border-red-500" : ""} ${error && mode === "primary" ? "bg-red-500/20" : ""} ${
- fullWidth ? "w-full" : ""
- } ${size === "rg" ? "px-3 py-2" : size === "lg" ? "p-3" : ""} ${className}`}
- {...rest}
- />
- {error?.message && {error.message}
}
- >
-);
diff --git a/web/components/ui/input/types.d.ts b/web/components/ui/input/types.d.ts
deleted file mode 100644
index 77a48b4b9a5..00000000000
--- a/web/components/ui/input/types.d.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import * as React from "react";
-import type { UseFormRegister, RegisterOptions } from "react-hook-form";
-
-export interface Props extends React.ComponentPropsWithoutRef<"input"> {
- label?: string;
- name?: string;
- value?: string | number | readonly string[];
- mode?: "primary" | "transparent" | "trueTransparent" | "secondary" | "disabled";
- register?: UseFormRegister;
- validations?: RegisterOptions;
- error?: any;
- className?: string;
- size?: "rg" | "lg";
- fullWidth?: boolean;
-}
diff --git a/web/components/ui/text-area/index.tsx b/web/components/ui/text-area/index.tsx
deleted file mode 100644
index a962281a41d..00000000000
--- a/web/components/ui/text-area/index.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import React, { useState, useRef, useEffect } from "react";
-
-// types
-import { Props } from "./types";
-
-// Updates the height of a when the value changes.
-const useAutoSizeTextArea = (textAreaRef: HTMLTextAreaElement | null, value: any) => {
- useEffect(() => {
- if (textAreaRef) {
- // We need to reset the height momentarily to get the correct scrollHeight for the textarea
- textAreaRef.style.height = "0px";
- const scrollHeight = textAreaRef.scrollHeight;
-
- // We then set the height directly, outside of the render loop
- // Trying to set this with state or a ref will product an incorrect value.
- textAreaRef.style.height = scrollHeight + "px";
- }
- }, [textAreaRef, value]);
-};
-
-export const TextArea: React.FC = ({
- id,
- label,
- className = "",
- value,
- placeholder,
- name,
- register,
- mode = "primary",
- rows,
- cols,
- disabled,
- error,
- validations,
- noPadding = false,
- onChange,
- ...rest
-}) => {
- const [textareaValue, setTextareaValue] = useState(value ?? "");
-
- const textAreaRef = useRef(null);
-
- useAutoSizeTextArea(textAreaRef.current, textareaValue);
-
- return (
- <>
- {label && (
-
- {label}
-
- )}
- {
- textAreaRef.current = e;
- if (register) register(name).ref(e);
- }}
- onChange={(e) => {
- register && register(name).onChange(e);
- onChange && onChange(e);
- setTextareaValue(e.target.value);
- }}
- className={`no-scrollbar w-full bg-transparent placeholder-custom-text-400 ${
- noPadding ? "" : "px-3 py-2"
- } outline-none ${
- mode === "primary"
- ? "rounded-md border border-custom-border-200"
- : mode === "transparent"
- ? "rounded border-none bg-transparent ring-0 transition-all focus:ring-1 focus:ring-theme"
- : ""
- } ${error ? "border-red-500" : ""} ${
- error && mode === "primary" ? "bg-red-100" : ""
- } ${className}`}
- {...rest}
- />
- {error?.message && {error.message}
}
- >
- );
-};
diff --git a/web/components/ui/text-area/types.d.ts b/web/components/ui/text-area/types.d.ts
deleted file mode 100644
index 27d031dee84..00000000000
--- a/web/components/ui/text-area/types.d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from "react";
-import type { UseFormRegister, RegisterOptions, FieldError } from "react-hook-form";
-
-export interface Props extends React.ComponentPropsWithoutRef<"textarea"> {
- label?: string;
- value?: string | number | readonly string[];
- name: string;
- register?: UseFormRegister;
- mode?: "primary" | "transparent" | "secondary" | "disabled";
- validations?: RegisterOptions;
- error?: FieldError | Merge>;
- noPadding?: boolean;
-}
diff --git a/web/pages/[workspaceSlug]/workspace-views/index.tsx b/web/pages/[workspaceSlug]/workspace-views/index.tsx
index 3d9285b7688..2a9d6b40a66 100644
--- a/web/pages/[workspaceSlug]/workspace-views/index.tsx
+++ b/web/pages/[workspaceSlug]/workspace-views/index.tsx
@@ -10,7 +10,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
import { GlobalDefaultViewListItem, GlobalViewsList } from "components/workspace";
import { GlobalIssuesHeader } from "components/headers";
// ui
-import { Input } from "components/ui";
+import { Input } from "@plane/ui";
// icons
import { MagnifyingGlassIcon } from "@heroicons/react/24/outline";
// types
@@ -51,7 +51,6 @@ const WorkspaceViews: NextPage = () => {
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search"
- mode="trueTransparent"
/>
From 0b5faf2f940c1dd051ed2aad1edcbf9bf1c4075f Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 15:53:26 +0530
Subject: [PATCH 12/15] chore: swap toggle switch component with plane/ui
package
---
packages/ui/dist/index.d.ts | 12 ++-
packages/ui/dist/index.js | 73 ++++++++++++-------
packages/ui/dist/index.mjs | 66 +++++++++++------
packages/ui/package.json | 1 +
packages/ui/src/button/index.tsx | 1 +
.../ui/src/button}/toggle-switch.tsx | 12 ++-
.../automation/auto-archive-automation.tsx | 21 ++----
.../automation/auto-close-automation.tsx | 9 +--
web/components/command-palette/command-k.tsx | 4 +-
.../core/filters/issues-view-filter.tsx | 3 +-
.../modals/existing-issues-list-modal.tsx | 4 +-
.../views/calendar-view/calendar-header.tsx | 40 +++-------
.../integration/github/import-data.tsx | 4 +-
.../integration/jira/import-users.tsx | 4 +-
.../integration/jira/jira-project-detail.tsx | 3 +-
web/components/issues/draft-issue-form.tsx | 4 +-
web/components/issues/form.tsx | 4 +-
.../calendar/dropdowns/options-dropdown.tsx | 2 +-
.../issues/parent-issues-list-modal.tsx | 4 +-
.../profile/profile-issues-view-options.tsx | 3 +-
.../project/publish-project/modal.tsx | 4 +-
web/components/ui/index.ts | 1 -
.../projects/[projectId]/pages/[pageId].tsx | 4 +-
.../[projectId]/settings/features.tsx | 2 +-
yarn.lock | 2 +-
25 files changed, 158 insertions(+), 129 deletions(-)
rename {web/components/ui => packages/ui/src/button}/toggle-switch.tsx (87%)
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index 3664cacd4cc..f368acbb1e2 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -15,6 +15,16 @@ interface ButtonProps extends React.ButtonHTMLAttributes {
}
declare const Button: React.ForwardRefExoticComponent>;
+interface IToggleSwitchProps {
+ value: boolean;
+ onChange: (value: boolean) => void;
+ label?: string;
+ size?: "sm" | "md" | "lg";
+ disabled?: boolean;
+ className?: string;
+}
+declare const ToggleSwitch: React.FC;
+
interface InputProps extends React.InputHTMLAttributes {
mode?: "primary" | "transparent" | "true-transparent";
inputSize?: "sm" | "md";
@@ -51,4 +61,4 @@ declare type ItemProps = {
width?: string;
};
-export { Button, ButtonProps, Input, InputProps, Loader, RadialProgressBar, Spinner, TextArea, TextAreaProps };
+export { Button, ButtonProps, Input, InputProps, Loader, RadialProgressBar, Spinner, TextArea, TextAreaProps, ToggleSwitch };
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index 33357be1def..a334583a6ce 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -31,7 +31,8 @@ __export(src_exports, {
Loader: () => Loader,
RadialProgressBar: () => RadialProgressBar,
Spinner: () => Spinner,
- TextArea: () => TextArea
+ TextArea: () => TextArea,
+ ToggleSwitch: () => ToggleSwitch
});
module.exports = __toCommonJS(src_exports);
@@ -157,9 +158,28 @@ var Button = React.forwardRef(
);
Button.displayName = "plane-ui-button";
-// src/form-fields/input.tsx
+// src/button/toggle-switch.tsx
var React2 = __toESM(require("react"));
-var Input = React2.forwardRef((props, ref) => {
+var import_react = require("@headlessui/react");
+var ToggleSwitch = (props) => {
+ const { value, onChange, label, size = "sm", disabled, className } = props;
+ return /* @__PURE__ */ React2.createElement(import_react.Switch, {
+ checked: value,
+ disabled,
+ onChange,
+ className: `relative flex-shrink-0 inline-flex ${size === "sm" ? "h-4 w-6" : size === "md" ? "h-5 w-8" : "h-6 w-10"} flex-shrink-0 cursor-pointer rounded-full border border-custom-border-200 transition-colors duration-200 ease-in-out focus:outline-none ${value ? "bg-custom-primary-100" : "bg-gray-700"} ${className || ""} ${disabled ? "cursor-not-allowed" : ""}`
+ }, /* @__PURE__ */ React2.createElement("span", {
+ className: "sr-only"
+ }, label), /* @__PURE__ */ React2.createElement("span", {
+ "aria-hidden": "true",
+ className: `self-center inline-block ${size === "sm" ? "h-2 w-2" : size === "md" ? "h-3 w-3" : "h-4 w-4"} transform rounded-full shadow ring-0 transition duration-200 ease-in-out ${value ? (size === "sm" ? "translate-x-3" : size === "md" ? "translate-x-4" : "translate-x-5") + " bg-white" : "translate-x-0.5 bg-custom-background-90"} ${disabled ? "cursor-not-allowed" : ""}`
+ }));
+};
+ToggleSwitch.displayName = "plane-ui-toggle-switch";
+
+// src/form-fields/input.tsx
+var React3 = __toESM(require("react"));
+var Input = React3.forwardRef((props, ref) => {
const {
id,
type,
@@ -170,7 +190,7 @@ var Input = React2.forwardRef((props, ref) => {
className = "",
...rest
} = props;
- return /* @__PURE__ */ React2.createElement("input", {
+ return /* @__PURE__ */ React3.createElement("input", {
id,
ref,
type,
@@ -182,9 +202,9 @@ var Input = React2.forwardRef((props, ref) => {
Input.displayName = "form-input-field";
// src/form-fields/textarea.tsx
-var React3 = __toESM(require("react"));
+var React4 = __toESM(require("react"));
var useAutoSizeTextArea = (textAreaRef, value) => {
- React3.useEffect(() => {
+ React4.useEffect(() => {
if (textAreaRef) {
textAreaRef.style.height = "0px";
const scrollHeight = textAreaRef.scrollHeight;
@@ -192,7 +212,7 @@ var useAutoSizeTextArea = (textAreaRef, value) => {
}
}, [textAreaRef, value]);
};
-var TextArea = React3.forwardRef(
+var TextArea = React4.forwardRef(
(props, ref) => {
const {
id,
@@ -205,9 +225,9 @@ var TextArea = React3.forwardRef(
className = "",
...rest
} = props;
- const textAreaRef = React3.useRef(ref);
+ const textAreaRef = React4.useRef(ref);
ref && useAutoSizeTextArea(textAreaRef == null ? void 0 : textAreaRef.current, value);
- return /* @__PURE__ */ React3.createElement("textarea", {
+ return /* @__PURE__ */ React4.createElement("textarea", {
id,
name,
ref: textAreaRef,
@@ -221,22 +241,22 @@ var TextArea = React3.forwardRef(
);
// src/progress/radial-progress.tsx
-var import_react = __toESM(require("react"));
+var import_react2 = __toESM(require("react"));
var RadialProgressBar = (props) => {
const { progress } = props;
- const [circumference, setCircumference] = (0, import_react.useState)(0);
- (0, import_react.useEffect)(() => {
+ const [circumference, setCircumference] = (0, import_react2.useState)(0);
+ (0, import_react2.useEffect)(() => {
const radius = 40;
const circumference2 = 2 * Math.PI * radius;
setCircumference(circumference2);
}, []);
const progressOffset = (100 - progress) / 100 * circumference;
- return /* @__PURE__ */ import_react.default.createElement("div", {
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
className: "relative h-4 w-4"
- }, /* @__PURE__ */ import_react.default.createElement("svg", {
+ }, /* @__PURE__ */ import_react2.default.createElement("svg", {
className: "absolute top-0 left-0",
viewBox: "0 0 100 100"
- }, /* @__PURE__ */ import_react.default.createElement("circle", {
+ }, /* @__PURE__ */ import_react2.default.createElement("circle", {
className: "stroke-current opacity-10",
cx: "50",
cy: "50",
@@ -244,7 +264,7 @@ var RadialProgressBar = (props) => {
strokeWidth: "12",
fill: "none",
strokeDasharray: `${circumference} ${circumference}`
- }), /* @__PURE__ */ import_react.default.createElement("circle", {
+ }), /* @__PURE__ */ import_react2.default.createElement("circle", {
className: `stroke-current`,
cx: "50",
cy: "50",
@@ -258,32 +278,32 @@ var RadialProgressBar = (props) => {
};
// src/spinners/circular-spinner.tsx
-var React5 = __toESM(require("react"));
-var Spinner = () => /* @__PURE__ */ React5.createElement("div", {
+var React6 = __toESM(require("react"));
+var Spinner = () => /* @__PURE__ */ React6.createElement("div", {
role: "status"
-}, /* @__PURE__ */ React5.createElement("svg", {
+}, /* @__PURE__ */ React6.createElement("svg", {
"aria-hidden": "true",
className: "mr-2 h-8 w-8 animate-spin fill-blue-600 text-custom-text-200",
viewBox: "0 0 100 101",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
-}, /* @__PURE__ */ React5.createElement("path", {
+}, /* @__PURE__ */ React6.createElement("path", {
d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
fill: "currentColor"
-}), /* @__PURE__ */ React5.createElement("path", {
+}), /* @__PURE__ */ React6.createElement("path", {
d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
fill: "currentFill"
-})), /* @__PURE__ */ React5.createElement("span", {
+})), /* @__PURE__ */ React6.createElement("span", {
className: "sr-only"
}, "Loading..."));
// src/loader.tsx
-var import_react2 = __toESM(require("react"));
-var Loader = ({ children, className = "" }) => /* @__PURE__ */ import_react2.default.createElement("div", {
+var import_react3 = __toESM(require("react"));
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ import_react3.default.createElement("div", {
className: `${className} animate-pulse`,
role: "status"
}, children);
-var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ import_react2.default.createElement("div", {
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ import_react3.default.createElement("div", {
className: "rounded-md bg-custom-background-80",
style: { height, width }
});
@@ -296,5 +316,6 @@ Loader.displayName = "plane-ui-loader";
Loader,
RadialProgressBar,
Spinner,
- TextArea
+ TextArea,
+ ToggleSwitch
});
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index 94edef0d82f..d185a5fa8fc 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -120,9 +120,28 @@ var Button = React.forwardRef(
);
Button.displayName = "plane-ui-button";
-// src/form-fields/input.tsx
+// src/button/toggle-switch.tsx
import * as React2 from "react";
-var Input = React2.forwardRef((props, ref) => {
+import { Switch } from "@headlessui/react";
+var ToggleSwitch = (props) => {
+ const { value, onChange, label, size = "sm", disabled, className } = props;
+ return /* @__PURE__ */ React2.createElement(Switch, {
+ checked: value,
+ disabled,
+ onChange,
+ className: `relative flex-shrink-0 inline-flex ${size === "sm" ? "h-4 w-6" : size === "md" ? "h-5 w-8" : "h-6 w-10"} flex-shrink-0 cursor-pointer rounded-full border border-custom-border-200 transition-colors duration-200 ease-in-out focus:outline-none ${value ? "bg-custom-primary-100" : "bg-gray-700"} ${className || ""} ${disabled ? "cursor-not-allowed" : ""}`
+ }, /* @__PURE__ */ React2.createElement("span", {
+ className: "sr-only"
+ }, label), /* @__PURE__ */ React2.createElement("span", {
+ "aria-hidden": "true",
+ className: `self-center inline-block ${size === "sm" ? "h-2 w-2" : size === "md" ? "h-3 w-3" : "h-4 w-4"} transform rounded-full shadow ring-0 transition duration-200 ease-in-out ${value ? (size === "sm" ? "translate-x-3" : size === "md" ? "translate-x-4" : "translate-x-5") + " bg-white" : "translate-x-0.5 bg-custom-background-90"} ${disabled ? "cursor-not-allowed" : ""}`
+ }));
+};
+ToggleSwitch.displayName = "plane-ui-toggle-switch";
+
+// src/form-fields/input.tsx
+import * as React3 from "react";
+var Input = React3.forwardRef((props, ref) => {
const {
id,
type,
@@ -133,7 +152,7 @@ var Input = React2.forwardRef((props, ref) => {
className = "",
...rest
} = props;
- return /* @__PURE__ */ React2.createElement("input", {
+ return /* @__PURE__ */ React3.createElement("input", {
id,
ref,
type,
@@ -145,9 +164,9 @@ var Input = React2.forwardRef((props, ref) => {
Input.displayName = "form-input-field";
// src/form-fields/textarea.tsx
-import * as React3 from "react";
+import * as React4 from "react";
var useAutoSizeTextArea = (textAreaRef, value) => {
- React3.useEffect(() => {
+ React4.useEffect(() => {
if (textAreaRef) {
textAreaRef.style.height = "0px";
const scrollHeight = textAreaRef.scrollHeight;
@@ -155,7 +174,7 @@ var useAutoSizeTextArea = (textAreaRef, value) => {
}
}, [textAreaRef, value]);
};
-var TextArea = React3.forwardRef(
+var TextArea = React4.forwardRef(
(props, ref) => {
const {
id,
@@ -168,9 +187,9 @@ var TextArea = React3.forwardRef(
className = "",
...rest
} = props;
- const textAreaRef = React3.useRef(ref);
+ const textAreaRef = React4.useRef(ref);
ref && useAutoSizeTextArea(textAreaRef == null ? void 0 : textAreaRef.current, value);
- return /* @__PURE__ */ React3.createElement("textarea", {
+ return /* @__PURE__ */ React4.createElement("textarea", {
id,
name,
ref: textAreaRef,
@@ -184,7 +203,7 @@ var TextArea = React3.forwardRef(
);
// src/progress/radial-progress.tsx
-import React4, { useState, useEffect as useEffect2 } from "react";
+import React5, { useState, useEffect as useEffect2 } from "react";
var RadialProgressBar = (props) => {
const { progress } = props;
const [circumference, setCircumference] = useState(0);
@@ -194,12 +213,12 @@ var RadialProgressBar = (props) => {
setCircumference(circumference2);
}, []);
const progressOffset = (100 - progress) / 100 * circumference;
- return /* @__PURE__ */ React4.createElement("div", {
+ return /* @__PURE__ */ React5.createElement("div", {
className: "relative h-4 w-4"
- }, /* @__PURE__ */ React4.createElement("svg", {
+ }, /* @__PURE__ */ React5.createElement("svg", {
className: "absolute top-0 left-0",
viewBox: "0 0 100 100"
- }, /* @__PURE__ */ React4.createElement("circle", {
+ }, /* @__PURE__ */ React5.createElement("circle", {
className: "stroke-current opacity-10",
cx: "50",
cy: "50",
@@ -207,7 +226,7 @@ var RadialProgressBar = (props) => {
strokeWidth: "12",
fill: "none",
strokeDasharray: `${circumference} ${circumference}`
- }), /* @__PURE__ */ React4.createElement("circle", {
+ }), /* @__PURE__ */ React5.createElement("circle", {
className: `stroke-current`,
cx: "50",
cy: "50",
@@ -221,32 +240,32 @@ var RadialProgressBar = (props) => {
};
// src/spinners/circular-spinner.tsx
-import * as React5 from "react";
-var Spinner = () => /* @__PURE__ */ React5.createElement("div", {
+import * as React6 from "react";
+var Spinner = () => /* @__PURE__ */ React6.createElement("div", {
role: "status"
-}, /* @__PURE__ */ React5.createElement("svg", {
+}, /* @__PURE__ */ React6.createElement("svg", {
"aria-hidden": "true",
className: "mr-2 h-8 w-8 animate-spin fill-blue-600 text-custom-text-200",
viewBox: "0 0 100 101",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
-}, /* @__PURE__ */ React5.createElement("path", {
+}, /* @__PURE__ */ React6.createElement("path", {
d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
fill: "currentColor"
-}), /* @__PURE__ */ React5.createElement("path", {
+}), /* @__PURE__ */ React6.createElement("path", {
d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
fill: "currentFill"
-})), /* @__PURE__ */ React5.createElement("span", {
+})), /* @__PURE__ */ React6.createElement("span", {
className: "sr-only"
}, "Loading..."));
// src/loader.tsx
-import React6 from "react";
-var Loader = ({ children, className = "" }) => /* @__PURE__ */ React6.createElement("div", {
+import React7 from "react";
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ React7.createElement("div", {
className: `${className} animate-pulse`,
role: "status"
}, children);
-var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ React6.createElement("div", {
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ React7.createElement("div", {
className: "rounded-md bg-custom-background-80",
style: { height, width }
});
@@ -258,5 +277,6 @@ export {
Loader,
RadialProgressBar,
Spinner,
- TextArea
+ TextArea,
+ ToggleSwitch
};
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 667ff24e253..9385a26c705 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -31,6 +31,7 @@
"access": "public"
},
"dependencies": {
+ "@headlessui/react": "^1.7.17",
"clsx": "^2.0.0"
}
}
diff --git a/packages/ui/src/button/index.tsx b/packages/ui/src/button/index.tsx
index 98d55acde68..f1a2d03d4bd 100644
--- a/packages/ui/src/button/index.tsx
+++ b/packages/ui/src/button/index.tsx
@@ -1 +1,2 @@
export * from "./button";
+export * from "./toggle-switch";
diff --git a/web/components/ui/toggle-switch.tsx b/packages/ui/src/button/toggle-switch.tsx
similarity index 87%
rename from web/components/ui/toggle-switch.tsx
rename to packages/ui/src/button/toggle-switch.tsx
index 5ad9377de11..9888dd205f9 100644
--- a/web/components/ui/toggle-switch.tsx
+++ b/packages/ui/src/button/toggle-switch.tsx
@@ -1,15 +1,17 @@
+import * as React from "react";
+
import { Switch } from "@headlessui/react";
-type Props = {
+interface IToggleSwitchProps {
value: boolean;
onChange: (value: boolean) => void;
label?: string;
size?: "sm" | "md" | "lg";
disabled?: boolean;
className?: string;
-};
+}
-export const ToggleSwitch: React.FC = (props) => {
+const ToggleSwitch: React.FC = (props) => {
const { value, onChange, label, size = "sm", disabled, className } = props;
return (
@@ -41,3 +43,7 @@ export const ToggleSwitch: React.FC = (props) => {
);
};
+
+ToggleSwitch.displayName = "plane-ui-toggle-switch";
+
+export { ToggleSwitch };
diff --git a/web/components/automation/auto-archive-automation.tsx b/web/components/automation/auto-archive-automation.tsx
index d0c9a1be6bf..563381e695e 100644
--- a/web/components/automation/auto-archive-automation.tsx
+++ b/web/components/automation/auto-archive-automation.tsx
@@ -1,7 +1,8 @@
import React, { useState } from "react";
// component
-import { CustomSelect, ToggleSwitch } from "components/ui";
+import { CustomSelect } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
import { SelectMonthModal } from "components/automation";
// icon
import { ArchiveRestore } from "lucide-react";
@@ -16,11 +17,7 @@ type Props = {
disabled?: boolean;
};
-export const AutoArchiveAutomation: React.FC = ({
- projectDetails,
- handleChange,
- disabled = false,
-}) => {
+export const AutoArchiveAutomation: React.FC = ({ projectDetails, handleChange, disabled = false }) => {
const [monthModal, setmonthModal] = useState(false);
const initialValues: Partial = { archive_in: 1 };
@@ -49,9 +46,7 @@ export const AutoArchiveAutomation: React.FC = ({
- projectDetails?.archive_in === 0
- ? handleChange({ archive_in: 1 })
- : handleChange({ archive_in: 0 })
+ projectDetails?.archive_in === 0 ? handleChange({ archive_in: 1 }) : handleChange({ archive_in: 0 })
}
size="sm"
disabled={disabled}
@@ -61,15 +56,11 @@ export const AutoArchiveAutomation: React.FC = ({
{projectDetails?.archive_in !== 0 && (
-
- Auto-archive issues that are closed for
-
+
Auto-archive issues that are closed for
{
handleChange({ archive_in: val });
}}
diff --git a/web/components/automation/auto-close-automation.tsx b/web/components/automation/auto-close-automation.tsx
index 664967d0faf..30beed9da50 100644
--- a/web/components/automation/auto-close-automation.tsx
+++ b/web/components/automation/auto-close-automation.tsx
@@ -5,8 +5,9 @@ import useSWR from "swr";
import { useRouter } from "next/router";
// component
-import { CustomSearchSelect, CustomSelect, Icon, ToggleSwitch } from "components/ui";
+import { CustomSearchSelect, CustomSelect, Icon } from "components/ui";
import { SelectMonthModal } from "components/automation";
+import { ToggleSwitch } from "@plane/ui";
// icons
import { Squares2X2Icon } from "@heroicons/react/24/outline";
import { StateGroupIcon } from "components/icons";
@@ -27,11 +28,7 @@ type Props = {
disabled?: boolean;
};
-export const AutoCloseAutomation: React.FC = ({
- projectDetails,
- handleChange,
- disabled = false,
-}) => {
+export const AutoCloseAutomation: React.FC = ({ projectDetails, handleChange, disabled = false }) => {
const [monthModal, setmonthModal] = useState(false);
const router = useRouter();
diff --git a/web/components/command-palette/command-k.tsx b/web/components/command-palette/command-k.tsx
index 53cdca7d78c..04c42f8cf68 100644
--- a/web/components/command-palette/command-k.tsx
+++ b/web/components/command-palette/command-k.tsx
@@ -26,8 +26,8 @@ import {
commandGroups,
} from "components/command-palette";
// ui
-import { Icon, ToggleSwitch, Tooltip } from "components/ui";
-import { Loader } from "@plane/ui";
+import { Icon, Tooltip } from "components/ui";
+import { Loader, ToggleSwitch } from "@plane/ui";
// icons
import { DiscordIcon, GithubIcon, SettingIcon } from "components/icons";
import { InboxIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/core/filters/issues-view-filter.tsx b/web/components/core/filters/issues-view-filter.tsx
index 79fa9c98439..a190ebfda33 100644
--- a/web/components/core/filters/issues-view-filter.tsx
+++ b/web/components/core/filters/issues-view-filter.tsx
@@ -11,7 +11,8 @@ import useEstimateOption from "hooks/use-estimate-option";
// components
import { SelectFilters } from "components/views";
// ui
-import { CustomMenu, ToggleSwitch, Tooltip } from "components/ui";
+import { CustomMenu, Tooltip } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
// icons
import { ChevronDownIcon } from "@heroicons/react/24/outline";
import {
diff --git a/web/components/core/modals/existing-issues-list-modal.tsx b/web/components/core/modals/existing-issues-list-modal.tsx
index 5b9a6c3c369..ea66eaa54f6 100644
--- a/web/components/core/modals/existing-issues-list-modal.tsx
+++ b/web/components/core/modals/existing-issues-list-modal.tsx
@@ -13,8 +13,8 @@ import useToast from "hooks/use-toast";
import useIssuesView from "hooks/use-issues-view";
import useDebounce from "hooks/use-debounce";
// ui
-import { Button, Loader } from "@plane/ui";
-import { ToggleSwitch, Tooltip } from "components/ui";
+import { Button, Loader, ToggleSwitch } from "@plane/ui";
+import { Tooltip } from "components/ui";
// icons
import { LaunchOutlined } from "@mui/icons-material";
import { MagnifyingGlassIcon, XMarkIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/core/views/calendar-view/calendar-header.tsx b/web/components/core/views/calendar-view/calendar-header.tsx
index fd69ed44315..931bd3b49a8 100644
--- a/web/components/core/views/calendar-view/calendar-header.tsx
+++ b/web/components/core/views/calendar-view/calendar-header.tsx
@@ -3,17 +3,12 @@ import React from "react";
// headless ui
import { Popover, Transition } from "@headlessui/react";
// ui
-import { CustomMenu, ToggleSwitch } from "components/ui";
+import { CustomMenu } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
// icons
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from "@heroicons/react/24/outline";
// helpers
-import {
- formatDate,
- isSameMonth,
- isSameYear,
- updateDateWithMonth,
- updateDateWithYear,
-} from "helpers/calendar.helper";
+import { formatDate, isSameMonth, isSameYear, updateDateWithMonth, updateDateWithYear } from "helpers/calendar.helper";
// constants
import { MONTHS_LIST, YEARS_LIST } from "constants/calendar";
@@ -24,12 +19,7 @@ type Props = {
setShowWeekEnds: React.Dispatch>;
};
-export const CalendarHeader: React.FC = ({
- currentDate,
- setCurrentDate,
- showWeekEnds,
- setShowWeekEnds,
-}) => (
+export const CalendarHeader: React.FC = ({ currentDate, setCurrentDate, showWeekEnds, setShowWeekEnds }) => (
@@ -37,8 +27,7 @@ export const CalendarHeader: React.FC = ({
<>
- {formatDate(currentDate, "Month")} {" "}
- {formatDate(currentDate, "yyyy")}
+ {formatDate(currentDate, "Month")} {formatDate(currentDate, "yyyy")}
@@ -69,13 +58,9 @@ export const CalendarHeader: React.FC = ({
{MONTHS_LIST.map((month) => (
- setCurrentDate(updateDateWithMonth(`${month.value}`, currentDate))
- }
+ onClick={() => setCurrentDate(updateDateWithMonth(`${month.value}`, currentDate))}
className={`px-2 py-2 text-xs text-custom-text-200 hover:font-medium hover:text-custom-text-100 ${
- isSameMonth(`${month.value}`, currentDate)
- ? "font-medium text-custom-text-100"
- : ""
+ isSameMonth(`${month.value}`, currentDate) ? "font-medium text-custom-text-100" : ""
}`}
>
{month.label}
@@ -93,11 +78,8 @@ export const CalendarHeader: React.FC = ({
className="cursor-pointer"
onClick={() => {
const previousMonthYear =
- currentDate.getMonth() === 0
- ? currentDate.getFullYear() - 1
- : currentDate.getFullYear();
- const previousMonthMonth =
- currentDate.getMonth() === 0 ? 11 : currentDate.getMonth() - 1;
+ currentDate.getMonth() === 0 ? currentDate.getFullYear() - 1 : currentDate.getFullYear();
+ const previousMonthMonth = currentDate.getMonth() === 0 ? 11 : currentDate.getMonth() - 1;
const previousMonthFirstDate = new Date(previousMonthYear, previousMonthMonth, 1);
@@ -110,9 +92,7 @@ export const CalendarHeader: React.FC = ({
className="cursor-pointer"
onClick={() => {
const nextMonthYear =
- currentDate.getMonth() === 11
- ? currentDate.getFullYear() + 1
- : currentDate.getFullYear();
+ currentDate.getMonth() === 11 ? currentDate.getFullYear() + 1 : currentDate.getFullYear();
const nextMonthMonth = (currentDate.getMonth() + 1) % 12;
const nextMonthFirstDate = new Date(nextMonthYear, nextMonthMonth, 1);
diff --git a/web/components/integration/github/import-data.tsx b/web/components/integration/github/import-data.tsx
index 380bcfa5248..32f76527765 100644
--- a/web/components/integration/github/import-data.tsx
+++ b/web/components/integration/github/import-data.tsx
@@ -7,8 +7,8 @@ import useProjects from "hooks/use-projects";
// components
import { SelectRepository, TFormValues, TIntegrationSteps } from "components/integration";
// ui
-import { Button } from "@plane/ui";
-import { CustomSearchSelect, ToggleSwitch } from "components/ui";
+import { Button, ToggleSwitch } from "@plane/ui";
+import { CustomSearchSelect } from "components/ui";
// helpers
import { truncateText } from "helpers/string.helper";
// types
diff --git a/web/components/integration/jira/import-users.tsx b/web/components/integration/jira/import-users.tsx
index 2379be6dd6c..d062a9bf5c7 100644
--- a/web/components/integration/jira/import-users.tsx
+++ b/web/components/integration/jira/import-users.tsx
@@ -16,8 +16,8 @@ import { WORKSPACE_MEMBERS_WITH_EMAIL } from "constants/fetch-keys";
import workspaceService from "services/workspace.service";
// components
-import { ToggleSwitch, CustomSelect, CustomSearchSelect, Avatar } from "components/ui";
-import { Input } from "@plane/ui";
+import { CustomSelect, CustomSearchSelect, Avatar } from "components/ui";
+import { Input, ToggleSwitch } from "@plane/ui";
import { IJiraImporterForm } from "types";
diff --git a/web/components/integration/jira/jira-project-detail.tsx b/web/components/integration/jira/jira-project-detail.tsx
index edd35231fbb..64a2e7e59cc 100644
--- a/web/components/integration/jira/jira-project-detail.tsx
+++ b/web/components/integration/jira/jira-project-detail.tsx
@@ -18,7 +18,8 @@ import { JIRA_IMPORTER_DETAIL } from "constants/fetch-keys";
import { IJiraImporterForm, IJiraMetadata } from "types";
// components
-import { Spinner, ToggleSwitch } from "components/ui";
+import { Spinner } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
import type { IJiraIntegrationData, TJiraIntegrationSteps } from ".";
diff --git a/web/components/issues/draft-issue-form.tsx b/web/components/issues/draft-issue-form.tsx
index 5c384c2b5f0..7b16117ccbc 100644
--- a/web/components/issues/draft-issue-form.tsx
+++ b/web/components/issues/draft-issue-form.tsx
@@ -24,8 +24,8 @@ import {
import { CreateStateModal } from "components/states";
import { CreateLabelModal } from "components/labels";
// ui
-import { CustomMenu, ToggleSwitch } from "components/ui";
-import { Button, Input } from "@plane/ui";
+import { CustomMenu } from "components/ui";
+import { Button, Input, ToggleSwitch } from "@plane/ui";
import { TipTapEditor } from "components/tiptap";
// icons
import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/issues/form.tsx b/web/components/issues/form.tsx
index f073f1e4b0a..3931ba58c3a 100644
--- a/web/components/issues/form.tsx
+++ b/web/components/issues/form.tsx
@@ -23,8 +23,8 @@ import {
import { CreateStateModal } from "components/states";
import { CreateLabelModal } from "components/labels";
// ui
-import { CustomMenu, ToggleSwitch } from "components/ui";
-import { Button, Input } from "@plane/ui";
+import { CustomMenu } from "components/ui";
+import { Button, Input, ToggleSwitch } from "@plane/ui";
import { TipTapEditor } from "components/tiptap";
// icons
import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx b/web/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
index fe14e32f63c..c02be508411 100644
--- a/web/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
+++ b/web/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
@@ -6,7 +6,7 @@ import { observer } from "mobx-react-lite";
// mobx store
import { useMobxStore } from "lib/mobx/store-provider";
// ui
-import { ToggleSwitch } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
// icons
import { Check, ChevronUp } from "lucide-react";
// types
diff --git a/web/components/issues/parent-issues-list-modal.tsx b/web/components/issues/parent-issues-list-modal.tsx
index c98ee8e14d9..8c74439a6f0 100644
--- a/web/components/issues/parent-issues-list-modal.tsx
+++ b/web/components/issues/parent-issues-list-modal.tsx
@@ -11,8 +11,8 @@ import useDebounce from "hooks/use-debounce";
// components
import { LayerDiagonalIcon } from "components/icons";
// ui
-import { ToggleSwitch, Tooltip } from "components/ui";
-import { Loader } from "@plane/ui";
+import { Tooltip } from "components/ui";
+import { Loader, ToggleSwitch } from "@plane/ui";
// icons
import { LaunchOutlined } from "@mui/icons-material";
import { MagnifyingGlassIcon } from "@heroicons/react/24/outline";
diff --git a/web/components/profile/profile-issues-view-options.tsx b/web/components/profile/profile-issues-view-options.tsx
index 2118c6eb955..56947a27464 100644
--- a/web/components/profile/profile-issues-view-options.tsx
+++ b/web/components/profile/profile-issues-view-options.tsx
@@ -10,7 +10,8 @@ import useEstimateOption from "hooks/use-estimate-option";
// components
import { MyIssuesSelectFilters } from "components/issues";
// ui
-import { CustomMenu, ToggleSwitch, Tooltip } from "components/ui";
+import { CustomMenu, Tooltip } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
// icons
import { ChevronDownIcon } from "@heroicons/react/24/outline";
import { FormatListBulletedOutlined, GridViewOutlined } from "@mui/icons-material";
diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx
index de5205bc9d9..7a16da91d0f 100644
--- a/web/components/project/publish-project/modal.tsx
+++ b/web/components/project/publish-project/modal.tsx
@@ -6,8 +6,8 @@ import { Controller, useForm } from "react-hook-form";
// headless ui
import { Dialog, Transition } from "@headlessui/react";
// ui components
-import { Button, Loader } from "@plane/ui";
-import { ToggleSwitch, Icon } from "components/ui";
+import { Button, Loader, ToggleSwitch } from "@plane/ui";
+import { Icon } from "components/ui";
import { CustomPopover } from "./popover";
// mobx react lite
import { observer } from "mobx-react-lite";
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index 5857d44982e..6e4a761b92d 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -14,7 +14,6 @@ export * from "./multi-level-select";
export * from "./progress-bar";
export * from "./spinner";
export * from "./tooltip";
-export * from "./toggle-switch";
export * from "./markdown-to-component";
export * from "./product-updates-modal";
export * from "./integration-and-import-export-banner";
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx
index 56b0fa27130..3e4fb3c33fb 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx
@@ -28,8 +28,8 @@ import { CreateLabelModal } from "components/labels";
import { CreateBlock } from "components/pages/create-block";
// ui
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
-import { CustomSearchSelect, EmptyState, ToggleSwitch, Tooltip } from "components/ui";
-import { TextArea, Loader } from "@plane/ui";
+import { CustomSearchSelect, EmptyState, Tooltip } from "components/ui";
+import { TextArea, Loader, ToggleSwitch } from "@plane/ui";
// images
import emptyPage from "public/empty-state/page.svg";
// icons
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx
index bd9e8222439..c9325d337a0 100644
--- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx
+++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx
@@ -15,7 +15,7 @@ import useUserAuth from "hooks/use-user-auth";
// components
import { SettingsSidebar } from "components/project";
// ui
-import { ToggleSwitch } from "components/ui";
+import { ToggleSwitch } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { ModuleIcon } from "components/icons";
diff --git a/yarn.lock b/yarn.lock
index 2f6c546da69..35cddaecdd4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1248,7 +1248,7 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.2.tgz#b7e9309ccce5a0a40ac482cb894f120dba2b357f"
integrity sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ==
-"@headlessui/react@^1.7.13", "@headlessui/react@^1.7.3":
+"@headlessui/react@^1.7.13", "@headlessui/react@^1.7.17", "@headlessui/react@^1.7.3":
version "1.7.17"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.17.tgz#a0ec23af21b527c030967245fd99776aa7352bc6"
integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==
From d98cd4a60ff58296392dad521bd67aafc64d780e Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 16:09:04 +0530
Subject: [PATCH 13/15] chore: swap spinner component with plane/ui package
---
.../issue/change-issue-state.tsx | 2 +-
.../core/views/calendar-view/calendar.tsx | 2 +-
.../spreadsheet-view/spreadsheet-view.tsx | 3 ++-
.../integration/jira/jira-project-detail.tsx | 3 +--
.../issue-layouts/calendar/calendar.tsx | 2 +-
.../issue-layouts/spreadsheet/module-root.tsx | 3 ++-
.../issues/issue-layouts/spreadsheet/root.tsx | 3 ++-
.../issues/sidebar-select/cycle.tsx | 3 ++-
.../issues/sidebar-select/label.tsx | 3 +--
.../issues/sidebar-select/module.tsx | 23 +++++--------------
.../issues/sidebar-select/state.tsx | 3 ++-
web/components/ui/index.ts | 1 -
web/components/ui/spinner.tsx | 23 -------------------
web/components/web-view/sub-issues.tsx | 2 +-
.../project-authorization-wrapper.tsx | 4 ++--
.../user-authorization-wrapper.tsx | 2 +-
.../workspace-authorization-wrapper.tsx | 3 +--
web/layouts/auth-layout/user-wrapper.tsx | 2 +-
web/layouts/auth-layout/workspace-wrapper.tsx | 3 +--
web/layouts/web-view-layout/index.tsx | 2 +-
web/pages/[workspaceSlug]/editor.tsx | 2 +-
.../[workspaceSlug]/me/profile/index.tsx | 4 ++--
.../me/profile/preferences.tsx | 2 +-
web/pages/[workspaceSlug]/settings/index.tsx | 4 ++--
web/pages/accounts/reset-password.tsx | 3 +--
web/pages/installations/[provider]/index.tsx | 2 +-
web/pages/m/[workspaceSlug]/editor.tsx | 3 +--
.../projects/[projectId]/issues/[issueId].tsx | 2 +-
web/pages/onboarding.tsx | 15 ++++--------
web/pages/workspace-member-invitation.tsx | 17 +++-----------
30 files changed, 46 insertions(+), 100 deletions(-)
delete mode 100644 web/components/ui/spinner.tsx
diff --git a/web/components/command-palette/issue/change-issue-state.tsx b/web/components/command-palette/issue/change-issue-state.tsx
index 3cc16c2365b..50e396da31d 100644
--- a/web/components/command-palette/issue/change-issue-state.tsx
+++ b/web/components/command-palette/issue/change-issue-state.tsx
@@ -10,7 +10,7 @@ import { Command } from "cmdk";
import issuesService from "services/issue.service";
import stateService from "services/project_state.service";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// icons
import { CheckIcon, StateGroupIcon } from "components/icons";
// helpers
diff --git a/web/components/core/views/calendar-view/calendar.tsx b/web/components/core/views/calendar-view/calendar.tsx
index 553c7b723f0..6ded660bd61 100644
--- a/web/components/core/views/calendar-view/calendar.tsx
+++ b/web/components/core/views/calendar-view/calendar.tsx
@@ -8,7 +8,7 @@ import issuesService from "services/issue.service";
import { SingleCalendarDate, CalendarHeader } from "components/core";
import { IssuePeekOverview } from "components/issues";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// helpers
import { renderDateFormat } from "helpers/date-time.helper";
import { startOfWeek, lastDayOfWeek, eachDayOfInterval, weekDayInterval, formatDate } from "helpers/calendar.helper";
diff --git a/web/components/core/views/spreadsheet-view/spreadsheet-view.tsx b/web/components/core/views/spreadsheet-view/spreadsheet-view.tsx
index 152ede98d05..258026a4b71 100644
--- a/web/components/core/views/spreadsheet-view/spreadsheet-view.tsx
+++ b/web/components/core/views/spreadsheet-view/spreadsheet-view.tsx
@@ -18,8 +18,9 @@ import {
SpreadsheetStateColumn,
SpreadsheetUpdatedOnColumn,
} from "components/core";
-import { CustomMenu, Icon, Spinner } from "components/ui";
+import { CustomMenu, Icon } from "components/ui";
import { IssuePeekOverview } from "components/issues";
+import { Spinner } from "@plane/ui";
// types
import { IIssue, IIssueDisplayFilterOptions, IIssueDisplayProperties, TIssueOrderByOptions } from "types";
// icon
diff --git a/web/components/integration/jira/jira-project-detail.tsx b/web/components/integration/jira/jira-project-detail.tsx
index 64a2e7e59cc..e9609dfec1b 100644
--- a/web/components/integration/jira/jira-project-detail.tsx
+++ b/web/components/integration/jira/jira-project-detail.tsx
@@ -18,8 +18,7 @@ import { JIRA_IMPORTER_DETAIL } from "constants/fetch-keys";
import { IJiraImporterForm, IJiraMetadata } from "types";
// components
-import { Spinner } from "components/ui";
-import { ToggleSwitch } from "@plane/ui";
+import { ToggleSwitch, Spinner } from "@plane/ui";
import type { IJiraIntegrationData, TJiraIntegrationSteps } from ".";
diff --git a/web/components/issues/issue-layouts/calendar/calendar.tsx b/web/components/issues/issue-layouts/calendar/calendar.tsx
index df359e97cf1..778feb57f52 100644
--- a/web/components/issues/issue-layouts/calendar/calendar.tsx
+++ b/web/components/issues/issue-layouts/calendar/calendar.tsx
@@ -5,7 +5,7 @@ import { useMobxStore } from "lib/mobx/store-provider";
// components
import { CalendarHeader, CalendarWeekDays, CalendarWeekHeader } from "components/issues";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// types
import { ICalendarWeek } from "./types";
import { IIssueGroupedStructure } from "store/issue";
diff --git a/web/components/issues/issue-layouts/spreadsheet/module-root.tsx b/web/components/issues/issue-layouts/spreadsheet/module-root.tsx
index 17abf5e33e9..fe291ac5dd3 100644
--- a/web/components/issues/issue-layouts/spreadsheet/module-root.tsx
+++ b/web/components/issues/issue-layouts/spreadsheet/module-root.tsx
@@ -11,7 +11,8 @@ import useProjectDetails from "hooks/use-project-details";
import { SpreadsheetColumns, SpreadsheetIssues } from "components/core";
import { IssuePeekOverview } from "components/issues";
// ui
-import { CustomMenu, Spinner } from "components/ui";
+import { CustomMenu } from "components/ui";
+import { Spinner } from "@plane/ui";
// icon
import { PlusIcon } from "@heroicons/react/24/outline";
// types
diff --git a/web/components/issues/issue-layouts/spreadsheet/root.tsx b/web/components/issues/issue-layouts/spreadsheet/root.tsx
index 4ceb15fc60f..0c2373dd8df 100644
--- a/web/components/issues/issue-layouts/spreadsheet/root.tsx
+++ b/web/components/issues/issue-layouts/spreadsheet/root.tsx
@@ -11,7 +11,8 @@ import useProjectDetails from "hooks/use-project-details";
import { SpreadsheetColumns, SpreadsheetIssues } from "components/core";
import { IssuePeekOverview } from "components/issues";
// ui
-import { CustomMenu, Spinner } from "components/ui";
+import { CustomMenu } from "components/ui";
+import { Spinner } from "@plane/ui";
// icon
import { PlusIcon } from "@heroicons/react/24/outline";
// types
diff --git a/web/components/issues/sidebar-select/cycle.tsx b/web/components/issues/sidebar-select/cycle.tsx
index 3080c1af221..5e567256165 100644
--- a/web/components/issues/sidebar-select/cycle.tsx
+++ b/web/components/issues/sidebar-select/cycle.tsx
@@ -8,7 +8,8 @@ import useSWR, { mutate } from "swr";
import issuesService from "services/issue.service";
import cyclesService from "services/cycles.service";
// ui
-import { Spinner, CustomSelect, Tooltip } from "components/ui";
+import { CustomSelect, Tooltip } from "components/ui";
+import { Spinner } from "@plane/ui";
// helper
import { truncateText } from "helpers/string.helper";
// types
diff --git a/web/components/issues/sidebar-select/label.tsx b/web/components/issues/sidebar-select/label.tsx
index 0899c848793..4e373a1c097 100644
--- a/web/components/issues/sidebar-select/label.tsx
+++ b/web/components/issues/sidebar-select/label.tsx
@@ -15,8 +15,7 @@ import issuesService from "services/issue.service";
// hooks
import useUser from "hooks/use-user";
// ui
-import { Spinner } from "components/ui";
-import { Input } from "@plane/ui";
+import { Input, Spinner } from "@plane/ui";
// icons
import { PlusIcon, RectangleGroupIcon, TagIcon, XMarkIcon } from "@heroicons/react/24/outline";
// types
diff --git a/web/components/issues/sidebar-select/module.tsx b/web/components/issues/sidebar-select/module.tsx
index c9599bdf467..a2f0e708d19 100644
--- a/web/components/issues/sidebar-select/module.tsx
+++ b/web/components/issues/sidebar-select/module.tsx
@@ -7,7 +7,8 @@ import useSWR, { mutate } from "swr";
// services
import modulesService from "services/modules.service";
// ui
-import { Spinner, CustomSelect, Tooltip } from "components/ui";
+import { CustomSelect, Tooltip } from "components/ui";
+import { Spinner } from "@plane/ui";
// helper
import { truncateText } from "helpers/string.helper";
// types
@@ -21,19 +22,13 @@ type Props = {
disabled?: boolean;
};
-export const SidebarModuleSelect: React.FC = ({
- issueDetail,
- handleModuleChange,
- disabled = false,
-}) => {
+export const SidebarModuleSelect: React.FC = ({ issueDetail, handleModuleChange, disabled = false }) => {
const router = useRouter();
const { workspaceSlug, projectId, issueId } = router.query;
const { data: modules } = useSWR(
workspaceSlug && projectId ? MODULE_LIST(projectId as string) : null,
- workspaceSlug && projectId
- ? () => modulesService.getModules(workspaceSlug as string, projectId as string)
- : null
+ workspaceSlug && projectId ? () => modulesService.getModules(workspaceSlug as string, projectId as string) : null
);
const removeIssueFromModule = (bridgeId: string, moduleId: string) => {
@@ -59,9 +54,7 @@ export const SidebarModuleSelect: React.FC = ({
m.id === issueModule?.module)?.name ?? "No module"
- }`}
+ tooltipContent={`${modules?.find((m) => m.id === issueModule?.module)?.name ?? "No module"}`}
>
= ({
disabled ? "cursor-not-allowed" : ""
}`}
>
-
+
{modules?.find((m) => m.id === issueModule?.module)?.name ?? "No module"}
diff --git a/web/components/issues/sidebar-select/state.tsx b/web/components/issues/sidebar-select/state.tsx
index 7c7970b5a8e..90ac18f64c2 100644
--- a/web/components/issues/sidebar-select/state.tsx
+++ b/web/components/issues/sidebar-select/state.tsx
@@ -7,7 +7,8 @@ import useSWR from "swr";
// services
import stateService from "services/project_state.service";
// ui
-import { Spinner, CustomSelect } from "components/ui";
+import { CustomSelect } from "components/ui";
+import { Spinner } from "@plane/ui";
// icons
import { StateGroupIcon } from "components/icons";
// helpers
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index 6e4a761b92d..517b6c25a77 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -12,7 +12,6 @@ export * from "./loader";
export * from "./multi-level-dropdown";
export * from "./multi-level-select";
export * from "./progress-bar";
-export * from "./spinner";
export * from "./tooltip";
export * from "./markdown-to-component";
export * from "./product-updates-modal";
diff --git a/web/components/ui/spinner.tsx b/web/components/ui/spinner.tsx
deleted file mode 100644
index b961880305b..00000000000
--- a/web/components/ui/spinner.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import * as React from "react";
-
-export const Spinner: React.FC = () => (
-
-);
diff --git a/web/components/web-view/sub-issues.tsx b/web/components/web-view/sub-issues.tsx
index a4e1809716c..8d44fd814b8 100644
--- a/web/components/web-view/sub-issues.tsx
+++ b/web/components/web-view/sub-issues.tsx
@@ -20,7 +20,7 @@ import { SUB_ISSUES } from "constants/fetch-keys";
import useUser from "hooks/use-user";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
import { IIssue } from "types";
// components
diff --git a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
index c3c9d588e25..98ee0d668f2 100644
--- a/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/project-authorization-wrapper.tsx
@@ -13,8 +13,8 @@ import AppSidebar from "layouts/app-layout-legacy/app-sidebar";
import { NotAuthorizedView, JoinProject } from "components/auth-screens";
import { CommandPalette } from "components/command-palette";
// ui
-import { Button } from "@plane/ui";
-import { EmptyState, Spinner } from "components/ui";
+import { Button, Spinner } from "@plane/ui";
+import { EmptyState } from "components/ui";
// icons
import { LayerDiagonalIcon } from "components/icons";
// images
diff --git a/web/layouts/auth-layout-legacy/user-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/user-authorization-wrapper.tsx
index 9e795aed778..8f323268b88 100644
--- a/web/layouts/auth-layout-legacy/user-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/user-authorization-wrapper.tsx
@@ -5,7 +5,7 @@ import useSWR from "swr";
// services
import userService from "services/user.service";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// fetch-keys
import { CURRENT_USER } from "constants/fetch-keys";
diff --git a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
index 6dfdf313141..94451a9bd3f 100644
--- a/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
+++ b/web/layouts/auth-layout-legacy/workspace-authorization-wrapper.tsx
@@ -14,11 +14,10 @@ import AppSidebar from "layouts/app-layout-legacy/app-sidebar";
import AppHeader from "layouts/app-layout-legacy/app-header";
import { UserAuthorizationLayout } from "./user-authorization-wrapper";
// components
-import { Button } from "@plane/ui";
+import { Button, Spinner } from "@plane/ui";
import { NotAuthorizedView, NotAWorkspaceMember } from "components/auth-screens";
import { CommandPalette } from "components/command-palette";
// icons
-import { Spinner } from "components/ui";
import { LayerDiagonalIcon } from "components/icons";
// fetch-keys
import { WORKSPACE_MEMBERS_ME } from "constants/fetch-keys";
diff --git a/web/layouts/auth-layout/user-wrapper.tsx b/web/layouts/auth-layout/user-wrapper.tsx
index e37b4064e5d..3c30910513b 100644
--- a/web/layouts/auth-layout/user-wrapper.tsx
+++ b/web/layouts/auth-layout/user-wrapper.tsx
@@ -4,7 +4,7 @@ import useSWR from "swr";
// services
import userService from "services/user.service";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// fetch-keys
import { CURRENT_USER } from "constants/fetch-keys";
diff --git a/web/layouts/auth-layout/workspace-wrapper.tsx b/web/layouts/auth-layout/workspace-wrapper.tsx
index 37d6a399ea3..5db665bfb92 100644
--- a/web/layouts/auth-layout/workspace-wrapper.tsx
+++ b/web/layouts/auth-layout/workspace-wrapper.tsx
@@ -5,8 +5,7 @@ import useSWR from "swr";
// services
import workspaceServices from "services/workspace.service";
// ui
-import { Spinner } from "components/ui";
-import { Button } from "@plane/ui";
+import { Button, Spinner } from "@plane/ui";
// fetch-keys
import { WORKSPACE_MEMBERS_ME } from "constants/fetch-keys";
diff --git a/web/layouts/web-view-layout/index.tsx b/web/layouts/web-view-layout/index.tsx
index 8a58407c3de..66039e971b5 100644
--- a/web/layouts/web-view-layout/index.tsx
+++ b/web/layouts/web-view-layout/index.tsx
@@ -11,7 +11,7 @@ import { CURRENT_USER } from "constants/fetch-keys";
import { AlertCircle } from "lucide-react";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
type Props = {
children: React.ReactNode;
diff --git a/web/pages/[workspaceSlug]/editor.tsx b/web/pages/[workspaceSlug]/editor.tsx
index e52e26d5739..1754e089309 100644
--- a/web/pages/[workspaceSlug]/editor.tsx
+++ b/web/pages/[workspaceSlug]/editor.tsx
@@ -5,7 +5,7 @@ import { Controller, useForm } from "react-hook-form";
import issuesService from "services/issue.service";
import { ICurrentUserResponse, IIssue } from "types";
import useReloadConfirmations from "hooks/use-reload-confirmation";
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
import Image404 from "public/404.svg";
import DefaultLayout from "layouts/default-layout";
import Image from "next/image";
diff --git a/web/pages/[workspaceSlug]/me/profile/index.tsx b/web/pages/[workspaceSlug]/me/profile/index.tsx
index d18a332f18f..0a19117702e 100644
--- a/web/pages/[workspaceSlug]/me/profile/index.tsx
+++ b/web/pages/[workspaceSlug]/me/profile/index.tsx
@@ -16,8 +16,8 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
import { ImagePickerPopover, ImageUploadModal } from "components/core";
import { SettingsSidebar } from "components/project";
// ui
-import { Button, Input } from "@plane/ui";
-import { CustomSearchSelect, CustomSelect, Spinner } from "components/ui";
+import { Button, Input, Spinner } from "@plane/ui";
+import { CustomSearchSelect, CustomSelect } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { UserIcon } from "@heroicons/react/24/outline";
diff --git a/web/pages/[workspaceSlug]/me/profile/preferences.tsx b/web/pages/[workspaceSlug]/me/profile/preferences.tsx
index bd8ea1fd04d..15357e95652 100644
--- a/web/pages/[workspaceSlug]/me/profile/preferences.tsx
+++ b/web/pages/[workspaceSlug]/me/profile/preferences.tsx
@@ -6,7 +6,7 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout-legacy";
// components
import { CustomThemeSelector, ThemeSwitch } from "components/core";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// types
import { ICustomTheme } from "types";
diff --git a/web/pages/[workspaceSlug]/settings/index.tsx b/web/pages/[workspaceSlug]/settings/index.tsx
index 84c6b86fbee..aadc38b2321 100644
--- a/web/pages/[workspaceSlug]/settings/index.tsx
+++ b/web/pages/[workspaceSlug]/settings/index.tsx
@@ -20,8 +20,8 @@ import { DeleteWorkspaceModal } from "components/workspace";
import { SettingsSidebar } from "components/project";
// ui
import { Disclosure, Transition } from "@headlessui/react";
-import { Spinner, CustomSelect, Icon } from "components/ui";
-import { Button, Input } from "@plane/ui";
+import { CustomSelect, Icon } from "components/ui";
+import { Button, Input, Spinner } from "@plane/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { Pencil } from "lucide-react";
diff --git a/web/pages/accounts/reset-password.tsx b/web/pages/accounts/reset-password.tsx
index 977a21a7ee6..533f9df1204 100644
--- a/web/pages/accounts/reset-password.tsx
+++ b/web/pages/accounts/reset-password.tsx
@@ -14,8 +14,7 @@ import userService from "services/user.service";
// layouts
import DefaultLayout from "layouts/default-layout";
// ui
-import { Button, Input } from "@plane/ui";
-import { Spinner } from "components/ui";
+import { Button, Input, Spinner } from "@plane/ui";
// images
import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png";
// types
diff --git a/web/pages/installations/[provider]/index.tsx b/web/pages/installations/[provider]/index.tsx
index 15dad934429..abdcf94cc10 100644
--- a/web/pages/installations/[provider]/index.tsx
+++ b/web/pages/installations/[provider]/index.tsx
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
// services
import appInstallationsService from "services/app_installation.service";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
const AppPostInstallation = () => {
const router = useRouter();
diff --git a/web/pages/m/[workspaceSlug]/editor.tsx b/web/pages/m/[workspaceSlug]/editor.tsx
index 971c7135e6a..a613aff4155 100644
--- a/web/pages/m/[workspaceSlug]/editor.tsx
+++ b/web/pages/m/[workspaceSlug]/editor.tsx
@@ -15,8 +15,7 @@ import WebViewLayout from "layouts/web-view-layout";
// components
import { TipTapEditor } from "components/tiptap";
-import { Spinner } from "components/ui";
-import { Button } from "@plane/ui";
+import { Button, Spinner } from "@plane/ui";
const Editor: NextPage = () => {
const [isLoading, setIsLoading] = useState(false);
diff --git a/web/pages/m/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx b/web/pages/m/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx
index eb3df545893..3d25987cb9c 100644
--- a/web/pages/m/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx
+++ b/web/pages/m/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx
@@ -24,7 +24,7 @@ import useProjectMembers from "hooks/use-project-members";
import WebViewLayout from "layouts/web-view-layout";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// components
import {
diff --git a/web/pages/onboarding.tsx b/web/pages/onboarding.tsx
index 51148b19e35..169fa1db184 100644
--- a/web/pages/onboarding.tsx
+++ b/web/pages/onboarding.tsx
@@ -17,7 +17,7 @@ import DefaultLayout from "layouts/default-layout";
// components
import { InviteMembers, JoinWorkspaces, UserDetails, Workspace } from "components/onboarding";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// images
import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png";
import BlackHorizontalLogo from "public/plane-logos/black-horizontal-with-blue-logo.svg";
@@ -38,9 +38,7 @@ const Onboarding: NextPage = () => {
const { workspaces } = useWorkspaces();
const userWorkspaces = workspaces?.filter((w) => w.created_by === user?.id);
- const { data: invitations } = useSWR(USER_WORKSPACE_INVITATIONS, () =>
- workspaceService.userWorkspaceInvitations()
- );
+ const { data: invitations } = useSWR(USER_WORKSPACE_INVITATIONS, () => workspaceService.userWorkspaceInvitations());
// update last active workspace details
const updateLastWorkspace = async () => {
@@ -129,13 +127,8 @@ const Onboarding: NextPage = () => {
if (!onboardingStep.profile_complete && step !== 1) setStep(1);
if (onboardingStep.profile_complete) {
- if (!onboardingStep.workspace_join && invitations.length > 0 && step !== 2 && step !== 4)
- setStep(4);
- else if (
- !onboardingStep.workspace_create &&
- (step !== 4 || onboardingStep.workspace_join) &&
- step !== 2
- )
+ if (!onboardingStep.workspace_join && invitations.length > 0 && step !== 2 && step !== 4) setStep(4);
+ else if (!onboardingStep.workspace_create && (step !== 4 || onboardingStep.workspace_join) && step !== 2)
setStep(2);
}
diff --git a/web/pages/workspace-member-invitation.tsx b/web/pages/workspace-member-invitation.tsx
index e351310a43e..86bce7f5192 100644
--- a/web/pages/workspace-member-invitation.tsx
+++ b/web/pages/workspace-member-invitation.tsx
@@ -3,14 +3,7 @@ import React from "react";
import { useRouter } from "next/router";
import useSWR from "swr";
-import {
- CheckIcon,
- CubeIcon,
- ShareIcon,
- StarIcon,
- UserIcon,
- XMarkIcon,
-} from "@heroicons/react/24/outline";
+import { CheckIcon, CubeIcon, ShareIcon, StarIcon, UserIcon, XMarkIcon } from "@heroicons/react/24/outline";
// swr
// services
import workspaceService from "services/workspace.service";
@@ -19,7 +12,7 @@ import useUser from "hooks/use-user";
// layouts
import DefaultLayout from "layouts/default-layout";
// ui
-import { Spinner } from "components/ui";
+import { Spinner } from "@plane/ui";
// icons
import { EmptySpace, EmptySpaceItem } from "components/ui/empty-space";
// types
@@ -77,11 +70,7 @@ const WorkspaceInvitation: NextPage = () => {
title={`You are already a member of ${invitationDetail.workspace.name}`}
description="Your workspace is where you'll create projects, collaborate on your issues, and organize different streams of work in your Plane account."
>
- router.push("/")}
- />
+ router.push("/")} />
>
) : (
From 4f55a52a925bfbf29f0ab2929b59345f76a4d91c Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 16:16:35 +0530
Subject: [PATCH 14/15] chore: swap progress bar componenet with plan/ui
package
---
packages/ui/dist/index.d.ts | 12 +++-
packages/ui/dist/index.js | 70 ++++++++++++++++---
packages/ui/dist/index.mjs | 69 +++++++++++++++---
packages/ui/src/progress/index.tsx | 1 +
.../ui/src/progress}/progress-bar.tsx | 16 +++--
.../core/sidebar/single-progress-stats.tsx | 7 +-
web/components/cycles/sidebar.tsx | 4 +-
web/components/modules/sidebar.tsx | 4 +-
web/components/ui/index.ts | 1 -
9 files changed, 151 insertions(+), 33 deletions(-)
rename {web/components/ui => packages/ui/src/progress}/progress-bar.tsx (80%)
diff --git a/packages/ui/dist/index.d.ts b/packages/ui/dist/index.d.ts
index f368acbb1e2..e3b79002451 100644
--- a/packages/ui/dist/index.d.ts
+++ b/packages/ui/dist/index.d.ts
@@ -45,6 +45,16 @@ interface IRadialProgressBar {
}
declare const RadialProgressBar: FC;
+declare type Props$1 = {
+ maxValue?: number;
+ value?: number;
+ radius?: number;
+ strokeWidth?: number;
+ activeStrokeColor?: string;
+ inactiveStrokeColor?: string;
+};
+declare const ProgressBar: React__default.FC;
+
declare const Spinner: React.FC;
declare type Props = {
@@ -61,4 +71,4 @@ declare type ItemProps = {
width?: string;
};
-export { Button, ButtonProps, Input, InputProps, Loader, RadialProgressBar, Spinner, TextArea, TextAreaProps, ToggleSwitch };
+export { Button, ButtonProps, Input, InputProps, Loader, ProgressBar, RadialProgressBar, Spinner, TextArea, TextAreaProps, ToggleSwitch };
diff --git a/packages/ui/dist/index.js b/packages/ui/dist/index.js
index a334583a6ce..7ac83b1aece 100644
--- a/packages/ui/dist/index.js
+++ b/packages/ui/dist/index.js
@@ -29,6 +29,7 @@ __export(src_exports, {
Button: () => Button,
Input: () => Input,
Loader: () => Loader,
+ ProgressBar: () => ProgressBar,
RadialProgressBar: () => RadialProgressBar,
Spinner: () => Spinner,
TextArea: () => TextArea,
@@ -277,33 +278,83 @@ var RadialProgressBar = (props) => {
})));
};
+// src/progress/progress-bar.tsx
+var import_react3 = __toESM(require("react"));
+var ProgressBar = ({
+ maxValue = 0,
+ value = 0,
+ radius = 8,
+ strokeWidth = 2,
+ activeStrokeColor = "#3e98c7",
+ inactiveStrokeColor = "#ddd"
+}) => {
+ const generatePie = (value2) => {
+ const x = radius - Math.cos(2 * Math.PI / (100 / value2)) * radius;
+ const y = radius + Math.sin(2 * Math.PI / (100 / value2)) * radius;
+ const long = value2 <= 50 ? 0 : 1;
+ const d = `M${radius} ${radius} L${radius} ${0} A${radius} ${radius} 0 ${long} 1 ${y} ${x} Z`;
+ return d;
+ };
+ const calculatePieValue = (numberOfBars) => {
+ const angle = 360 / numberOfBars;
+ const pieValue = Math.floor(angle / 4);
+ return pieValue < 1 ? 1 : Math.floor(angle / 4);
+ };
+ const renderPie = (i) => {
+ const DIRECTION = -1;
+ const primaryRotationAngle = (maxValue - 1) * (360 / maxValue);
+ const rotationAngle = -1 * DIRECTION * primaryRotationAngle + i * DIRECTION * primaryRotationAngle;
+ const rotationTransformation = `rotate(${rotationAngle}, ${radius}, ${radius})`;
+ const pieValue = calculatePieValue(maxValue);
+ const dValue = generatePie(pieValue);
+ const fillColor = value > 0 && i <= value ? activeStrokeColor : inactiveStrokeColor;
+ return /* @__PURE__ */ import_react3.default.createElement("path", {
+ style: { opacity: i === 0 ? 0 : 1 },
+ key: i,
+ d: dValue,
+ fill: fillColor,
+ transform: rotationTransformation
+ });
+ };
+ const renderOuterCircle = () => [...Array(maxValue + 1)].map((e, i) => renderPie(i));
+ return /* @__PURE__ */ import_react3.default.createElement("svg", {
+ width: radius * 2,
+ height: radius * 2
+ }, renderOuterCircle(), /* @__PURE__ */ import_react3.default.createElement("circle", {
+ r: radius - strokeWidth,
+ cx: radius,
+ cy: radius,
+ className: "progress-bar"
+ }));
+};
+
// src/spinners/circular-spinner.tsx
-var React6 = __toESM(require("react"));
-var Spinner = () => /* @__PURE__ */ React6.createElement("div", {
+var React7 = __toESM(require("react"));
+var Spinner = () => /* @__PURE__ */ React7.createElement("div", {
role: "status"
-}, /* @__PURE__ */ React6.createElement("svg", {
+}, /* @__PURE__ */ React7.createElement("svg", {
"aria-hidden": "true",
className: "mr-2 h-8 w-8 animate-spin fill-blue-600 text-custom-text-200",
viewBox: "0 0 100 101",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
-}, /* @__PURE__ */ React6.createElement("path", {
+}, /* @__PURE__ */ React7.createElement("path", {
d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
fill: "currentColor"
-}), /* @__PURE__ */ React6.createElement("path", {
+}), /* @__PURE__ */ React7.createElement("path", {
d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
fill: "currentFill"
-})), /* @__PURE__ */ React6.createElement("span", {
+})), /* @__PURE__ */ React7.createElement("span", {
className: "sr-only"
}, "Loading..."));
// src/loader.tsx
-var import_react3 = __toESM(require("react"));
-var Loader = ({ children, className = "" }) => /* @__PURE__ */ import_react3.default.createElement("div", {
+var import_react4 = __toESM(require("react"));
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ import_react4.default.createElement("div", {
className: `${className} animate-pulse`,
role: "status"
}, children);
-var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ import_react3.default.createElement("div", {
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ import_react4.default.createElement("div", {
className: "rounded-md bg-custom-background-80",
style: { height, width }
});
@@ -314,6 +365,7 @@ Loader.displayName = "plane-ui-loader";
Button,
Input,
Loader,
+ ProgressBar,
RadialProgressBar,
Spinner,
TextArea,
diff --git a/packages/ui/dist/index.mjs b/packages/ui/dist/index.mjs
index d185a5fa8fc..d9112b83216 100644
--- a/packages/ui/dist/index.mjs
+++ b/packages/ui/dist/index.mjs
@@ -239,33 +239,83 @@ var RadialProgressBar = (props) => {
})));
};
+// src/progress/progress-bar.tsx
+import React6 from "react";
+var ProgressBar = ({
+ maxValue = 0,
+ value = 0,
+ radius = 8,
+ strokeWidth = 2,
+ activeStrokeColor = "#3e98c7",
+ inactiveStrokeColor = "#ddd"
+}) => {
+ const generatePie = (value2) => {
+ const x = radius - Math.cos(2 * Math.PI / (100 / value2)) * radius;
+ const y = radius + Math.sin(2 * Math.PI / (100 / value2)) * radius;
+ const long = value2 <= 50 ? 0 : 1;
+ const d = `M${radius} ${radius} L${radius} ${0} A${radius} ${radius} 0 ${long} 1 ${y} ${x} Z`;
+ return d;
+ };
+ const calculatePieValue = (numberOfBars) => {
+ const angle = 360 / numberOfBars;
+ const pieValue = Math.floor(angle / 4);
+ return pieValue < 1 ? 1 : Math.floor(angle / 4);
+ };
+ const renderPie = (i) => {
+ const DIRECTION = -1;
+ const primaryRotationAngle = (maxValue - 1) * (360 / maxValue);
+ const rotationAngle = -1 * DIRECTION * primaryRotationAngle + i * DIRECTION * primaryRotationAngle;
+ const rotationTransformation = `rotate(${rotationAngle}, ${radius}, ${radius})`;
+ const pieValue = calculatePieValue(maxValue);
+ const dValue = generatePie(pieValue);
+ const fillColor = value > 0 && i <= value ? activeStrokeColor : inactiveStrokeColor;
+ return /* @__PURE__ */ React6.createElement("path", {
+ style: { opacity: i === 0 ? 0 : 1 },
+ key: i,
+ d: dValue,
+ fill: fillColor,
+ transform: rotationTransformation
+ });
+ };
+ const renderOuterCircle = () => [...Array(maxValue + 1)].map((e, i) => renderPie(i));
+ return /* @__PURE__ */ React6.createElement("svg", {
+ width: radius * 2,
+ height: radius * 2
+ }, renderOuterCircle(), /* @__PURE__ */ React6.createElement("circle", {
+ r: radius - strokeWidth,
+ cx: radius,
+ cy: radius,
+ className: "progress-bar"
+ }));
+};
+
// src/spinners/circular-spinner.tsx
-import * as React6 from "react";
-var Spinner = () => /* @__PURE__ */ React6.createElement("div", {
+import * as React7 from "react";
+var Spinner = () => /* @__PURE__ */ React7.createElement("div", {
role: "status"
-}, /* @__PURE__ */ React6.createElement("svg", {
+}, /* @__PURE__ */ React7.createElement("svg", {
"aria-hidden": "true",
className: "mr-2 h-8 w-8 animate-spin fill-blue-600 text-custom-text-200",
viewBox: "0 0 100 101",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
-}, /* @__PURE__ */ React6.createElement("path", {
+}, /* @__PURE__ */ React7.createElement("path", {
d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
fill: "currentColor"
-}), /* @__PURE__ */ React6.createElement("path", {
+}), /* @__PURE__ */ React7.createElement("path", {
d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
fill: "currentFill"
-})), /* @__PURE__ */ React6.createElement("span", {
+})), /* @__PURE__ */ React7.createElement("span", {
className: "sr-only"
}, "Loading..."));
// src/loader.tsx
-import React7 from "react";
-var Loader = ({ children, className = "" }) => /* @__PURE__ */ React7.createElement("div", {
+import React8 from "react";
+var Loader = ({ children, className = "" }) => /* @__PURE__ */ React8.createElement("div", {
className: `${className} animate-pulse`,
role: "status"
}, children);
-var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ React7.createElement("div", {
+var Item = ({ height = "auto", width = "auto" }) => /* @__PURE__ */ React8.createElement("div", {
className: "rounded-md bg-custom-background-80",
style: { height, width }
});
@@ -275,6 +325,7 @@ export {
Button,
Input,
Loader,
+ ProgressBar,
RadialProgressBar,
Spinner,
TextArea,
diff --git a/packages/ui/src/progress/index.tsx b/packages/ui/src/progress/index.tsx
index caee5259d3a..288a0c1fc46 100644
--- a/packages/ui/src/progress/index.tsx
+++ b/packages/ui/src/progress/index.tsx
@@ -1 +1,2 @@
export * from "./radial-progress";
+export * from "./progress-bar";
diff --git a/web/components/ui/progress-bar.tsx b/packages/ui/src/progress/progress-bar.tsx
similarity index 80%
rename from web/components/ui/progress-bar.tsx
rename to packages/ui/src/progress/progress-bar.tsx
index 8ac0b1e1e05..d241e3d5e50 100644
--- a/web/components/ui/progress-bar.tsx
+++ b/packages/ui/src/progress/progress-bar.tsx
@@ -40,11 +40,13 @@ export const ProgressBar: React.FC = ({
// Rotation Calc
const primaryRotationAngle = (maxValue - 1) * (360 / maxValue);
const rotationAngle =
- -1 * DIRECTION * primaryRotationAngle + i * DIRECTION * primaryRotationAngle;
+ -1 * DIRECTION * primaryRotationAngle +
+ i * DIRECTION * primaryRotationAngle;
const rotationTransformation = `rotate(${rotationAngle}, ${radius}, ${radius})`;
const pieValue = calculatePieValue(maxValue);
const dValue = generatePie(pieValue);
- const fillColor = value > 0 && i <= value ? activeStrokeColor : inactiveStrokeColor;
+ const fillColor =
+ value > 0 && i <= value ? activeStrokeColor : inactiveStrokeColor;
return (
= ({
};
// combining the Pies
- const renderOuterCircle = () => [...Array(maxValue + 1)].map((e, i) => renderPie(i));
+ const renderOuterCircle = () =>
+ [...Array(maxValue + 1)].map((e, i) => renderPie(i));
return (
{renderOuterCircle()}
-
+
);
};
diff --git a/web/components/core/sidebar/single-progress-stats.tsx b/web/components/core/sidebar/single-progress-stats.tsx
index 1498c9badb9..3ff214b5713 100644
--- a/web/components/core/sidebar/single-progress-stats.tsx
+++ b/web/components/core/sidebar/single-progress-stats.tsx
@@ -1,6 +1,6 @@
import React from "react";
-import { ProgressBar } from "components/ui";
+import { ProgressBar } from "@plane/ui";
type TSingleProgressStatsProps = {
title: any;
@@ -30,10 +30,7 @@ export const SingleProgressStats: React.FC = ({
- {isNaN(Math.floor((completed / total) * 100))
- ? "0"
- : Math.floor((completed / total) * 100)}
- %
+ {isNaN(Math.floor((completed / total) * 100)) ? "0" : Math.floor((completed / total) * 100)}%
of {total}
diff --git a/web/components/cycles/sidebar.tsx b/web/components/cycles/sidebar.tsx
index 4b2e1efeaa4..aa52aa27fa3 100644
--- a/web/components/cycles/sidebar.tsx
+++ b/web/components/cycles/sidebar.tsx
@@ -17,8 +17,8 @@ import { SidebarProgressStats } from "components/core";
import ProgressChart from "components/core/sidebar/progress-chart";
import { DeleteCycleModal } from "components/cycles";
// ui
-import { CustomMenu, CustomRangeDatePicker, ProgressBar } from "components/ui";
-import { Loader } from "@plane/ui";
+import { CustomMenu, CustomRangeDatePicker } from "components/ui";
+import { Loader, ProgressBar } from "@plane/ui";
// icons
import {
CalendarDaysIcon,
diff --git a/web/components/modules/sidebar.tsx b/web/components/modules/sidebar.tsx
index e7613000be7..f53d48998e8 100644
--- a/web/components/modules/sidebar.tsx
+++ b/web/components/modules/sidebar.tsx
@@ -29,8 +29,8 @@ import useToast from "hooks/use-toast";
import { LinkModal, LinksList, SidebarProgressStats } from "components/core";
import { DeleteModuleModal, SidebarLeadSelect, SidebarMembersSelect } from "components/modules";
import ProgressChart from "components/core/sidebar/progress-chart";
-import { CustomMenu, CustomSelect, ProgressBar } from "components/ui";
-import { Loader } from "@plane/ui";
+import { CustomMenu, CustomSelect } from "components/ui";
+import { Loader, ProgressBar } from "@plane/ui";
// icon
import { ExclamationIcon } from "components/icons";
import { LinkIcon } from "@heroicons/react/20/solid";
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index 517b6c25a77..db723264583 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -11,7 +11,6 @@ export * from "./linear-progress-indicator";
export * from "./loader";
export * from "./multi-level-dropdown";
export * from "./multi-level-select";
-export * from "./progress-bar";
export * from "./tooltip";
export * from "./markdown-to-component";
export * from "./product-updates-modal";
From 97b4e312931698d8204a9ee36328bb6fa557bbea Mon Sep 17 00:00:00 2001
From: Anmol Singh Bhatia
Date: Wed, 11 Oct 2023 16:19:57 +0530
Subject: [PATCH 15/15] chore: code refactor
---
.../filters/header/filters/project.tsx | 2 +-
web/components/ui/index.ts | 1 -
web/components/ui/loader.tsx | 25 -------------------
web/components/workspace/views/views-list.tsx | 2 +-
4 files changed, 2 insertions(+), 28 deletions(-)
delete mode 100644 web/components/ui/loader.tsx
diff --git a/web/components/issues/issue-layouts/filters/header/filters/project.tsx b/web/components/issues/issue-layouts/filters/header/filters/project.tsx
index 93163dd9142..de02e969282 100644
--- a/web/components/issues/issue-layouts/filters/header/filters/project.tsx
+++ b/web/components/issues/issue-layouts/filters/header/filters/project.tsx
@@ -3,7 +3,7 @@ import React, { useState } from "react";
// components
import { FilterHeader, FilterOption } from "components/issues";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
// helpers
import { renderEmoji } from "helpers/emoji.helper";
// types
diff --git a/web/components/ui/index.ts b/web/components/ui/index.ts
index db723264583..6ce83cbd5a5 100644
--- a/web/components/ui/index.ts
+++ b/web/components/ui/index.ts
@@ -8,7 +8,6 @@ export * from "./empty-state";
export * from "./icon";
export * from "./labels-list";
export * from "./linear-progress-indicator";
-export * from "./loader";
export * from "./multi-level-dropdown";
export * from "./multi-level-select";
export * from "./tooltip";
diff --git a/web/components/ui/loader.tsx b/web/components/ui/loader.tsx
deleted file mode 100644
index b9d13883a7b..00000000000
--- a/web/components/ui/loader.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-
-type Props = {
- children: React.ReactNode;
- className?: string;
-};
-
-const Loader = ({ children, className = "" }: Props) => (
-
- {children}
-
-);
-
-type ItemProps = {
- height?: string;
- width?: string;
-};
-
-const Item: React.FC = ({ height = "auto", width = "auto" }) => (
-
-);
-
-Loader.Item = Item;
-
-export { Loader };
diff --git a/web/components/workspace/views/views-list.tsx b/web/components/workspace/views/views-list.tsx
index ccfeba75b80..5a06293052a 100644
--- a/web/components/workspace/views/views-list.tsx
+++ b/web/components/workspace/views/views-list.tsx
@@ -5,7 +5,7 @@ import { useMobxStore } from "lib/mobx/store-provider";
// components
import { GlobalViewListItem } from "components/workspace";
// ui
-import { Loader } from "components/ui";
+import { Loader } from "@plane/ui";
type Props = {
searchQuery: string;