From 93282ad8f6c16739ad8eb53495ef25ab503c6ffc Mon Sep 17 00:00:00 2001
From: anmolsinghbhatia
Date: Fri, 28 Aug 2026 19:03:30 +0530
Subject: [PATCH 1/3] refactor: migrate web @plane/propel Button to
@makeplane/propel
Replace in-repo Button and getButtonStyling in apps/web with
@makeplane/propel Button. Map sizes sm/base/lg/xl to xs/sm/md/lg,
error variants to danger, and link to ghost. Stretch is required.
Links use render; CustomMenu and dropdown chrome use the styled
element so we do not nest buttons.
---
.../(projects)/drafts/header.tsx | 21 ++---
.../[workspaceSlug]/(projects)/header.tsx | 21 ++---
.../profile/[userId]/activity/page.tsx | 12 ++-
.../(projects)/profile/[userId]/header.tsx | 15 +---
.../(detail)/[archivedIssueId]/page.tsx | 9 ++-
.../[projectId]/cycles/(detail)/header.tsx | 25 +++---
.../[projectId]/cycles/(list)/header.tsx | 11 ++-
.../[projectId]/modules/(detail)/header.tsx | 40 +++++-----
.../[projectId]/modules/(list)/header.tsx | 11 ++-
.../pages/(detail)/[pageId]/page.tsx | 21 ++---
.../[projectId]/pages/(list)/header.tsx | 13 ++-
.../views/(detail)/[viewId]/header.tsx | 10 +--
.../[projectId]/views/(list)/header.tsx | 12 ++-
.../(projects)/stickies/header.tsx | 10 +--
.../(projects)/workspace-views/header.tsx | 12 ++-
.../settings/(workspace)/members/page.tsx | 12 ++-
.../settings/(workspace)/webhooks/page.tsx | 12 ++-
.../(settings)/settings/projects/page.tsx | 22 ++++--
apps/web/app/(all)/create-workspace/page.tsx | 23 ++++--
apps/web/app/(all)/invitations/page.tsx | 25 +++---
apps/web/app/error/dev.tsx | 12 +--
apps/web/app/error/prod.tsx | 6 +-
apps/web/app/not-found.tsx | 19 +++--
.../components/account/auth-forms/email.tsx | 14 +++-
.../account/auth-forms/forgot-password.tsx | 33 ++++----
.../account/auth-forms/password.tsx | 43 +++++-----
.../account/auth-forms/reset-password.tsx | 13 ++-
.../account/auth-forms/set-password.tsx | 13 ++-
.../account/auth-forms/unique-code.tsx | 21 +++--
.../account/deactivate-account-modal.tsx | 16 ++--
.../workspace-active-cycles-upgrade.tsx | 20 ++---
.../analytics/insight-table/root.tsx | 11 +--
.../components/analytics/select/project.tsx | 7 +-
.../analytics/work-items/priority-chart.tsx | 11 +--
.../core/components/api-token/empty-state.tsx | 8 +-
.../core/components/api-token/modal/form.tsx | 23 +++---
.../modal/generated-token-details.tsx | 6 +-
.../auth-screens/workspace/not-a-member.tsx | 28 ++++---
.../automation/select-month-modal.tsx | 17 ++--
.../core/components/common/empty-state.tsx | 11 +--
.../common/layout-error-boundary.tsx | 6 +-
.../components/common/new-empty-state.tsx | 21 ++---
.../core/description-versions/modal.tsx | 21 +++--
.../core/filters/date-filter-modal.tsx | 14 ++--
.../components/core/image-picker-popover.tsx | 38 ++++++---
.../core/modals/bulk-delete-issues-modal.tsx | 17 ++--
.../core/modals/change-email-modal.tsx | 34 +++++---
.../modals/existing-issues-list-modal.tsx | 34 ++++----
.../core/modals/gpt-assistant-popover.tsx | 24 +++---
.../core/modals/user-image-upload-modal.tsx | 29 ++++---
.../modals/workspace-image-upload-modal.tsx | 30 ++++---
.../core/theme/custom-theme-selector.tsx | 13 ++-
.../core/theme/download-config-button.tsx | 13 ++-
.../core/theme/import-config-button.tsx | 13 ++-
.../cycles/archived-cycles/modal.tsx | 18 +++--
apps/web/core/components/cycles/form.tsx | 39 ++++++---
.../components/cycles/transfer-issues.tsx | 14 +++-
.../web/core/components/dropdowns/buttons.tsx | 28 +++----
apps/web/core/components/dropdowns/layout.tsx | 79 +++++++------------
.../components/editor/lite-text/toolbar.tsx | 24 +++---
.../empty-state/comic-box-button.tsx | 23 ++++--
.../empty-state/detailed-empty-state-root.tsx | 16 ++--
.../components/estimates/create/modal.tsx | 24 ++++--
.../components/estimates/delete/modal.tsx | 24 ++++--
.../estimates/points/create-root.tsx | 13 ++-
.../core/components/exporter/export-form.tsx | 13 ++-
.../core/components/exporter/export-modal.tsx | 24 +++---
.../core/components/exporter/prev-exports.tsx | 37 +++++----
.../components/exporter/single-export.tsx | 6 +-
.../global/product-updates/footer.tsx | 25 +++---
.../links/create-update-link-modal.tsx | 18 +++--
.../inbox/content/inbox-issue-header.tsx | 42 +++++-----
.../components/inbox/inbox-filter/root.tsx | 7 +-
.../inbox/inbox-filter/sorting/order-by.tsx | 9 +--
.../inbox/modals/create-modal/create-root.tsx | 18 ++---
.../inbox/modals/snooze-issue-modal.tsx | 9 ++-
.../components/instance/not-ready-view.tsx | 6 +-
.../integration/single-integration-card.tsx | 52 ++++++------
.../components/issues/archive-issue-modal.tsx | 18 +++--
.../issues/bulk-operations/upgrade-banner.tsx | 20 ++---
.../issues/confirm-issue-discard.tsx | 21 ++---
apps/web/core/components/issues/filters.tsx | 18 +++--
apps/web/core/components/issues/header.tsx | 11 ++-
.../sub-issues/issues-list/root.tsx | 12 ++-
.../issue-detail-widgets/widget-button.tsx | 9 +--
.../issue-detail/label/label-list-item.tsx | 17 ++--
.../label/select/label-select.tsx | 16 ++--
.../links/create-update-link-modal.tsx | 17 ++--
.../issues/issue-detail/subscription.tsx | 22 ++----
.../filters/header/helpers/dropdown.tsx | 36 ++++-----
.../header/mobile-layout-selection.tsx | 21 +++--
.../components/issues/issue-modal/form.tsx | 28 +++----
.../labels/create-update-label-inline.tsx | 13 ++-
.../labels/project-setting-label-list.tsx | 6 +-
.../license/modal/card/checkout-button.tsx | 37 +++++----
.../license/modal/card/talk-to-sales.tsx | 16 ++--
.../modules/archived-modules/modal.tsx | 18 +++--
.../components/modules/dropdowns/order-by.tsx | 10 +--
apps/web/core/components/modules/form.tsx | 39 ++++++---
.../modules/links/create-update-modal.tsx | 17 ++--
.../onboarding/create-workspace.tsx | 34 ++++----
.../components/onboarding/invitations.tsx | 31 ++++----
.../components/onboarding/invite-members.tsx | 16 ++--
.../components/onboarding/profile-setup.tsx | 14 +++-
.../onboarding/steps/profile/root.tsx | 6 +-
.../components/onboarding/steps/role/root.tsx | 12 ++-
.../components/onboarding/steps/team/root.tsx | 16 ++--
.../onboarding/steps/usecase/root.tsx | 10 +--
.../onboarding/steps/workspace/create.tsx | 24 ++++--
.../steps/workspace/join-invites.tsx | 21 +++--
.../onboarding/switch-account-modal.tsx | 13 ++-
.../core/components/onboarding/tour/root.tsx | 36 ++++++---
.../core/components/pages/list/order-by.tsx | 6 +-
.../pages/modals/export-page-modal.tsx | 17 ++--
.../components/pages/modals/page-form.tsx | 21 +++--
.../components/pages/version/main-content.tsx | 26 ++++--
.../profile/activity/download-button.tsx | 15 +++-
.../project-states/create-update/form.tsx | 25 ++++--
.../project/archive-restore-modal.tsx | 14 ++--
apps/web/core/components/project/card.tsx | 26 +++---
.../project/confirm-project-member-remove.tsx | 20 +++--
.../project/create/project-create-buttons.tsx | 25 ++++--
.../project/delete-project-modal.tsx | 18 +++--
.../project/dropdowns/filters/member-list.tsx | 14 ++--
.../components/project/dropdowns/order-by.tsx | 19 ++---
.../core/components/project/empty-state.tsx | 12 +--
apps/web/core/components/project/form.tsx | 14 +++-
apps/web/core/components/project/header.tsx | 12 ++-
.../components/project/join-project-modal.tsx | 19 +++--
.../project/leave-project-modal.tsx | 17 ++--
.../core/components/project/member-list.tsx | 9 ++-
.../components/project/multi-select-modal.tsx | 16 ++--
.../project/project-feature-update.tsx | 21 +++--
.../project/publish-project/modal.tsx | 38 +++++----
.../project/send-project-invitation-modal.tsx | 23 +++---
.../project/settings/control-section.tsx | 22 ++++--
.../projects/settings/intake/header.tsx | 12 ++-
.../rich-filters/add-filters/button.tsx | 42 +++++++---
.../components/rich-filters/filters-row.tsx | 46 +++++++----
.../profile/content/pages/api-tokens.tsx | 12 ++-
.../profile/content/pages/general/form.tsx | 23 ++++--
.../profile/content/pages/security.tsx | 20 +++--
.../core/components/sidebar/add-button.tsx | 34 ++++----
.../components/views/filters/order-by.tsx | 24 +++---
apps/web/core/components/views/form.tsx | 39 ++++++---
.../core/components/web-hooks/empty-state.tsx | 8 +-
.../web-hooks/form/delete-section.tsx | 6 +-
.../core/components/web-hooks/form/form.tsx | 28 ++++---
.../components/web-hooks/form/secret-key.tsx | 14 ++--
.../web-hooks/generated-hook-details.tsx | 6 +-
.../options/snooze/modal.tsx | 17 ++--
.../ConfirmWorkspaceMemberRemove.tsx | 32 +++++---
.../workspace/billing/comparison/base.tsx | 12 +--
.../billing/comparison/plan-detail.tsx | 12 ++-
.../confirm-workspace-member-remove.tsx | 32 +++++---
.../workspace/create-workspace-form.tsx | 25 ++++--
.../workspace/delete-workspace-form.tsx | 18 +++--
.../workspace/delete-workspace-section.tsx | 12 ++-
.../components/workspace/edition-badge.tsx | 10 +--
.../workspace/invite-modal/actions.tsx | 30 ++++---
.../workspace/settings/workspace-details.tsx | 10 +--
.../workspace/sidebar/quick-actions.tsx | 8 +-
.../core/components/workspace/views/form.tsx | 31 +++++---
.../layouts/auth-layout/workspace-wrapper.tsx | 62 ++++++++++-----
164 files changed, 1884 insertions(+), 1389 deletions(-)
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx
index a063df5256f..880f6f21855 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { DraftIcon } from "@plane/propel/icons";
import { EIssuesStoreType } from "@plane/types";
import { Breadcrumbs, Header } from "@plane/ui";
@@ -66,15 +66,16 @@ export const WorkspaceDraftHeader = observer(function WorkspaceDraftHeader() {
{joinedProjectIds && joinedProjectIds.length > 0 && (
- setIsDraftIssueModalOpen(true)}
- disabled={!isAuthorizedUser}
- >
- {t("workspace_draft_issues.draft_an_issue")}
-
+
+ setIsDraftIssueModalOpen(true)}
+ disabled={!isAuthorizedUser}
+ />
+
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
index f15d7673882..572ebe6d2ee 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
import { Shapes } from "lucide-react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { HomeIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -37,15 +37,16 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
- toggleWidgetSettings(true)}
- className="my-auto mb-0"
- prependIcon={ }
- >
- {t("home.manage_widgets")}
-
+
+ toggleWidgetSettings(true)}
+ icon={ }
+ label={t("home.manage_widgets")}
+ />
+
>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx
index 7bd93646c28..3696d7e49a3 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// plane imports
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// components
import { PageHead } from "@/components/core/page-title";
import { DownloadActivityButton } from "@/components/profile/activity/download-button";
@@ -64,9 +64,13 @@ function ProfileActivityPage() {
{activityPages}
{pageCount < totalPages && resultsCount !== 0 && (
-
- {t("common.load_more")}
-
+
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
index 296b780c91e..6233e21921c 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
@@ -19,7 +19,7 @@ import { ProfileIssuesFilter } from "@/components/profile/profile-issues-filter"
// hooks
import { useAppTheme } from "@/hooks/store/use-app-theme";
import { useUser, useUserPermissions } from "@/hooks/store/user";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
type TUserProfileHeader = {
userProjectsData: IUserProfileProjectSegregation | undefined;
@@ -96,16 +96,9 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
))}
-
{
- toggleProfileSidebar();
- }}
- appendIcon={
-
- }
- >
+
toggleProfileSidebar()}>
+
+
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx
index 592bf09a50f..e918a60d40d 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx
@@ -9,7 +9,7 @@ import { useRouter } from "next/navigation";
import useSWR from "swr";
// ui
import { Banner } from "@plane/propel/banner";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ArchiveIcon } from "@plane/propel/icons";
import { Loader } from "@plane/ui";
// components
@@ -74,10 +74,11 @@ function ArchivedIssueDetailsPage({ params }: Route.ComponentProps) {
action={
router.push(`/${workspaceSlug}/projects/${projectId}/archives/issues/`)}
- >
- Go to archives
-
+ />
}
className="border-b border-subtle"
/>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx
index 8f4165010f4..fc50b7fda78 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx
@@ -8,7 +8,7 @@ import { useCallback, useRef, useState } from "react";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// icons
-import { ChartNoAxesColumn, PanelRight, SlidersHorizontal } from "lucide-react";
+import { PanelRight, SlidersHorizontal } from "lucide-react";
// plane imports
import {
EIssueFilterType,
@@ -18,7 +18,7 @@ import {
} from "@plane/constants";
import { usePlatformOS } from "@plane/hooks";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { IconButton } from "@plane/propel/icon-button";
import { CycleIcon } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
@@ -232,22 +232,23 @@ export const CycleIssuesHeader = observer(function CycleIssuesHeader() {
{canUserCreateIssue && (
<>
- setAnalyticsModal(true)} variant="secondary" size="lg">
- Analytics
-
-
-
-
+ setAnalyticsModal(true)}
+ />
{!isCompletedCycle && (
{
toggleCreateIssueModal(true, EIssuesStoreType.CYCLE);
}}
- >
- {t("issue.add.label")}
-
+ />
)}
>
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
index 5e757289535..83c4e057876 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
@@ -9,7 +9,7 @@ import { useParams } from "next/navigation";
// ui
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CycleIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -62,14 +62,13 @@ export const CyclesListHeader = observer(function CyclesListHeader() {
{
toggleCreateCycleModal(true);
}}
- >
- {t("add")}
- {t("project_cycles.add_cycle")}
-
+ />
) : (
<>>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx
index 13613d413bb..5193cd7f52f 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx
@@ -8,7 +8,7 @@ import { useCallback, useRef, useState } from "react";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// icons
-import { ChartNoAxesColumn, PanelRight, SlidersHorizontal } from "lucide-react";
+import { PanelRight, SlidersHorizontal } from "lucide-react";
// plane imports
import {
EIssueFilterType,
@@ -16,7 +16,7 @@ import {
EUserPermissions,
EUserPermissionsLevel,
} from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ModuleIcon } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
import type { ICustomSearchSelectOption, IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types";
@@ -227,22 +227,26 @@ export const ModuleIssuesHeader = observer(function ModuleIssuesHeader() {
{canUserCreateIssue ? (
<>
- setAnalyticsModal(true)} variant="secondary" size="lg">
- Analytics
-
-
-
-
- {
- toggleCreateIssueModal(true, EIssuesStoreType.MODULE);
- }}
- >
- Add work item
-
+
+ setAnalyticsModal(true)}
+ />
+
+
+ {
+ toggleCreateIssueModal(true, EIssuesStoreType.MODULE);
+ }}
+ />
+
>
) : (
<>>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
index e5497ed82a5..e694d35942e 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
@@ -10,7 +10,7 @@ import { useParams } from "next/navigation";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ModuleIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -67,14 +67,13 @@ export const ModulesListHeader = observer(function ModulesListHeader() {
{canUserCreateModule ? (
{
toggleCreateModuleModal(true);
}}
- size="lg"
- >
- {t("add")}
- {t("project_module.add_module")}
-
+ />
) : (
<>>
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx
index fc1f76aa5d4..6ce20ef8688 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx
@@ -9,12 +9,9 @@ import { observer } from "mobx-react";
import Link from "next/link";
import useSWR from "swr";
// plane types
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { TSearchEntityRequestPayload, TWebhookConnectionQueryParams } from "@plane/types";
import { EFileAssetType } from "@plane/types";
-// plane ui
-// plane utils
-import { cn } from "@plane/utils";
// components
import { LogoSpinner } from "@/components/common/logo-spinner";
import { PageHead } from "@/components/core/page-title";
@@ -165,12 +162,16 @@ function PageDetailsPage({ params }: Route.ComponentProps) {
The page you are trying to access doesn{"'"}t exist or you don{"'"}t have permission to view it.
-
- View other Pages
-
+
+ }
+ />
+
);
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx
index a26a539dd64..a5b543260f5 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx
@@ -10,7 +10,7 @@ import { useParams, useRouter, useSearchParams } from "next/navigation";
// constants
import { EPageAccess } from "@plane/constants";
// plane types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PageIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TPage } from "@plane/types";
@@ -79,9 +79,14 @@ export const PagesListHeader = observer(function PagesListHeader() {
{canCurrentUserCreatePage && (
-
- {isCreatingPage ? "Adding" : "Add page"}
-
+
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx
index fa32b71c6a1..eee93e62b0a 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx
@@ -15,7 +15,7 @@ import {
EUserPermissions,
EUserPermissionsLevel,
} from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { LockIcon, ViewsIcon } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
import type { ICustomSearchSelectOption, IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types";
@@ -198,13 +198,13 @@ export const ProjectViewIssuesHeader = observer(function ProjectViewIssuesHeader
{canUserCreateIssue && (
{
toggleCreateIssueModal(true, EIssuesStoreType.PROJECT_VIEW);
}}
- >
- Add work item
-
+ />
)}
- toggleCreateViewModal(true)}>
- Add view
-
+ toggleCreateViewModal(true)}
+ />
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx
index 7eab6a4a7fc..33ff36ea64b 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { RecentStickyIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -45,15 +45,15 @@ export const WorkspaceStickyHeader = observer(function WorkspaceStickyHeader() {
{
toggleShowNewSticky(true);
stickyOperations.create();
}}
loading={creatingSticky}
- >
- Add sticky
-
+ />
>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx
index f4fdddc4ed8..fe75d323985 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx
@@ -10,7 +10,7 @@ import { useParams } from "next/navigation";
// plane imports
import { EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE, DEFAULT_GLOBAL_VIEWS_LIST } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ViewsIcon } from "@plane/propel/icons";
import type { IIssueDisplayFilterOptions, IIssueDisplayProperties, ICustomSearchSelectOption } from "@plane/types";
import { EIssuesStoreType, EIssueLayoutTypes } from "@plane/types";
@@ -143,9 +143,13 @@ export const GlobalIssuesHeader = observer(function GlobalIssuesHeader() {
/>
)}
- setCreateViewModal(true)}>
- {t("workspace_views.add_view")}
-
+ setCreateViewModal(true)}
+ />
{viewDetails && }
{isDefaultView && defaultViewDetails && (
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
index 0c7ea4e12a8..4e3466a3d92 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// types
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { SearchIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IWorkspaceBulkInviteFormData } from "@plane/types";
@@ -136,9 +136,13 @@ const WorkspaceMembersSettingsPage = observer(function WorkspaceMembersSettingsP
memberType="workspace"
/>
{canPerformWorkspaceAdminActions && (
- setInviteModal(true)}>
- {t("workspace_settings.settings.members.add_member")}
-
+ setInviteModal(true)}
+ />
)}
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx
index 099a0ee40aa..5a279c7411a 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx
@@ -10,7 +10,7 @@ import useSWR from "swr";
// plane imports
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// components
import { EmptyStateCompact } from "@plane/propel/empty-state";
import { NotAuthorizedView } from "@/components/auth-screens/not-authorized-view";
@@ -78,9 +78,13 @@ function WebhooksListPage({ params }: Route.ComponentProps) {
title={t("workspace_settings.settings.webhooks.title")}
description={t("workspace_settings.settings.webhooks.description")}
control={
- setShowCreateWebhookModal(true)}>
- {t("workspace_settings.settings.webhooks.add_webhook")}
-
+ setShowCreateWebhookModal(true)}
+ />
}
/>
{Object.keys(webhooks).length > 0 ? (
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx
index 1d381547d45..f6967c3785b 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx
@@ -8,8 +8,7 @@ import { observer } from "mobx-react";
import Link from "next/link";
import { useTheme } from "next-themes";
// plane imports
-import { Button, getButtonStyling } from "@plane/propel/button";
-import { cn } from "@plane/utils";
+import { Button } from "@makeplane/propel/components/button";
// assets
import ProjectDarkEmptyState from "@/app/assets/empty-state/project-settings/no-projects-dark.png?url";
import ProjectLightEmptyState from "@/app/assets/empty-state/project-settings/no-projects-light.png?url";
@@ -31,10 +30,21 @@ function ProjectSettingsPage() {
need to get things done.
-
- Learn more about projects
-
- toggleCreateProjectModal(true)}>Start your first project
+ }
+ />
+ toggleCreateProjectModal(true)}
+ />
);
diff --git a/apps/web/app/(all)/create-workspace/page.tsx b/apps/web/app/(all)/create-workspace/page.tsx
index 38087189cc3..c903e561fbf 100644
--- a/apps/web/app/(all)/create-workspace/page.tsx
+++ b/apps/web/app/(all)/create-workspace/page.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import Link from "next/link";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button, getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlaneLogo } from "@plane/propel/icons";
import type { IWorkspace } from "@plane/types";
// assets
@@ -86,12 +86,21 @@ const CreateWorkspacePage = observer(function CreateWorkspacePage() {
{t("workspace_creation.errors.creation_disabled.description")}
) : (
diff --git a/apps/web/app/(all)/invitations/page.tsx b/apps/web/app/(all)/invitations/page.tsx
index 0da54f0a888..cbeb829fc04 100644
--- a/apps/web/app/(all)/invitations/page.tsx
+++ b/apps/web/app/(all)/invitations/page.tsx
@@ -14,7 +14,7 @@ import { CheckCircle2 } from "lucide-react";
import { ROLE } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlaneLogo } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IWorkspaceMemberInvitation } from "@plane/types";
@@ -162,21 +162,22 @@ function UserInvitationsPage() {
- {t("accept_and_join")}
-
-
-
-
- {t("go_home")}
-
-
-
+ />
+ }
+ />
diff --git a/apps/web/app/error/dev.tsx b/apps/web/app/error/dev.tsx
index 0269dcbdcb1..60d2c180808 100644
--- a/apps/web/app/error/dev.tsx
+++ b/apps/web/app/error/dev.tsx
@@ -7,7 +7,7 @@
// plane imports
import { isRouteErrorResponse } from "react-router";
import { Banner } from "@plane/propel/banner";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Card, ECardVariant } from "@plane/propel/card";
import { InfoFillIcon } from "@plane/propel/icons";
@@ -19,14 +19,8 @@ interface ErrorActionsProps {
function ErrorActions({ onGoHome, onReload }: ErrorActionsProps) {
return (
-
- Go to home
-
- {onReload && (
-
- Reload page
-
- )}
+
+ {onReload && }
);
}
diff --git a/apps/web/app/error/prod.tsx b/apps/web/app/error/prod.tsx
index a8d61829e35..0b23507bb3a 100644
--- a/apps/web/app/error/prod.tsx
+++ b/apps/web/app/error/prod.tsx
@@ -6,7 +6,7 @@
import { useTheme } from "next-themes";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// assets
import maintenanceModeDarkModeImage from "@/app/assets/instance/maintenance-mode-dark.svg?url";
import maintenanceModeLightModeImage from "@/app/assets/instance/maintenance-mode-light.svg?url";
@@ -80,9 +80,7 @@ export function ProdErrorComponent({ onGoHome }: ProdErrorComponentProps) {
-
- Go to home
-
+
diff --git a/apps/web/app/not-found.tsx b/apps/web/app/not-found.tsx
index 13763951ce1..651982260f0 100644
--- a/apps/web/app/not-found.tsx
+++ b/apps/web/app/not-found.tsx
@@ -6,7 +6,7 @@
import Link from "next/link";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// images
import Image404 from "@/app/assets/404.svg?url";
// types
@@ -32,13 +32,16 @@ function PageNotFound() {
temporarily unavailable.
-
-
-
- Go to Home
-
-
-
+
+ }
+ />
+
diff --git a/apps/web/core/components/account/auth-forms/email.tsx b/apps/web/core/components/account/auth-forms/email.tsx
index 7bf76ca0ef2..e6ec49981c5 100644
--- a/apps/web/core/components/account/auth-forms/email.tsx
+++ b/apps/web/core/components/account/auth-forms/email.tsx
@@ -13,7 +13,7 @@ import { CircleAlert, XCircle } from "lucide-react";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IEmailCheckData } from "@plane/types";
import { Spinner } from "@plane/ui";
import { checkEmailValidity } from "@plane/utils";
@@ -101,9 +101,15 @@ export const AuthEmailForm = observer(function AuthEmailForm(props: TAuthEmailFo
)}
-
- {isSubmitting ? : t("common.continue")}
-
+
);
});
diff --git a/apps/web/core/components/account/auth-forms/forgot-password.tsx b/apps/web/core/components/account/auth-forms/forgot-password.tsx
index 8054944987f..df8cb5730b1 100644
--- a/apps/web/core/components/account/auth-forms/forgot-password.tsx
+++ b/apps/web/core/components/account/auth-forms/forgot-password.tsx
@@ -11,13 +11,12 @@ import { Controller, useForm } from "react-hook-form";
// icons
import { CircleCheck } from "lucide-react";
// plane imports
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button, getButtonStyling } from "@plane/propel/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
-
-import { cn, checkEmailValidity } from "@plane/utils";
+import { checkEmailValidity } from "@plane/utils";
// hooks
import useTimer from "@/hooks/use-timer";
// services
@@ -122,20 +121,26 @@ export const ForgotPasswordForm = observer(function ForgotPasswordForm() {
)}
0
+ ? t("auth.common.resend_in", { seconds: resendTimerCode })
+ : t("auth.forgot_password.send_reset_link")
+ }
+ type="submit"
disabled={!isValid}
loading={isSubmitting || resendTimerCode > 0}
- >
- {resendTimerCode > 0
- ? t("auth.common.resend_in", { seconds: resendTimerCode })
- : t("auth.forgot_password.send_reset_link")}
-
-
- {t("auth.common.back_to_sign_in")}
-
+ />
+ }
+ />
);
diff --git a/apps/web/core/components/account/auth-forms/password.tsx b/apps/web/core/components/account/auth-forms/password.tsx
index c98ffff3410..4fe51acf812 100644
--- a/apps/web/core/components/account/auth-forms/password.tsx
+++ b/apps/web/core/components/account/auth-forms/password.tsx
@@ -13,7 +13,7 @@ import { Eye, EyeOff, Info, XCircle } from "lucide-react";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CloseIcon } from "@plane/propel/icons";
import { PasswordStrengthIndicator, Spinner } from "@plane/ui";
import { getPasswordStrength } from "@plane/utils";
@@ -280,31 +280,36 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props)
{mode === EAuthModes.SIGN_IN ? (
<>
-
- {isSubmitting ? (
-
- ) : isSMTPConfigured ? (
- t("common.continue")
- ) : (
- t("common.go_to_workspace")
- )}
-
+
{isSMTPConfigured && (
- {t("auth.common.sign_in_with_unique_code")}
-
+ />
)}
>
) : (
-
- {isSubmitting ? : "Create account"}
-
+
)}
diff --git a/apps/web/core/components/account/auth-forms/reset-password.tsx b/apps/web/core/components/account/auth-forms/reset-password.tsx
index 1e8f1c92082..b308155dffd 100644
--- a/apps/web/core/components/account/auth-forms/reset-password.tsx
+++ b/apps/web/core/components/account/auth-forms/reset-password.tsx
@@ -10,10 +10,10 @@ import { useSearchParams } from "next/navigation";
// icons
import { Eye, EyeOff } from "lucide-react";
// ui
+import { Button } from "@makeplane/propel/components/button";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
import { PasswordStrengthIndicator } from "@plane/ui";
// components
import { getPasswordStrength } from "@plane/utils";
@@ -196,9 +196,14 @@ export const ResetPasswordForm = observer(function ResetPasswordForm() {
{t("auth.common.password.errors.match")}
)}
-
- {t("auth.common.password.submit")}
-
+
);
diff --git a/apps/web/core/components/account/auth-forms/set-password.tsx b/apps/web/core/components/account/auth-forms/set-password.tsx
index 4863a027185..606b2ae3757 100644
--- a/apps/web/core/components/account/auth-forms/set-password.tsx
+++ b/apps/web/core/components/account/auth-forms/set-password.tsx
@@ -14,7 +14,7 @@ import { Eye, EyeOff } from "lucide-react";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { E_PASSWORD_STRENGTH } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { PasswordStrengthIndicator } from "@plane/ui";
// components
@@ -199,9 +199,14 @@ export const SetPasswordForm = observer(function SetPasswordForm() {
{t("auth.common.password.errors.match")}
)}
-
- {t("common.continue")}
-
+
);
diff --git a/apps/web/core/components/account/auth-forms/unique-code.tsx b/apps/web/core/components/account/auth-forms/unique-code.tsx
index 832b98facd1..e355dca7bc8 100644
--- a/apps/web/core/components/account/auth-forms/unique-code.tsx
+++ b/apps/web/core/components/account/auth-forms/unique-code.tsx
@@ -6,11 +6,10 @@
import { useEffect, useState } from "react";
import { CircleCheck, XCircle } from "lucide-react";
+import { Button } from "@makeplane/propel/components/button";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { API_BASE_URL } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
-import { Spinner } from "@plane/ui";
// constants
// helpers
import { EAuthModes } from "@/helpers/authentication.helper";
@@ -165,15 +164,15 @@ export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) {
-
- {isRequestingNewCode ? (
- t("auth.common.unique_code.sending_code")
- ) : isSubmitting ? (
-
- ) : (
- t("common.continue")
- )}
-
+
);
diff --git a/apps/web/core/components/account/deactivate-account-modal.tsx b/apps/web/core/components/account/deactivate-account-modal.tsx
index f4dba2a81c7..4d3cdeb56e8 100644
--- a/apps/web/core/components/account/deactivate-account-modal.tsx
+++ b/apps/web/core/components/account/deactivate-account-modal.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
import { useTranslation } from "@plane/i18n";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TrashIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -81,12 +81,14 @@ export function DeactivateAccountModal(props: Props) {
-
- {t("cancel")}
-
-
- {isDeactivating ? t("deactivating") : t("confirm")}
-
+
+
);
diff --git a/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
index ff1ee254394..4f3f9b230f9 100644
--- a/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
+++ b/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
@@ -9,7 +9,7 @@ import { AlertOctagon, BarChart4, CircleDashed, Folder, Microscope } from "lucid
// plane imports
import { MARKETING_PRICING_PAGE_LINK } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { SearchIcon } from "@plane/propel/icons";
import { ContentWrapper } from "@plane/ui";
import { cn } from "@plane/utils";
@@ -91,15 +91,15 @@ export const WorkspaceActiveCyclesUpgrade = observer(function WorkspaceActiveCyc
{t("active_cycles_description")}
>(
actions={(table: Table) => (
}
+ size="sm"
+ stretch="auto"
+ icon={ }
onClick={() => onExport?.(table.getFilteredRowModel().rows)}
- >
- {t("exporter.csv.short_description")}
-
+ label={t("exporter.csv.short_description")}
+ />
)}
/>
diff --git a/apps/web/core/components/analytics/select/project.tsx b/apps/web/core/components/analytics/select/project.tsx
index 7bdbbddb366..864637b034d 100644
--- a/apps/web/core/components/analytics/select/project.tsx
+++ b/apps/web/core/components/analytics/select/project.tsx
@@ -6,11 +6,10 @@
import { observer } from "mobx-react";
// plane package imports
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
import { Logo } from "@plane/propel/emoji-icon-picker";
import { ChevronDownIcon, ProjectIcon } from "@plane/propel/icons";
import { CustomSearchSelect } from "@plane/ui";
-import { cn } from "@plane/utils";
// hooks
import { useProject } from "@/hooks/store/use-project";
@@ -50,7 +49,7 @@ export const ProjectSelect = observer(function ProjectSelect(props: Props) {
options={options}
className="border-none p-0"
customButton={
-
+
}>
{value && value.length > 3
? `3+ projects`
@@ -61,7 +60,7 @@ export const ProjectSelect = observer(function ProjectSelect(props: Props) {
.join(", ")
: "All projects"}
-
+
}
customButtonClassName="border-none p-0 bg-transparent hover:bg-transparent w-auto h-auto"
multiple
diff --git a/apps/web/core/components/analytics/work-items/priority-chart.tsx b/apps/web/core/components/analytics/work-items/priority-chart.tsx
index 942285cab20..dbebdf158db 100644
--- a/apps/web/core/components/analytics/work-items/priority-chart.tsx
+++ b/apps/web/core/components/analytics/work-items/priority-chart.tsx
@@ -15,7 +15,7 @@ import { Download } from "lucide-react";
import type { ChartXAxisDateGrouping } from "@plane/constants";
import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES, CHART_COLOR_PALETTES, EChartModels } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { BarChart } from "@plane/propel/charts/bar-chart";
import { EmptyStateCompact } from "@plane/propel/empty-state";
import type { TBarItem, TChart, TChartDatum, ChartXAxisProperty, ChartYAxisMetric } from "@plane/types";
@@ -228,11 +228,12 @@ const PriorityChart = observer(function PriorityChart(props: Props) {
actions={(table: Table) => (
}
+ size="sm"
+ stretch="auto"
+ icon={ }
onClick={() => exportCSV(table.getRowModel().rows, [...defaultColumns, ...columns], workspaceSlug)}
- >
- {t("exporter.csv.short_description")}
-
+ label={t("exporter.csv.short_description")}
+ />
)}
/>
>
diff --git a/apps/web/core/components/api-token/empty-state.tsx b/apps/web/core/components/api-token/empty-state.tsx
index 944d19e34be..c0f0f4c257b 100644
--- a/apps/web/core/components/api-token/empty-state.tsx
+++ b/apps/web/core/components/api-token/empty-state.tsx
@@ -6,7 +6,7 @@
import React from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// assets
import emptyApiTokens from "@/app/assets/empty-state/api-token.svg?url";
@@ -27,9 +27,9 @@ export function ApiTokenEmptyState(props: Props) {
Create API tokens for safe and easy data sharing with external apps, maintaining control and security.
-
- Add token
-
+
+
+
);
diff --git a/apps/web/core/components/api-token/modal/form.tsx b/apps/web/core/components/api-token/modal/form.tsx
index 32c9456f67a..c69351cbc2f 100644
--- a/apps/web/core/components/api-token/modal/form.tsx
+++ b/apps/web/core/components/api-token/modal/form.tsx
@@ -12,7 +12,7 @@ import { Calendar } from "lucide-react";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IApiToken } from "@plane/types";
// ui
@@ -257,14 +257,19 @@ export function CreateApiTokenForm(props: Props) {
{t("workspace_settings.settings.api_tokens.never_expires")}
-
- {t("cancel")}
-
-
- {isSubmitting
- ? t("workspace_settings.settings.api_tokens.generating")
- : t("workspace_settings.settings.api_tokens.generate_token")}
-
+
+
diff --git a/apps/web/core/components/api-token/modal/generated-token-details.tsx b/apps/web/core/components/api-token/modal/generated-token-details.tsx
index aad163191f8..1c83ce161e0 100644
--- a/apps/web/core/components/api-token/modal/generated-token-details.tsx
+++ b/apps/web/core/components/api-token/modal/generated-token-details.tsx
@@ -5,7 +5,7 @@
*/
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CopyIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
@@ -58,9 +58,7 @@ export function GeneratedTokenDetails(props: Props) {
? `Expires ${renderFormattedDate(tokenDetails.expired_at)} at ${renderFormattedTime(tokenDetails.expired_at)}`
: "Never expires"}
-
- {t("close")}
-
+
);
diff --git a/apps/web/core/components/auth-screens/workspace/not-a-member.tsx b/apps/web/core/components/auth-screens/workspace/not-a-member.tsx
index b38603006f4..8765e4bee73 100644
--- a/apps/web/core/components/auth-screens/workspace/not-a-member.tsx
+++ b/apps/web/core/components/auth-screens/workspace/not-a-member.tsx
@@ -6,7 +6,7 @@
import Link from "next/link";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// layouts
import DefaultLayout from "@/layouts/default-layout";
@@ -23,16 +23,22 @@ export function NotAWorkspaceMember() {
-
-
- Check pending invites
-
-
-
-
- Create new workspace
-
-
+ }
+ />
+ }
+ />
diff --git a/apps/web/core/components/automation/select-month-modal.tsx b/apps/web/core/components/automation/select-month-modal.tsx
index b557934c49a..26e072863bb 100644
--- a/apps/web/core/components/automation/select-month-modal.tsx
+++ b/apps/web/core/components/automation/select-month-modal.tsx
@@ -7,9 +7,9 @@
import { useParams } from "next/navigation";
// react-hook-form
import { Controller, useForm } from "react-hook-form";
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
-import { Button } from "@plane/propel/button";
import type { IProject } from "@plane/types";
// ui
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -130,12 +130,15 @@ export function SelectMonthModal({ type, initialValues, isOpen, handleClose, han
-
- Cancel
-
-
- {isSubmitting ? "Submitting..." : "Submit"}
-
+
+
diff --git a/apps/web/core/components/common/empty-state.tsx b/apps/web/core/components/common/empty-state.tsx
index a5f469deb7d..39714252e82 100644
--- a/apps/web/core/components/common/empty-state.tsx
+++ b/apps/web/core/components/common/empty-state.tsx
@@ -7,7 +7,7 @@
import React from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
title: string;
@@ -33,12 +33,13 @@ export function EmptyState({ title, description, image, primaryButton, secondary
{primaryButton && (
- {primaryButton.text}
-
+ />
)}
{secondaryButton}
diff --git a/apps/web/core/components/common/layout-error-boundary.tsx b/apps/web/core/components/common/layout-error-boundary.tsx
index 74ef8f3fbb8..27e40fe99d6 100644
--- a/apps/web/core/components/common/layout-error-boundary.tsx
+++ b/apps/web/core/components/common/layout-error-boundary.tsx
@@ -8,7 +8,7 @@ import { Component, Fragment } from "react";
import type { ErrorInfo, ReactNode } from "react";
import { AlertTriangle } from "lucide-react";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
children: ReactNode;
@@ -26,9 +26,7 @@ function LayoutErrorFallback({ onRetry }: { onRetry: () => void }) {
{t("something_went_wrong")}
-
- {t("common.retry")}
-
+
);
}
diff --git a/apps/web/core/components/common/new-empty-state.tsx b/apps/web/core/components/common/new-empty-state.tsx
index 742ea3a6a88..1baaac204fb 100644
--- a/apps/web/core/components/common/new-empty-state.tsx
+++ b/apps/web/core/components/common/new-empty-state.tsx
@@ -7,7 +7,7 @@
import React, { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
title: string;
@@ -49,14 +49,15 @@ export function NewEmptyState({ title, description, image, primaryButton, disabl
{primaryButton && (
-
- {primaryButton.text}
+
+
-
+
)}
{comicBox &&
isHovered &&
diff --git a/apps/web/core/components/core/description-versions/modal.tsx b/apps/web/core/components/core/description-versions/modal.tsx
index 854b50922cf..aa8715f40c2 100644
--- a/apps/web/core/components/core/description-versions/modal.tsx
+++ b/apps/web/core/components/core/description-versions/modal.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// plane imports
import type { EditorRefApi } from "@plane/editor";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CopyIcon, ChevronLeftIcon, ChevronRightIcon } from "@plane/propel/icons";
import { setToast, TOAST_TYPE } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
@@ -160,20 +160,25 @@ export const DescriptionVersionsModal = observer(function DescriptionVersionsMod
-
- {t("common.cancel")}
-
+
{!isRestoreDisabled && (
{
handleRestore(activeVersionDescription ?? "
");
handleClose();
}}
- >
- {t("common.actions.restore")}
-
+ />
)}
diff --git a/apps/web/core/components/core/filters/date-filter-modal.tsx b/apps/web/core/components/core/filters/date-filter-modal.tsx
index 0f1ac2c53c6..4f0a876370b 100644
--- a/apps/web/core/components/core/filters/date-filter-modal.tsx
+++ b/apps/web/core/components/core/filters/date-filter-modal.tsx
@@ -5,7 +5,7 @@
*/
import { Controller, useForm } from "react-hook-form";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Calendar } from "@plane/propel/calendar";
import { CloseIcon } from "@plane/propel/icons";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -120,18 +120,16 @@ export function DateFilterModal({ title, handleClose, isOpen, onSelect }: Props)
)}
-
- Cancel
-
+
- Apply
-
+ />
diff --git a/apps/web/core/components/core/image-picker-popover.tsx b/apps/web/core/components/core/image-picker-popover.tsx
index be049801d85..498b1e96b2d 100644
--- a/apps/web/core/components/core/image-picker-popover.tsx
+++ b/apps/web/core/components/core/image-picker-popover.tsx
@@ -17,7 +17,8 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ACCEPTED_COVER_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants";
import { useOutsideClickDetector } from "@plane/hooks";
import { Tabs } from "@plane/propel/tabs";
-import { Button, getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
+import { Button as ButtonElement } from "@makeplane/propel/elements/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EFileAssetType } from "@plane/types";
import { Loader } from "@plane/ui";
@@ -193,9 +194,15 @@ function ImagePickerPopoverComponent
-
+ }
+ >
{label}
-
+
{isOpen && (
)}
/>
- setSearchParams(formData.search)}>
- Search
-
+ setSearchParams(formData.search)}
+ />
{unsplashImages ? (
unsplashImages.length > 0 ? (
@@ -352,22 +363,23 @@ function ImagePickerPopoverComponent
{
setIsOpen(false);
setImage(null);
}}
- >
- Cancel
-
+ />
- {isImageUploading ? "Uploading" : "Upload & Save"}
-
+ />
diff --git a/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx b/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
index 1d7b4099a06..66690ebd151 100644
--- a/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
+++ b/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
@@ -13,7 +13,7 @@ import { useForm } from "react-hook-form";
import { Combobox } from "@headlessui/react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { SearchIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { ISearchIssueResponse, IUser } from "@plane/types";
@@ -199,12 +199,15 @@ export const BulkDeleteIssuesModal = observer(function BulkDeleteIssuesModal(pro
{issues.length > 0 && (
-
- Cancel
-
-
- {isSubmitting ? "Deleting..." : "Delete selected work items"}
-
+
+
)}
diff --git a/apps/web/core/components/core/modals/change-email-modal.tsx b/apps/web/core/components/core/modals/change-email-modal.tsx
index 73cd2e546d2..206e99af319 100644
--- a/apps/web/core/components/core/modals/change-email-modal.tsx
+++ b/apps/web/core/components/core/modals/change-email-modal.tsx
@@ -11,7 +11,7 @@ import { Controller, useForm } from "react-hook-form";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
import { cn } from "@plane/utils";
@@ -205,16 +205,28 @@ export const ChangeEmailModal = observer(function ChangeEmailModal(props: Props)
)}
-
- {changeEmailT("actions.cancel")}
-
-
- {isSubmitting
- ? changeEmailT("states.sending")
- : secondStep
- ? changeEmailT("actions.confirm")
- : changeEmailT("actions.continue")}
-
+
+
diff --git a/apps/web/core/components/core/modals/existing-issues-list-modal.tsx b/apps/web/core/components/core/modals/existing-issues-list-modal.tsx
index 646ce6c359a..e6e06b87f05 100644
--- a/apps/web/core/components/core/modals/existing-issues-list-modal.tsx
+++ b/apps/web/core/components/core/modals/existing-issues-list-modal.tsx
@@ -10,7 +10,7 @@ import { Combobox } from "@headlessui/react";
// i18n
import { useTranslation } from "@plane/i18n";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { SearchIcon, CloseIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
@@ -313,27 +313,29 @@ export function ExistingIssuesListModal(props: Props) {
-
- {selectedIssues.length === issues.length ? t("issue.select.deselect_all") : t("issue.select.select_all")}
-
+
+
+
-
- {t("common.cancel")}
-
+
- {isSubmitting ? t("common.adding") : t("issue.select.add_selected")}
-
+ />
diff --git a/apps/web/core/components/core/modals/gpt-assistant-popover.tsx b/apps/web/core/components/core/modals/gpt-assistant-popover.tsx
index cf087779d29..3fedd960a94 100644
--- a/apps/web/core/components/core/modals/gpt-assistant-popover.tsx
+++ b/apps/web/core/components/core/modals/gpt-assistant-popover.tsx
@@ -14,7 +14,7 @@ import { Popover, Transition } from "@headlessui/react";
// plane imports
import { Input, InputGroup } from "@makeplane/propel/components/input";
import type { EditorRefApi } from "@plane/editor";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
// components
@@ -181,13 +181,14 @@ export function GptAssistantPopover(props: Props) {
const responseActionButton = response !== "" && (
{
onResponse(response);
onClose();
}}
- >
- Use this response
-
+ />
);
const generateResponseButtonText = isSubmitting
@@ -290,12 +291,15 @@ export function GptAssistantPopover(props: Props) {
>
)}
-
- Close
-
-
- {generateResponseButtonText}
-
+
+
diff --git a/apps/web/core/components/core/modals/user-image-upload-modal.tsx b/apps/web/core/components/core/modals/user-image-upload-modal.tsx
index ff688c7285e..b591c07ec99 100644
--- a/apps/web/core/components/core/modals/user-image-upload-modal.tsx
+++ b/apps/web/core/components/core/modals/user-image-upload-modal.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { useDropzone } from "react-dropzone";
// plane imports
import { ACCEPTED_AVATAR_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { UserCirclePropertyIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EFileAssetType } from "@plane/types";
@@ -143,16 +143,25 @@ export const UserImageUploadModal = observer(function UserImageUploadModal(props
File formats supported- .jpeg, .jpg, .png, .webp
-
- {isRemoving ? "Removing" : "Remove"}
-
+
-
- Cancel
-
-
- {isImageUploading ? "Uploading" : "Upload & Save"}
-
+
+
diff --git a/apps/web/core/components/core/modals/workspace-image-upload-modal.tsx b/apps/web/core/components/core/modals/workspace-image-upload-modal.tsx
index c22ce52aad9..e491b784630 100644
--- a/apps/web/core/components/core/modals/workspace-image-upload-modal.tsx
+++ b/apps/web/core/components/core/modals/workspace-image-upload-modal.tsx
@@ -10,7 +10,7 @@ import { useParams } from "next/navigation";
import { useDropzone } from "react-dropzone";
// plane imports
import { ACCEPTED_AVATAR_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { UserCirclePropertyIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EFileAssetType } from "@plane/types";
@@ -156,16 +156,26 @@ export const WorkspaceImageUploadModal = observer(function WorkspaceImageUploadM
File formats supported- .jpeg, .jpg, .png, .webp
-
- {isRemoving ? "Removing" : "Remove"}
-
+
-
- Cancel
-
-
- {isImageUploading ? "Uploading" : "Upload & Save"}
-
+
+
diff --git a/apps/web/core/components/core/theme/custom-theme-selector.tsx b/apps/web/core/components/core/theme/custom-theme-selector.tsx
index 47307776d85..4dd76e93b41 100644
--- a/apps/web/core/components/core/theme/custom-theme-selector.tsx
+++ b/apps/web/core/components/core/theme/custom-theme-selector.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { useForm } from "react-hook-form";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUserTheme } from "@plane/types";
import { applyCustomTheme } from "@plane/utils";
@@ -116,9 +116,14 @@ export const CustomThemeSelector = observer(function CustomThemeSelector() {
{/* Save Theme Button */}
-
- {isSubmitting ? t("common.saving") : isLoadingPalette ? "Generating" : t("set_theme")}
-
+
{/* Import/Export Section */}
diff --git a/apps/web/core/components/core/theme/download-config-button.tsx b/apps/web/core/components/core/theme/download-config-button.tsx
index c2ffc0bc3d8..47c2e2ff269 100644
--- a/apps/web/core/components/core/theme/download-config-button.tsx
+++ b/apps/web/core/components/core/theme/download-config-button.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
import type { UseFormGetValues } from "react-hook-form";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { setToast, TOAST_TYPE } from "@plane/propel/toast";
import type { IUserTheme } from "@plane/types";
@@ -58,8 +58,13 @@ export const CustomThemeDownloadConfigButton = observer(function CustomThemeDown
};
return (
-
- Download config
-
+
);
});
diff --git a/apps/web/core/components/core/theme/import-config-button.tsx b/apps/web/core/components/core/theme/import-config-button.tsx
index a4586163b4e..e2d6e828192 100644
--- a/apps/web/core/components/core/theme/import-config-button.tsx
+++ b/apps/web/core/components/core/theme/import-config-button.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import type { UseFormSetValue } from "react-hook-form";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { setToast, TOAST_TYPE } from "@plane/propel/toast";
import type { IUserTheme } from "@plane/types";
@@ -93,9 +93,14 @@ export const CustomThemeImportConfigButton = observer(function CustomThemeImport
return (
<>
- fileInputRef.current?.click()}>
- Import config
-
+ fileInputRef.current?.click()}
+ />
>
);
});
diff --git a/apps/web/core/components/cycles/archived-cycles/modal.tsx b/apps/web/core/components/cycles/archived-cycles/modal.tsx
index e29c05fed9c..86aa946b30f 100644
--- a/apps/web/core/components/cycles/archived-cycles/modal.tsx
+++ b/apps/web/core/components/cycles/archived-cycles/modal.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// hooks
@@ -69,12 +69,16 @@ export function ArchiveCycleModal(props: Props) {
Are you sure you want to archive the cycle? All your archives can be restored later.
-
- Cancel
-
-
- {isArchiving ? "Archiving" : "Archive"}
-
+
+
diff --git a/apps/web/core/components/cycles/form.tsx b/apps/web/core/components/cycles/form.tsx
index ff2448c7cf1..fc901921936 100644
--- a/apps/web/core/components/cycles/form.tsx
+++ b/apps/web/core/components/cycles/form.tsx
@@ -12,7 +12,7 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ETabIndices } from "@plane/constants";
// types
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { ICycle } from "@plane/types";
// ui
import { TextArea } from "@plane/ui";
@@ -189,18 +189,31 @@ export function CycleForm(props: Props) {
-
- {t("common.cancel")}
-
-
- {data
- ? isSubmitting
- ? t("common.updating")
- : t("project_cycles.update_cycle")
- : isSubmitting
- ? t("common.creating")
- : t("project_cycles.create_cycle")}
-
+
+
);
diff --git a/apps/web/core/components/cycles/transfer-issues.tsx b/apps/web/core/components/cycles/transfer-issues.tsx
index adbab83aa41..027d5bbe410 100644
--- a/apps/web/core/components/cycles/transfer-issues.tsx
+++ b/apps/web/core/components/cycles/transfer-issues.tsx
@@ -7,7 +7,7 @@
import React from "react";
import { AlertCircle } from "lucide-react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TransferIcon } from "@plane/propel/icons";
type Props = {
@@ -27,9 +27,15 @@ export function TransferIssues(props: Props) {
{canTransferIssues && (
- } onClick={handleClick} disabled={disabled}>
- Transfer work items
-
+ }
+ onClick={handleClick}
+ disabled={disabled}
+ />
)}
diff --git a/apps/web/core/components/dropdowns/buttons.tsx b/apps/web/core/components/dropdowns/buttons.tsx
index dbee6ab0b47..d8343a7beb0 100644
--- a/apps/web/core/components/dropdowns/buttons.tsx
+++ b/apps/web/core/components/dropdowns/buttons.tsx
@@ -6,7 +6,6 @@
import React from "react";
// helpers
-import { Button } from "@plane/propel/button";
import { Tooltip } from "@plane/propel/tooltip";
import { cn } from "@plane/utils";
// types
@@ -78,11 +77,10 @@ function BorderButton(props: ButtonProps) {
isMobile={isMobile}
renderByDefault={renderToolTipByDefault}
>
-
{children}
-
+
);
}
@@ -106,16 +104,15 @@ function BackgroundButton(props: ButtonProps) {
isMobile={isMobile}
renderByDefault={renderToolTipByDefault}
>
-
{children}
-
+
);
}
@@ -131,11 +128,10 @@ function TransparentButton(props: ButtonProps) {
isMobile={isMobile}
renderByDefault={renderToolTipByDefault}
>
-
{children}
-
+
);
}
diff --git a/apps/web/core/components/dropdowns/layout.tsx b/apps/web/core/components/dropdowns/layout.tsx
index f48b0e95705..4eae331fd97 100644
--- a/apps/web/core/components/dropdowns/layout.tsx
+++ b/apps/web/core/components/dropdowns/layout.tsx
@@ -4,16 +4,15 @@
* See the LICENSE file for details.
*/
-import { useCallback, useMemo } from "react";
+import { useMemo } from "react";
import { observer } from "mobx-react";
// plane imports
import { ISSUE_LAYOUT_MAP } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
+import { Button } from "@makeplane/propel/elements/button";
import { CheckIcon } from "@plane/propel/icons";
import { EIssueLayoutTypes } from "@plane/types";
-import { getButtonStyling } from "@plane/propel/button";
-import { Dropdown } from "@plane/ui";
-import { cn } from "@plane/utils";
+import { CustomMenu } from "@plane/ui";
// components
import { IssueLayoutIcon } from "@/components/issues/issue-layouts/layout-icon";
@@ -25,59 +24,37 @@ type TLayoutDropDown = {
export const LayoutDropDown = observer(function LayoutDropDown(props: TLayoutDropDown) {
const { onChange, value = EIssueLayoutTypes.LIST, disabledLayouts = [] } = props;
- // plane i18n
const { t } = useTranslation();
- // derived values
const availableLayouts = useMemo(
() => Object.values(ISSUE_LAYOUT_MAP).filter((layout) => !disabledLayouts.includes(layout.key)),
[disabledLayouts]
);
-
- const options = useMemo(
- () =>
- availableLayouts.map((issueLayout) => ({
- data: issueLayout.key,
- value: issueLayout.key,
- })),
- [availableLayouts]
- );
-
- const buttonContent = useCallback((isOpen: boolean, buttonValue: string | string[] | undefined) => {
- const dropdownValue = ISSUE_LAYOUT_MAP[buttonValue as EIssueLayoutTypes];
- return (
-
-
- {t(dropdownValue.i18n_label)}
-
- );
- }, []);
-
- const itemContent = useCallback((props: { value: string; selected: boolean }) => {
- const dropdownValue = ISSUE_LAYOUT_MAP[props.value as EIssueLayoutTypes];
-
- return (
-
-
-
- {t(dropdownValue.i18n_label)}
-
- {props.selected &&
}
-
- );
- }, []);
-
- const keyExtractor = useCallback((option: any) => option.value, []);
+ const selectedLayout = ISSUE_LAYOUT_MAP[value];
return (
- void}
- value={value?.toString()}
- keyExtractor={keyExtractor}
- options={options}
- buttonContainerClassName={cn(getButtonStyling("secondary", "lg"))}
- buttonContent={buttonContent}
- renderItem={itemContent}
- disableSearch
- />
+ }>
+
+ {t(selectedLayout.i18n_label)}
+
+ }
+ placement="bottom-end"
+ closeOnSelect
+ >
+ {availableLayouts.map((issueLayout) => (
+ onChange(issueLayout.key)}
+ >
+
+
+ {t(issueLayout.i18n_label)}
+
+ {value === issueLayout.key && }
+
+ ))}
+
);
});
diff --git a/apps/web/core/components/editor/lite-text/toolbar.tsx b/apps/web/core/components/editor/lite-text/toolbar.tsx
index dc955cddedf..0420a4b7314 100644
--- a/apps/web/core/components/editor/lite-text/toolbar.tsx
+++ b/apps/web/core/components/editor/lite-text/toolbar.tsx
@@ -13,7 +13,7 @@ import type { EditorRefApi } from "@plane/editor";
// i18n
import { useTranslation } from "@plane/i18n";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { GlobeIcon, LockIcon } from "@plane/propel/icons";
import type { ISvgIcons } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
@@ -177,16 +177,18 @@ export function IssueCommentToolbar(props: Props) {
{showSubmitButton && (
-
- {t(submitButtonText)}
-
+
+
+
)}
diff --git a/apps/web/core/components/empty-state/comic-box-button.tsx b/apps/web/core/components/empty-state/comic-box-button.tsx
index 222e0531f84..7452aaa4422 100644
--- a/apps/web/core/components/empty-state/comic-box-button.tsx
+++ b/apps/web/core/components/empty-state/comic-box-button.tsx
@@ -9,7 +9,7 @@ import { Fragment, useState } from "react";
import { usePopper } from "react-popper";
import { Popover } from "@headlessui/react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
label: string;
@@ -32,7 +32,7 @@ export function ComicBoxButton(props: Props) {
setIsHovered(false);
};
- const [referenceElement, setReferenceElement] = useState(null);
+ const [referenceElement, setReferenceElement] = useState(null);
const [popperElement, setPopperElement] = useState();
const { styles, attributes } = usePopper(referenceElement, popperElement, {
placement: "right-end",
@@ -49,18 +49,25 @@ export function ComicBoxButton(props: Props) {
return (
-
- {icon}
- {label}
+
+
-
+
-
+
{isHovered && (
diff --git a/apps/web/core/components/empty-state/detailed-empty-state-root.tsx b/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
index 593e5adda74..3e987ae1bfe 100644
--- a/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
+++ b/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
@@ -7,7 +7,7 @@
import React from "react";
import { observer } from "mobx-react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// utils
import { cn } from "@plane/utils";
@@ -50,15 +50,15 @@ function CustomButton({
}) {
return (
- {config.text}
-
+ />
);
}
diff --git a/apps/web/core/components/estimates/create/modal.tsx b/apps/web/core/components/estimates/create/modal.tsx
index 518f6665095..3fa1284fc20 100644
--- a/apps/web/core/components/estimates/create/modal.tsx
+++ b/apps/web/core/components/estimates/create/modal.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// plane imports
import { EEstimateSystem, ESTIMATE_SYSTEMS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ChevronLeftIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IEstimateFormData, TEstimateSystemKeys, TEstimatePointsObject, TEstimateTypeError } from "@plane/types";
@@ -200,13 +200,23 @@ export const CreateEstimateModal = observer(function CreateEstimateModal(props:
-
- {t("common.cancel")}
-
+
{estimatePoints && (
-
- {buttonLoader ? t("common.creating") : t("project_settings.estimates.create.label")}
-
+
)}
diff --git a/apps/web/core/components/estimates/delete/modal.tsx b/apps/web/core/components/estimates/delete/modal.tsx
index e6b39fcdec2..99b0511f361 100644
--- a/apps/web/core/components/estimates/delete/modal.tsx
+++ b/apps/web/core/components/estimates/delete/modal.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
import { observer } from "mobx-react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// hooks
@@ -76,12 +76,22 @@ export const DeleteEstimateModal = observer(function DeleteEstimateModal(props:
-
- Cancel
-
-
- {buttonLoader ? "Deleting" : "Delete Estimate"}
-
+
+
diff --git a/apps/web/core/components/estimates/points/create-root.tsx b/apps/web/core/components/estimates/points/create-root.tsx
index ad3c57e9fd7..00927b2df05 100644
--- a/apps/web/core/components/estimates/points/create-root.tsx
+++ b/apps/web/core/components/estimates/points/create-root.tsx
@@ -9,7 +9,7 @@ import { useCallback, useState } from "react";
import { observer } from "mobx-react";
// plane imports
import { estimateCount } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlusIcon } from "@plane/propel/icons";
import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeError } from "@plane/types";
import { Sortable } from "@plane/ui";
@@ -171,9 +171,14 @@ export const EstimatePointCreateRoot = observer(function EstimatePointCreateRoot
/>
))}
{estimatePoints && estimatePoints.length + (estimatePointCreate?.length || 0) <= estimateCount.max - 1 && (
- } onClick={handleCreate}>
- Add {estimateType}
-
+ }
+ onClick={handleCreate}
+ label={`Add ${estimateType}`}
+ />
)}
);
diff --git a/apps/web/core/components/exporter/export-form.tsx b/apps/web/core/components/exporter/export-form.tsx
index 8fde52e1bf0..df8d9c8636e 100644
--- a/apps/web/core/components/exporter/export-form.tsx
+++ b/apps/web/core/components/exporter/export-form.tsx
@@ -16,7 +16,7 @@ import {
// ISSUE_DISPLAY_FILTERS_BY_PAGE,
} from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
// import { Tooltip } from "@plane/propel/tooltip";
// import { EIssuesStoreType } from "@plane/types";
@@ -208,9 +208,14 @@ export const ExportForm = observer(function ExportForm(props: Props) {
}
/>
-
- {exportLoading ? `${t("workspace_settings.settings.exports.exporting")}...` : t("export")}
-
+
{/* Rich Filters */}
diff --git a/apps/web/core/components/exporter/export-modal.tsx b/apps/web/core/components/exporter/export-modal.tsx
index 7ca85bca085..2fbf2572b1d 100644
--- a/apps/web/core/components/exporter/export-modal.tsx
+++ b/apps/web/core/components/exporter/export-modal.tsx
@@ -10,7 +10,7 @@ import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// types
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser, IImporterService } from "@plane/types";
// ui
@@ -153,14 +153,20 @@ export const Exporter = observer(function Exporter(props: Props) {
onCheckedChange={setMultiple}
/>
-
- {t("cancel")}
-
-
- {exportLoading
- ? `${t("workspace_settings.settings.exports.exporting")}...`
- : t("workspace_settings.settings.exports.title")}
-
+
+
diff --git a/apps/web/core/components/exporter/prev-exports.tsx b/apps/web/core/components/exporter/prev-exports.tsx
index f3ebedb41f0..53880b10ef3 100644
--- a/apps/web/core/components/exporter/prev-exports.tsx
+++ b/apps/web/core/components/exporter/prev-exports.tsx
@@ -10,7 +10,7 @@ import useSWR, { mutate } from "swr";
import { MoveLeft, MoveRight, RefreshCw } from "lucide-react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmptyStateCompact } from "@plane/propel/empty-state";
import type { IExportData } from "@plane/types";
import { Table } from "@plane/ui";
@@ -78,31 +78,38 @@ export const PrevExports = observer(function PrevExports(props: Props) {
{t("workspace_settings.settings.exports.previous_exports")}
-
-
- {refreshing ? t("refreshing") : t("refresh_status")}
-
+
+ }
+ label={refreshing ? t("refreshing") : t("refresh_status")}
+ />
+
{Array.isArray(exporterServices?.results) && exporterServices.results.length > 0 && (
}
disabled={!exporterServices?.prev_page_results}
onClick={() => exporterServices?.prev_page_results && setCursor(exporterServices?.prev_cursor)}
- prependIcon={ }
- >
- {t("prev")}
-
+ />
}
+ iconPosition="end"
disabled={!exporterServices?.next_page_results}
onClick={() => exporterServices?.next_page_results && setCursor(exporterServices?.next_cursor)}
- appendIcon={ }
- >
- {t("next")}
-
+ />
)}
diff --git a/apps/web/core/components/exporter/single-export.tsx b/apps/web/core/components/exporter/single-export.tsx
index 8bd05281e93..9f67e196c7e 100644
--- a/apps/web/core/components/exporter/single-export.tsx
+++ b/apps/web/core/components/exporter/single-export.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IExportData } from "@plane/types";
// helpers
import { getDate, renderFormattedDate } from "@plane/utils";
@@ -66,9 +66,7 @@ export function SingleExport({ service, refreshing }: Props) {
{service.status == "completed" && (
)}
diff --git a/apps/web/core/components/global/product-updates/footer.tsx b/apps/web/core/components/global/product-updates/footer.tsx
index 09965aac3e3..e2ae29b179f 100644
--- a/apps/web/core/components/global/product-updates/footer.tsx
+++ b/apps/web/core/components/global/product-updates/footer.tsx
@@ -6,10 +6,8 @@
import { useTranslation } from "@plane/i18n";
// ui
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlaneLogo } from "@plane/propel/icons";
-// helpers
-import { cn } from "@plane/utils";
export function ProductUpdatesFooter() {
const { t } = useTranslation();
@@ -58,18 +56,15 @@ export function ProductUpdatesFooter() {
Forum
-
-
- {t("powered_by_plane_pages")}
-
+ }
+ nativeButton={false}
+ render={ }
+ />
);
}
diff --git a/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx b/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx
index e79933fa7a5..664ecddac83 100644
--- a/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx
+++ b/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx
@@ -12,7 +12,7 @@ import { Controller, useForm } from "react-hook-form";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { TLinkEditableFields } from "@plane/types";
import { ModalCore } from "@plane/ui";
import type { TLinkOperations } from "./use-links";
@@ -134,13 +134,15 @@ export const LinkCreateUpdateModal = observer(function LinkCreateUpdateModal(pro
-
- {t("Cancel")}
-
-
- {preloadedData?.id ? (isSubmitting ? t("updating") : t("update")) : isSubmitting ? t("adding") : t("add")}{" "}
- {t("home.quick_links.title")}
-
+
+
diff --git a/apps/web/core/components/inbox/content/inbox-issue-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-header.tsx
index 5243521731e..4e28160c4a8 100644
--- a/apps/web/core/components/inbox/content/inbox-issue-header.tsx
+++ b/apps/web/core/components/inbox/content/inbox-issue-header.tsx
@@ -10,7 +10,7 @@ import { Clock, FileStack, MoreHorizontal, MoveRight } from "lucide-react";
// plane imports
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { IconButton, getIconButtonStyling } from "@plane/propel/icon-button";
import {
LinkIcon,
@@ -328,7 +328,10 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader
{canMarkAsAccepted && (
}
+ label={t("inbox_issue.actions.accept")}
onClick={() =>
handleActionWithPermission(
isProjectAdmin,
@@ -336,16 +339,16 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader
t("inbox_issue.errors.accept_permission")
)
}
- >
-
- {t("inbox_issue.actions.accept")}
-
+ />
)}
{canMarkAsDeclined && (
}
+ label={t("inbox_issue.actions.decline")}
onClick={() =>
handleActionWithPermission(
isProjectAdmin,
@@ -353,26 +356,27 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader
t("inbox_issue.errors.decline_permission")
)
}
- >
-
- {t("inbox_issue.actions.decline")}
-
+ />
)}
{isAcceptedOrDeclined ? (
}
+ size="md"
+ stretch="auto"
+ label={t("inbox_issue.actions.copy")}
+ icon={ }
onClick={() => handleCopyIssueLink(workItemLink)}
- >
- {t("inbox_issue.actions.copy")}
-
+ />
router.push(workItemLink)} target="_self">
- }>
- {t("inbox_issue.actions.open")}
-
+ }
+ />
) : (
diff --git a/apps/web/core/components/inbox/inbox-filter/root.tsx b/apps/web/core/components/inbox/inbox-filter/root.tsx
index 2413ccc382f..6a0909af7cb 100644
--- a/apps/web/core/components/inbox/inbox-filter/root.tsx
+++ b/apps/web/core/components/inbox/inbox-filter/root.tsx
@@ -5,10 +5,9 @@
*/
import { ListFilter } from "lucide-react";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
// plane imports
import { ChevronDownIcon } from "@plane/propel/icons";
-import { cn } from "@plane/utils";
// components
import { FiltersDropdown } from "@/components/issues/issue-layouts/filters";
// hooks
@@ -20,11 +19,11 @@ import { InboxIssueOrderByDropdown } from "./sorting/order-by";
const smallButton = ;
const largeButton = (
-
+ }>
Filters
-
+
);
export function FiltersRoot() {
const windowSize = useSize();
diff --git a/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx b/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx
index ad2e720c715..385a6473f53 100644
--- a/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx
+++ b/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx
@@ -8,13 +8,10 @@ import { observer } from "mobx-react";
import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react";
import { INBOX_ISSUE_ORDER_BY_OPTIONS, INBOX_ISSUE_SORT_BY_OPTIONS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons";
import type { TInboxIssueSortingOrderByKeys, TInboxIssueSortingSortByKeys } from "@plane/types";
import { CustomMenu } from "@plane/ui";
-// constants
-// helpers
-import { cn } from "@plane/utils";
// hooks
import { useProjectInbox } from "@/hooks/store/use-project-inbox";
import useSize from "@/hooks/use-window-size";
@@ -33,7 +30,7 @@ export const InboxIssueOrderByDropdown = observer(function InboxIssueOrderByDrop
);
const largeButton = (
-
+
}>
{inboxSorting?.sort_by === "asc" ? (
) : (
@@ -41,7 +38,7 @@ export const InboxIssueOrderByDropdown = observer(function InboxIssueOrderByDrop
)}
{t(orderByDetails?.i18n_label || "inbox_issue.order_by.created_at")}
-
+
);
return (
{
if (descriptionEditorRef.current?.isEditorReadyToDiscard()) {
@@ -232,20 +234,18 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props
}
}}
tabIndex={getIndex("discard_button")}
- >
- {t("discard")}
-
+ />
- {formSubmitting ? t("creating") : t("create_work_item")}
-
+ />
diff --git a/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx b/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx
index 1ad83a6b0e5..700c517ca4d 100644
--- a/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx
+++ b/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
// ui
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Calendar } from "@plane/propel/calendar";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -52,13 +52,14 @@ export function InboxIssueSnoozeModal(props: InboxIssueSnoozeModalProps) {
/>
{
handleClose();
onConfirm(date);
}}
- >
- {t("inbox_issue.actions.snooze")}
-
+ />
);
diff --git a/apps/web/core/components/instance/not-ready-view.tsx b/apps/web/core/components/instance/not-ready-view.tsx
index 850d0af2ebc..998055c52e4 100644
--- a/apps/web/core/components/instance/not-ready-view.tsx
+++ b/apps/web/core/components/instance/not-ready-view.tsx
@@ -11,7 +11,7 @@ import GradientLogo from "@/app/assets/auth/gradient-logo.webp?url";
import GradientBgLogo from "@/app/assets/auth/gradient-bg-logo.webp?url";
import DefaultLayout from "@/layouts/default-layout";
import { PlaneLockup } from "@plane/propel/icons";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
export function InstanceNotReady() {
return (
@@ -46,9 +46,7 @@ export function InstanceNotReady() {
-
- Get started
-
+
diff --git a/apps/web/core/components/integration/single-integration-card.tsx b/apps/web/core/components/integration/single-integration-card.tsx
index 6f638012ba0..dabaaaf18c9 100644
--- a/apps/web/core/components/integration/single-integration-card.tsx
+++ b/apps/web/core/components/integration/single-integration-card.tsx
@@ -10,7 +10,7 @@ import { useParams } from "next/navigation";
import useSWR, { mutate } from "swr";
import { CheckCircle } from "lucide-react";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
import type { IAppIntegration, IWorkspaceIntegration } from "@plane/types";
@@ -144,18 +144,20 @@ export const SingleIntegrationCard = observer(function SingleIntegrationCard({ i
disabled={isUserAdmin}
tooltipContent={!isUserAdmin ? "You don't have permission to perform this" : null}
>
- {
- if (!isUserAdmin) return;
- handleRemoveIntegration();
- }}
- disabled={!isUserAdmin}
- loading={deletingIntegration}
- >
- {deletingIntegration ? "Uninstalling..." : "Uninstall"}
-
+
+ {
+ if (!isUserAdmin) return;
+ handleRemoveIntegration();
+ }}
+ disabled={!isUserAdmin}
+ loading={deletingIntegration}
+ />
+
) : (
- {
- if (!isUserAdmin) return;
- startAuth();
- }}
- loading={isInstalling}
- >
- {isInstalling ? "Installing..." : "Install"}
-
+
+ {
+ if (!isUserAdmin) return;
+ startAuth();
+ }}
+ loading={isInstalling}
+ />
+
)
) : (
diff --git a/apps/web/core/components/issues/archive-issue-modal.tsx b/apps/web/core/components/issues/archive-issue-modal.tsx
index ad487abca11..0c848a1d893 100644
--- a/apps/web/core/components/issues/archive-issue-modal.tsx
+++ b/apps/web/core/components/issues/archive-issue-modal.tsx
@@ -8,7 +8,7 @@ import { useState } from "react";
// i18n
import { useTranslation } from "@plane/i18n";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TDeDupeIssue, TIssue } from "@plane/types";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -75,12 +75,16 @@ export function ArchiveIssueModal(props: Props) {
{t("issue.archive.confirm_message")}
-
- {t("common.cancel")}
-
-
- {isArchiving ? t("common.archiving") : t("common.archive")}
-
+
+
diff --git a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
index bfd33369020..2db6b84bec8 100644
--- a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
+++ b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
@@ -5,7 +5,7 @@
*/
import { MARKETING_PLANE_ONE_PAGE_LINK } from "@plane/constants";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { cn } from "@plane/utils";
type Props = {
@@ -22,14 +22,16 @@ export function BulkOperationsUpgradeBanner(props: Props) {
Change state, priority, and more for several work items at once. Save three minutes on an average per
operation.
-
- Upgrade to One
-
+
+ }
+ />
+
);
diff --git a/apps/web/core/components/issues/confirm-issue-discard.tsx b/apps/web/core/components/issues/confirm-issue-discard.tsx
index 9ba05b9afd8..9e9afbb2234 100644
--- a/apps/web/core/components/issues/confirm-issue-discard.tsx
+++ b/apps/web/core/components/issues/confirm-issue-discard.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
type Props = {
@@ -48,17 +48,18 @@ export function ConfirmIssueDiscard(props: Props) {
-
- Discard
-
+
-
- Cancel
-
-
- {isLoading ? "Saving" : "Save to Drafts"}
-
+
+
diff --git a/apps/web/core/components/issues/filters.tsx b/apps/web/core/components/issues/filters.tsx
index cbd899e9f24..abee6c9a1a0 100644
--- a/apps/web/core/components/issues/filters.tsx
+++ b/apps/web/core/components/issues/filters.tsx
@@ -10,7 +10,7 @@ import { ChartNoAxesColumn, SlidersHorizontal } from "lucide-react";
// plane imports
import { EIssueFilterType, ISSUE_STORE_TO_FILTERS_MAP } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types";
import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/types";
// hooks
@@ -126,12 +126,16 @@ export const HeaderFilters = observer(function HeaderFilters(props: Props) {
/>
{canUserCreateIssue ? (
- setAnalyticsModal(true)} variant="secondary" size="lg">
- {t("common.analytics")}
-
-
-
-
+
+ setAnalyticsModal(true)}
+ variant="secondary"
+ size="md"
+ stretch="auto"
+ icon={ }
+ label={t("common.analytics")}
+ />
+
) : (
<>>
)}
diff --git a/apps/web/core/components/issues/header.tsx b/apps/web/core/components/issues/header.tsx
index b032f11c115..6ae414f9bf3 100644
--- a/apps/web/core/components/issues/header.tsx
+++ b/apps/web/core/components/issues/header.tsx
@@ -11,7 +11,7 @@ import { Circle } from "lucide-react";
// plane imports
import { EUserPermissions, EUserPermissionsLevel, SPACE_BASE_PATH, SPACE_BASE_URL } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { NewTabIcon, WorkItemsIcon } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
import { EIssuesStoreType } from "@plane/types";
@@ -115,14 +115,13 @@ export const IssuesHeader = observer(function IssuesHeader() {
{canUserCreateIssue && (
{
toggleCreateIssueModal(true, EIssuesStoreType.PROJECT);
}}
- >
- {t("issue.label", { count: 1 })}
- {t("issue.add.label")}
-
+ label={t("issue.add.label")}
+ />
)}
diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx
index ef808a1fe7c..c48c0192662 100644
--- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx
+++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// plane imports
import { ListFilter } from "lucide-react";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { GroupByColumnTypes, TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types";
import { EIssueServiceType, EIssuesStoreType } from "@plane/types";
// hooks
@@ -102,9 +102,13 @@ export const SubIssuesListRoot = observer(function SubIssuesListRoot(props: Prop
icon={ }
customClassName={storeType !== EIssuesStoreType.EPIC ? "border-none" : ""}
actionElement={
- resetFilters(rootIssueId)}>
- {t("sub_work_item.empty_state.list_filters.action")}
-
+ resetFilters(rootIssueId)}
+ />
}
/>
) : (
diff --git a/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx
index df2dd31cf5d..84fd0c71104 100644
--- a/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx
+++ b/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx
@@ -6,7 +6,7 @@
import React from "react";
// helpers
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
icon: React.ReactNode;
@@ -16,10 +16,5 @@ type Props = {
export function IssueDetailWidgetButton(props: Props) {
const { icon, title, disabled = false } = props;
- return (
-
- {icon && icon}
- {title}
-
- );
+ return ;
}
diff --git a/apps/web/core/components/issues/issue-detail/label/label-list-item.tsx b/apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
index ff2f84f7d41..4c1bf9c9300 100644
--- a/apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
+++ b/apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
@@ -5,7 +5,7 @@
*/
import { observer } from "mobx-react";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CloseIcon, LabelFilledIcon } from "@plane/propel/icons";
// types
import { useLabel } from "@/hooks/store/use-label";
@@ -37,10 +37,15 @@ export const LabelListItem = observer(function LabelListItem(props: TLabelListIt
if (!label) return <>>;
return (
-
-
- {label.name}
- {!disabled && }
-
+ }
+ label={label.name}
+ />
);
});
diff --git a/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx b/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
index 9c006514610..a4383b3d146 100644
--- a/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
+++ b/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
@@ -12,7 +12,7 @@ import { Combobox } from "@headlessui/react";
// plane imports
import { EUserPermissionsLevel, getRandomLabelColor } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CheckIcon, SearchIcon, PlusIcon } from "@plane/propel/icons";
import type { IIssueLabel } from "@plane/types";
import { EUserProjectRoles } from "@plane/types";
@@ -92,7 +92,7 @@ export const IssueLabelSelect = observer(function IssueLabelSelect(props: IIssue
const issueLabels = values ?? [];
- const label = {t("label.select")} ;
+ const label = t("label.select");
const searchInputKeyDown = async (e: React.KeyboardEvent) => {
if (query !== "" && e.key === "Escape") {
@@ -128,15 +128,15 @@ export const IssueLabelSelect = observer(function IssueLabelSelect(props: IIssue
>
}
ref={setReferenceElement}
type="button"
- variant="tertiary"
- size="sm"
- prependIcon={ }
onClick={() => !projectLabels && fetchLabels()}
- >
- {label}
-
+ />
diff --git a/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx b/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx
index 91c3e4f403c..334eba7ffde 100644
--- a/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx
+++ b/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx
@@ -11,7 +11,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
// plane types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { TIssueLinkEditableFields, TIssueServiceType } from "@plane/types";
// plane ui
import { ModalCore } from "@plane/ui";
@@ -142,11 +142,12 @@ export const IssueLinkCreateUpdateModal = observer(function IssueLinkCreateUpdat
-
- {t("common.cancel")}
-
-
- {`${
+
+
+ type="submit"
+ loading={isSubmitting}
+ />
diff --git a/apps/web/core/components/issues/issue-detail/subscription.tsx b/apps/web/core/components/issues/issue-detail/subscription.tsx
index d9573d63c62..a06d1125655 100644
--- a/apps/web/core/components/issues/issue-detail/subscription.tsx
+++ b/apps/web/core/components/issues/issue-detail/subscription.tsx
@@ -12,7 +12,7 @@ import { Bell, BellOff } from "lucide-react";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// UI
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EIssueServiceType } from "@plane/types";
import { Loader } from "@plane/ui";
@@ -82,23 +82,15 @@ export const IssueSubscription = observer(function IssueSubscription(props: TIss
return (
:
}
+ icon={isSubscribed ?
:
}
variant="secondary"
- className="hover:!bg-accent-primary/20"
+ size="md"
+ stretch="auto"
onClick={handleSubscription}
disabled={!isEditable || loading}
- size="lg"
- >
- {loading ? (
-
- {t("common.loading")}
-
- ) : isSubscribed ? (
-
{t("common.actions.unsubscribe")}
- ) : (
-
{t("common.actions.subscribe")}
- )}
-
+ loading={loading}
+ label={isSubscribed ? t("common.actions.unsubscribe") : t("common.actions.subscribe")}
+ />
);
});
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
index fdf49f374a8..6ecdfab98a8 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
@@ -10,7 +10,7 @@ import { usePopper } from "react-popper";
// headless ui
import { Popover, Transition } from "@headlessui/react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
children: React.ReactNode;
@@ -55,35 +55,29 @@ export function FiltersDropdown(props: Props) {
) : (
-
+
- <>
-
- {title}
-
- {isFiltersApplied && (
-
- )}
- >
-
+ label={title ?? ""}
+ />
+ {isFiltersApplied && (
+
+ )}
- {miniIcon || title}
-
+ />
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx
index 14f74909465..6edf182d77d 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx
@@ -6,7 +6,7 @@
import { ISSUE_LAYOUTS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ChevronDownIcon } from "@plane/propel/icons";
import type { EIssueLayoutTypes } from "@plane/types";
import { CustomMenu } from "@plane/ui";
@@ -29,12 +29,19 @@ export function MobileLayoutSelection({
className="flex flex-grow justify-center text-13 text-secondary"
placement="bottom-start"
customButton={
-
- {activeLayout && (
-
- )}
-
-
+
+ ) : (
+
+ )
+ }
+ label={t("common.layout")}
+ />
}
customButtonClassName="flex flex-grow justify-center text-secondary text-13"
closeOnSelect
diff --git a/apps/web/core/components/issues/issue-modal/form.tsx b/apps/web/core/components/issues/issue-modal/form.tsx
index a9ea0faa355..0ed2505fd57 100644
--- a/apps/web/core/components/issues/issue-modal/form.tsx
+++ b/apps/web/core/components/issues/issue-modal/form.tsx
@@ -16,7 +16,7 @@ import { ETabIndices, DEFAULT_WORK_ITEM_FORM_VALUES } from "@plane/constants";
import type { EditorRefApi } from "@plane/editor";
// i18n
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TIssue, TWorkspaceDraftIssue } from "@plane/types";
// hooks
@@ -467,7 +467,9 @@ export const IssueFormRoot = observer(function IssueFormRoot(props: IssueFormPro
{
if (editorRef.current?.isEditorReadyToDiscard()) {
onClose();
@@ -479,34 +481,32 @@ export const IssueFormRoot = observer(function IssueFormRoot(props: IssueFormPro
});
}
}}
- >
- {t("discard")}
-
+ />
- {isSubmitting ? primaryButtonText.loading : primaryButtonText.default}
-
+ />
{moveToIssue && (
- {t("add_to_project")}
-
+ />
)}
diff --git a/apps/web/core/components/labels/create-update-label-inline.tsx b/apps/web/core/components/labels/create-update-label-inline.tsx
index 70be4ca9198..8cac5a51d66 100644
--- a/apps/web/core/components/labels/create-update-label-inline.tsx
+++ b/apps/web/core/components/labels/create-update-label-inline.tsx
@@ -15,7 +15,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { getRandomLabelColor, LABEL_COLOR_OPTIONS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IIssueLabel } from "@plane/types";
@@ -238,19 +238,18 @@ export const CreateUpdateLabelInline = observer(
)}
/>
- handleClose()}>
- {t("cancel")}
-
+ handleClose()} />
{
e.preventDefault();
handleSubmit(handleFormSubmit)();
}}
loading={isSubmitting}
- >
- {isUpdating ? (isSubmitting ? t("updating") : t("update")) : isSubmitting ? t("adding") : t("add")}
-
+ />
{errors.name?.message && {errors.name?.message}
}
>
diff --git a/apps/web/core/components/labels/project-setting-label-list.tsx b/apps/web/core/components/labels/project-setting-label-list.tsx
index 6bb506970ae..80c99a264af 100644
--- a/apps/web/core/components/labels/project-setting-label-list.tsx
+++ b/apps/web/core/components/labels/project-setting-label-list.tsx
@@ -10,7 +10,7 @@ import { useParams } from "next/navigation";
// plane imports
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmptyStateCompact } from "@plane/propel/empty-state";
import type { IIssueLabel } from "@plane/types";
import { Loader } from "@plane/ui";
@@ -85,9 +85,7 @@ export const ProjectSettingsLabelList = observer(function ProjectSettingsLabelLi
description={t("project_settings.labels.description")}
control={
isEditable && (
-
- {t("common.add_label")}
-
+
)
}
/>
diff --git a/apps/web/core/components/license/modal/card/checkout-button.tsx b/apps/web/core/components/license/modal/card/checkout-button.tsx
index 01de02caf85..d21d7bcd830 100644
--- a/apps/web/core/components/license/modal/card/checkout-button.tsx
+++ b/apps/web/core/components/license/modal/card/checkout-button.tsx
@@ -6,7 +6,7 @@
import { observer } from "mobx-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@plane/types";
import { Loader } from "@plane/ui";
// local imports
@@ -73,23 +73,26 @@ export const PlanCheckoutButton = observer(function PlanCheckoutButton(props: Pr
) : (
-
{
- if (product && price.id) {
- handleCheckout({
- planVariant,
- productId: product.id,
- priceId: price.id,
- });
+
+
- {upgradeLoaderType === planVariant ? "Redirecting to Stripe" : (upgradeCTA ?? `Upgrade to ${planeName}`)}
-
+ onClick={() => {
+ if (product && price.id) {
+ handleCheckout({
+ planVariant,
+ productId: product.id,
+ priceId: price.id,
+ });
+ }
+ }}
+ disabled={!!upgradeLoaderType}
+ />
+
{isTrialAllowed && !isSelfHosted && (
{renderTrialButton &&
diff --git a/apps/web/core/components/license/modal/card/talk-to-sales.tsx b/apps/web/core/components/license/modal/card/talk-to-sales.tsx
index c12ee704229..7869d7ddaa9 100644
--- a/apps/web/core/components/license/modal/card/talk-to-sales.tsx
+++ b/apps/web/core/components/license/modal/card/talk-to-sales.tsx
@@ -7,10 +7,9 @@
import { observer } from "mobx-react";
// types
// plane imports
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@plane/types";
import { Loader } from "@plane/ui";
-import { cn } from "@plane/utils";
// local imports
import { BasePaidPlanCard } from "./base-paid-plan-card";
@@ -72,9 +71,16 @@ export const TalkToSalesCard = observer(function TalkToSalesCard(props: TalkToSa
) : (
-
- Talk to Sales
-
+
+ }
+ />
+
{isTrialAllowed && !isSelfHosted && (
{renderTrialButton &&
diff --git a/apps/web/core/components/modules/archived-modules/modal.tsx b/apps/web/core/components/modules/archived-modules/modal.tsx
index 58067d62c64..5ab959a6d9f 100644
--- a/apps/web/core/components/modules/archived-modules/modal.tsx
+++ b/apps/web/core/components/modules/archived-modules/modal.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// hooks
@@ -69,12 +69,16 @@ export function ArchiveModuleModal(props: Props) {
Are you sure you want to archive the module? All your archives can be restored later.
-
- Cancel
-
-
- {isArchiving ? "Archiving" : "Archive"}
-
+
+
diff --git a/apps/web/core/components/modules/dropdowns/order-by.tsx b/apps/web/core/components/modules/dropdowns/order-by.tsx
index b33cf62cd37..0e615d55dfc 100644
--- a/apps/web/core/components/modules/dropdowns/order-by.tsx
+++ b/apps/web/core/components/modules/dropdowns/order-by.tsx
@@ -7,15 +7,11 @@
import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react";
import { MODULE_ORDER_BY_OPTIONS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons";
import type { TModuleOrderByOptions } from "@plane/types";
// ui
import { CustomMenu } from "@plane/ui";
-// helpers
-import { cn } from "@plane/utils";
-// types
-// constants
type Props = {
onChange: (value: TModuleOrderByOptions) => void;
@@ -35,11 +31,11 @@ export function ModuleOrderByDropdown(props: Props) {
return (
+ }>
{!isDescending ? : }
{orderByDetails && t(orderByDetails?.i18n_label)}
-
+
}
placement="bottom-end"
maxHeight="lg"
diff --git a/apps/web/core/components/modules/form.tsx b/apps/web/core/components/modules/form.tsx
index 3eb632eff76..5216929b12f 100644
--- a/apps/web/core/components/modules/form.tsx
+++ b/apps/web/core/components/modules/form.tsx
@@ -11,7 +11,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ETabIndices } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IModule } from "@plane/types";
// ui
import { TextArea } from "@plane/ui";
@@ -238,18 +238,31 @@ export function ModuleForm(props: Props) {
-
- {t("cancel")}
-
-
- {status
- ? isSubmitting
- ? t("updating")
- : t("project_module.update_module")
- : isSubmitting
- ? t("creating")
- : t("project_module.create_module")}
-
+
+
);
diff --git a/apps/web/core/components/modules/links/create-update-modal.tsx b/apps/web/core/components/modules/links/create-update-modal.tsx
index 3d437a07e01..03da1b45f00 100644
--- a/apps/web/core/components/modules/links/create-update-modal.tsx
+++ b/apps/web/core/components/modules/links/create-update-modal.tsx
@@ -7,9 +7,9 @@
import { useEffect } from "react";
import { Controller, useForm } from "react-hook-form";
// plane types
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
-import { Button } from "@plane/propel/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { ILinkDetails, ModuleLink } from "@plane/types";
// plane ui
@@ -144,12 +144,15 @@ export function CreateUpdateModuleLinkModal(props: Props) {
-
- Cancel
-
-
- {data ? (isSubmitting ? "Updating link" : "Update link") : isSubmitting ? "Adding link" : "Add link"}
-
+
+
diff --git a/apps/web/core/components/onboarding/create-workspace.tsx b/apps/web/core/components/onboarding/create-workspace.tsx
index b7eae164897..d07558d012d 100644
--- a/apps/web/core/components/onboarding/create-workspace.tsx
+++ b/apps/web/core/components/onboarding/create-workspace.tsx
@@ -13,7 +13,7 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "@plane/constants";
// types
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser, IWorkspace, TOnboardingSteps } from "@plane/types";
// ui
@@ -106,17 +106,15 @@ export const CreateWorkspace = observer(function CreateWorkspace(props: Props) {
{!!invitedWorkspaces && (
<>
-
- I want to join invited workspaces{" "}
-
- {invitedWorkspaces}
-
-
+
+
+
or
@@ -266,9 +264,15 @@ export const CreateWorkspace = observer(function CreateWorkspace(props: Props) {
)}
-
- {isSubmitting ? : t("workspace_creation.button.default")}
-
+
);
diff --git a/apps/web/core/components/onboarding/invitations.tsx b/apps/web/core/components/onboarding/invitations.tsx
index 09152433c15..70878a40563 100644
--- a/apps/web/core/components/onboarding/invitations.tsx
+++ b/apps/web/core/components/onboarding/invitations.tsx
@@ -8,7 +8,7 @@ import { useState } from "react";
// plane imports
import { ROLE } from "@plane/constants";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IWorkspaceMemberInvitation } from "@plane/types";
// ui
import { Checkbox } from "@makeplane/propel/components/checkbox";
@@ -100,27 +100,28 @@ export function Invitations(props: Props) {
- {isJoiningWorkspaces ? : "Continue to workspace"}
-
+ stretch="full"
+ loading={isJoiningWorkspaces}
+ label={"Continue to workspace"}
+ />
-
- Create your own workspace
-
+
+
+
) : (
No Invitations found
diff --git a/apps/web/core/components/onboarding/invite-members.tsx b/apps/web/core/components/onboarding/invite-members.tsx
index 3a4d03a78e8..75a7c823df3 100644
--- a/apps/web/core/components/onboarding/invite-members.tsx
+++ b/apps/web/core/components/onboarding/invite-members.tsx
@@ -26,7 +26,7 @@ import type { EUserPermissions } from "@plane/constants";
import { ROLE, ROLE_DETAILS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlusIcon, CheckIcon, ChevronDownIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser, IWorkspace } from "@plane/types";
@@ -391,15 +391,13 @@ export function InviteMembers(props: Props) {
- {isSubmitting ? : "Continue"}
-
-
- I’ll do it later
-
+ stretch="full"
+ loading={isSubmitting}
+ label={"Continue"}
+ />
+
diff --git a/apps/web/core/components/onboarding/profile-setup.tsx b/apps/web/core/components/onboarding/profile-setup.tsx
index e02f934be8b..6b19368afd1 100644
--- a/apps/web/core/components/onboarding/profile-setup.tsx
+++ b/apps/web/core/components/onboarding/profile-setup.tsx
@@ -13,7 +13,7 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import { E_PASSWORD_STRENGTH } from "@plane/constants";
// types
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser, TUserProfile, TOnboardingSteps } from "@plane/types";
// ui
@@ -552,9 +552,15 @@ export const ProfileSetup = observer(function ProfileSetup(props: Props) {
>
)}
-
- {isSubmitting ? : "Continue"}
-
+
diff --git a/apps/web/core/components/onboarding/steps/profile/root.tsx b/apps/web/core/components/onboarding/steps/profile/root.tsx
index 5e71c802f3b..1a58b36ba24 100644
--- a/apps/web/core/components/onboarding/steps/profile/root.tsx
+++ b/apps/web/core/components/onboarding/steps/profile/root.tsx
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
import { ImageIcon } from "lucide-react";
// plane imports
import { E_PASSWORD_STRENGTH } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser } from "@plane/types";
import { EOnboardingSteps } from "@plane/types";
@@ -247,9 +247,7 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC
)}
{/* Continue Button */}
-
- Continue
-
+
{/* Marketing Consent */}
{!instanceConfig?.is_self_managed && (
diff --git a/apps/web/core/components/onboarding/steps/role/root.tsx b/apps/web/core/components/onboarding/steps/role/root.tsx
index 43029d1cfdb..358217b3785 100644
--- a/apps/web/core/components/onboarding/steps/role/root.tsx
+++ b/apps/web/core/components/onboarding/steps/role/root.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
import { Box, PenTool, Rocket, Monitor, RefreshCw } from "lucide-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CheckIcon, ViewsIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TUserProfile } from "@plane/types";
@@ -145,12 +145,10 @@ export const RoleSetupStep = observer(function RoleSetupStep({ handleStepChange
{/* Action Buttons */}
-
- Continue
-
-
- Skip
-
+
+
+
+
);
diff --git a/apps/web/core/components/onboarding/steps/team/root.tsx b/apps/web/core/components/onboarding/steps/team/root.tsx
index b5fb4bd0b65..069dbacd9aa 100644
--- a/apps/web/core/components/onboarding/steps/team/root.tsx
+++ b/apps/web/core/components/onboarding/steps/team/root.tsx
@@ -24,7 +24,7 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import type { EUserPermissions } from "@plane/constants";
import { ROLE, ROLE_DETAILS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlusIcon, CheckIcon, ChevronDownIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EOnboardingSteps } from "@plane/types";
@@ -386,15 +386,13 @@ export const InviteTeamStep = observer(function InviteTeamStep(props: Props) {
- {isSubmitting ? : "Continue"}
-
-
- I’ll do it later
-
+ stretch="full"
+ loading={isSubmitting}
+ label={"Continue"}
+ />
+
);
diff --git a/apps/web/core/components/onboarding/steps/usecase/root.tsx b/apps/web/core/components/onboarding/steps/usecase/root.tsx
index 8908adaf3b4..1e0303f0792 100644
--- a/apps/web/core/components/onboarding/steps/usecase/root.tsx
+++ b/apps/web/core/components/onboarding/steps/usecase/root.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
// plane imports
import { USE_CASES } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CheckIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TUserProfile } from "@plane/types";
@@ -150,12 +150,8 @@ export const UseCaseSetupStep = observer(function UseCaseSetupStep({ handleStepC
{/* Action Buttons */}
-
- Continue
-
-
- Skip
-
+
+
);
diff --git a/apps/web/core/components/onboarding/steps/workspace/create.tsx b/apps/web/core/components/onboarding/steps/workspace/create.tsx
index f9c32a91f26..b94a600b8b5 100644
--- a/apps/web/core/components/onboarding/steps/workspace/create.tsx
+++ b/apps/web/core/components/onboarding/steps/workspace/create.tsx
@@ -11,7 +11,7 @@ import { CircleCheck } from "lucide-react";
// plane imports
import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IUser, IWorkspace } from "@plane/types";
import { Spinner } from "@plane/ui";
@@ -290,13 +290,23 @@ export const WorkspaceCreateStep = observer(function WorkspaceCreateStep({
-
- {isSubmitting ? : t("workspace_creation.button.default")}
-
+
{hasInvitations && (
-
- Join existing workspace
-
+
)}
diff --git a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
index 92153459c07..fc0b7f2e19d 100644
--- a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
+++ b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
// plane imports
import { ROLE } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IWorkspaceMemberInvitation } from "@plane/types";
import { Checkbox } from "@makeplane/propel/components/checkbox";
import { Spinner } from "@plane/ui";
@@ -102,22 +102,21 @@ export function WorkspaceJoinInvitesStep(props: Props) {
- {isJoiningWorkspaces ? : "Continue"}
-
+ stretch="full"
+ loading={isJoiningWorkspaces}
+ label={"Continue"}
+ />
- Create new workspace
-
+ />
) : (
diff --git a/apps/web/core/components/onboarding/switch-account-modal.tsx b/apps/web/core/components/onboarding/switch-account-modal.tsx
index aa80f8e330a..2b1a793c33f 100644
--- a/apps/web/core/components/onboarding/switch-account-modal.tsx
+++ b/apps/web/core/components/onboarding/switch-account-modal.tsx
@@ -10,7 +10,7 @@ import { useTheme } from "next-themes";
import { ArrowRightLeft } from "lucide-react";
import { Dialog, Transition } from "@headlessui/react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
// hooks
import { useUser } from "@/hooks/store/user";
@@ -104,9 +104,14 @@ export function SwitchAccountModal(props: Props) {
-
- {switchingAccount ? "Switching..." : "Switch account"}
-
+
diff --git a/apps/web/core/components/onboarding/tour/root.tsx b/apps/web/core/components/onboarding/tour/root.tsx
index db87b7150b7..4180221e350 100644
--- a/apps/web/core/components/onboarding/tour/root.tsx
+++ b/apps/web/core/components/onboarding/tour/root.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
import { observer } from "mobx-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CloseIcon, PlaneLockup } from "@plane/propel/icons";
// assets
import CyclesTour from "@/app/assets/onboarding/cycles.webp?url";
@@ -109,12 +109,13 @@ export const TourRoot = observer(function TourRoot(props: TOnboardingTourProps)
{
setStep("work-items");
}}
- >
- Take a Product Tour
-
+ />
{currentStep?.prevStep && (
- setStep(currentStep.prevStep ?? "welcome")}>
- Back
-
+ setStep(currentStep.prevStep ?? "welcome")}
+ />
)}
{currentStep?.nextStep && (
- setStep(currentStep.nextStep ?? "work-items")}>
- Next
-
+ setStep(currentStep.nextStep ?? "work-items")}
+ />
)}
{currentStepIndex === TOUR_STEPS.length - 1 && (
{
onComplete();
toggleCreateProjectModal(true);
}}
- >
- Create your first project
-
+ />
)}
diff --git a/apps/web/core/components/pages/list/order-by.tsx b/apps/web/core/components/pages/list/order-by.tsx
index 2e9f22f0ad7..0fd53c5c869 100644
--- a/apps/web/core/components/pages/list/order-by.tsx
+++ b/apps/web/core/components/pages/list/order-by.tsx
@@ -6,7 +6,7 @@
import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react";
// plane imports
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
// types
import { CheckIcon } from "@plane/propel/icons";
import type { TPageFiltersSortBy, TPageFiltersSortKey } from "@plane/types";
@@ -36,10 +36,10 @@ export function PageOrderByDropdown(props: Props) {
return (
+ }>
{!isDescending ? : }
{orderByDetails?.label}
-
+
}
placement="bottom-end"
maxHeight="lg"
diff --git a/apps/web/core/components/pages/modals/export-page-modal.tsx b/apps/web/core/components/pages/modals/export-page-modal.tsx
index cd21b2b5fa7..90f7e46ae54 100644
--- a/apps/web/core/components/pages/modals/export-page-modal.tsx
+++ b/apps/web/core/components/pages/modals/export-page-modal.tsx
@@ -12,7 +12,7 @@ import { useParams } from "react-router";
// plane editor
import type { EditorRefApi } from "@plane/editor";
// plane ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { CustomSelect, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// components
@@ -282,12 +282,15 @@ export function ExportPageModal(props: Props) {
-
- Cancel
-
-
- {isExporting ? "Exporting" : "Export"}
-
+
+
diff --git a/apps/web/core/components/pages/modals/page-form.tsx b/apps/web/core/components/pages/modals/page-form.tsx
index 84ba42750e8..7f1d78ea850 100644
--- a/apps/web/core/components/pages/modals/page-form.tsx
+++ b/apps/web/core/components/pages/modals/page-form.tsx
@@ -12,7 +12,7 @@ import type { LucideIcon } from "lucide-react";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ETabIndices, EPageAccess } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmojiPicker, EmojiIconPickerTypes, Logo } from "@plane/propel/emoji-icon-picker";
import { GlobeIcon, LockIcon, PageIcon } from "@plane/propel/icons";
import type { ISvgIcons } from "@plane/propel/icons";
@@ -147,19 +147,24 @@ export function PageForm(props: Props) {
{t(i18n_access_label || "")}
-
- Cancel
-
+
- {isSubmitting ? "Creating" : "Create Page"}
-
+ />
diff --git a/apps/web/core/components/pages/version/main-content.tsx b/apps/web/core/components/pages/version/main-content.tsx
index 5cd3b76794e..092c55b393f 100644
--- a/apps/web/core/components/pages/version/main-content.tsx
+++ b/apps/web/core/components/pages/version/main-content.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import useSWR from "swr";
import { EyeIcon, TriangleAlert } from "lucide-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TPageVersion } from "@plane/types";
import { renderFormattedDate, renderFormattedTime } from "@plane/utils";
@@ -93,9 +93,14 @@ export const PageVersionsMainContent = observer(function PageVersionsMainContent
Something went wrong!
The version could not be loaded, please try again.
-
- Try again
-
+
) : (
@@ -113,9 +118,16 @@ export const PageVersionsMainContent = observer(function PageVersionsMainContent
{restoreEnabled && (
-
- {isRestoring ? "Restoring" : "Restore"}
-
+
+
+
)}
diff --git a/apps/web/core/components/profile/activity/download-button.tsx b/apps/web/core/components/profile/activity/download-button.tsx
index d162dbd2455..b0705088923 100644
--- a/apps/web/core/components/profile/activity/download-button.tsx
+++ b/apps/web/core/components/profile/activity/download-button.tsx
@@ -9,7 +9,7 @@ import { useParams } from "next/navigation";
// services
// ui
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// helpers
import { renderFormattedPayloadDate } from "@plane/utils";
import { UserService } from "@/services/user.service";
@@ -58,8 +58,15 @@ export function DownloadActivityButton() {
};
return (
-
- {isDownloading ? t("profile.stats.recent_activity.button_loading") : t("profile.stats.recent_activity.button")}
-
+
);
}
diff --git a/apps/web/core/components/project-states/create-update/form.tsx b/apps/web/core/components/project-states/create-update/form.tsx
index 4518271b812..3d71fdbe3b3 100644
--- a/apps/web/core/components/project-states/create-update/form.tsx
+++ b/apps/web/core/components/project-states/create-update/form.tsx
@@ -6,9 +6,9 @@
import { useEffect, useState } from "react";
import { TwitterPicker } from "react-color";
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
-import { Button } from "@plane/propel/button";
import type { IState } from "@plane/types";
import { Popover, TextArea } from "@plane/ui";
type TStateForm = {
@@ -102,12 +102,23 @@ export function StateForm(props: TStateForm) {
/>
-
- {buttonTitle}
-
-
- Cancel
-
+
+
diff --git a/apps/web/core/components/project/archive-restore-modal.tsx b/apps/web/core/components/project/archive-restore-modal.tsx
index 0f17ce90f7c..de41087a8f4 100644
--- a/apps/web/core/components/project/archive-restore-modal.tsx
+++ b/apps/web/core/components/project/archive-restore-modal.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// hooks
@@ -97,18 +97,16 @@ export function ArchiveRestoreProjectModal(props: Props) {
: "Restoring a project will activate it and make it visible to all members of the project. Are you sure you want to continue?"}
-
- Cancel
-
+
- {archive ? (isLoading ? "Archiving" : "Archive") : isLoading ? "Restoring" : "Restore"}
-
+ />
diff --git a/apps/web/core/components/project/card.tsx b/apps/web/core/components/project/card.tsx
index c9286d15faf..47ab8d1a6a5 100644
--- a/apps/web/core/components/project/card.tsx
+++ b/apps/web/core/components/project/card.tsx
@@ -12,7 +12,7 @@ import { ArchiveRestoreIcon, Settings, UserPlus } from "lucide-react";
// plane imports
import { EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Logo } from "@plane/propel/emoji-icon-picker";
import { LinkIcon, LockIcon, NewTabIcon, TrashIcon, CheckIcon } from "@plane/propel/icons";
import { setPromiseToast, setToast, TOAST_TYPE } from "@plane/propel/toast";
@@ -353,17 +353,19 @@ export const ProjectCard = observer(function ProjectCard(props: Props) {
))}
{!isMemberOfProject && (
- {
- e.preventDefault();
- e.stopPropagation();
- setJoinProjectModal(true);
- }}
- >
- Join
-
+
+ {
+ e.preventDefault();
+ e.stopPropagation();
+ setJoinProjectModal(true);
+ }}
+ />
+
)}
>
diff --git a/apps/web/core/components/project/confirm-project-member-remove.tsx b/apps/web/core/components/project/confirm-project-member-remove.tsx
index 52a7c30600e..06cea55a61e 100644
--- a/apps/web/core/components/project/confirm-project-member-remove.tsx
+++ b/apps/web/core/components/project/confirm-project-member-remove.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { useParams } from "next/navigation";
import { AlertTriangle } from "lucide-react";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IUserLite } from "@plane/types";
// ui
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -82,12 +82,18 @@ export const ConfirmProjectMemberRemove = observer(function ConfirmProjectMember
-
- Cancel
-
-
- {isCurrentUser ? (isDeleteLoading ? "Leaving..." : "Leave") : isDeleteLoading ? "Removing..." : "Remove"}
-
+
+
);
diff --git a/apps/web/core/components/project/create/project-create-buttons.tsx b/apps/web/core/components/project/create/project-create-buttons.tsx
index ae66ca71919..50a307fcbce 100644
--- a/apps/web/core/components/project/create/project-create-buttons.tsx
+++ b/apps/web/core/components/project/create/project-create-buttons.tsx
@@ -8,7 +8,7 @@ import { useFormContext } from "react-hook-form";
// plane imports
import { ETabIndices } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IProject } from "@plane/types";
// ui
// helpers
@@ -30,12 +30,23 @@ function ProjectCreateButtons(props: Props) {
return (
-
- {t("common.cancel")}
-
-
- {isSubmitting ? t("creating") : t("create_project")}
-
+
+
);
}
diff --git a/apps/web/core/components/project/delete-project-modal.tsx b/apps/web/core/components/project/delete-project-modal.tsx
index dbdf0a38259..00e2575705a 100644
--- a/apps/web/core/components/project/delete-project-modal.tsx
+++ b/apps/web/core/components/project/delete-project-modal.tsx
@@ -8,9 +8,9 @@ import { useParams } from "next/navigation";
import { Controller, useForm } from "react-hook-form";
import { AlertTriangle } from "lucide-react";
// Plane imports
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
-import { Button } from "@plane/propel/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IProject } from "@plane/types";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -147,12 +147,16 @@ export function DeleteProjectModal(props: DeleteProjectModal) {
/>
-
- Cancel
-
-
- {isSubmitting ? "Deleting" : "Delete project"}
-
+
+
diff --git a/apps/web/core/components/project/dropdowns/filters/member-list.tsx b/apps/web/core/components/project/dropdowns/filters/member-list.tsx
index bb8acd15ecc..f50778293e0 100644
--- a/apps/web/core/components/project/dropdowns/filters/member-list.tsx
+++ b/apps/web/core/components/project/dropdowns/filters/member-list.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
import { observer } from "mobx-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ChevronDownIcon } from "@plane/propel/icons";
import { EUserProjectRoles, EUserWorkspaceRoles } from "@plane/types";
// plane ui
@@ -101,10 +101,14 @@ export const MemberListFiltersDropdown = observer(function MemberListFiltersDrop
-
- Filters
-
-
+ }
+ iconPosition="end"
+ label="Filters"
+ />
{appliedFiltersCount > 0 && (
)}
diff --git a/apps/web/core/components/project/dropdowns/order-by.tsx b/apps/web/core/components/project/dropdowns/order-by.tsx
index 5b83e0c2879..eb714d0a458 100644
--- a/apps/web/core/components/project/dropdowns/order-by.tsx
+++ b/apps/web/core/components/project/dropdowns/order-by.tsx
@@ -8,7 +8,7 @@ import { ArrowDownWideNarrow } from "lucide-react";
// plane imports
import { PROJECT_ORDER_BY_OPTIONS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
import { CheckIcon } from "@plane/propel/icons";
import type { TProjectOrderByOptions } from "@plane/types";
import { CustomMenu } from "@plane/ui";
@@ -34,19 +34,10 @@ export function ProjectOrderByDropdown(props: Props) {
- {isMobile ? (
-
-
- {orderByDetails && t(orderByDetails?.i18n_label)}
-
- ) : (
-
-
- {orderByDetails && t(orderByDetails?.i18n_label)}
-
- )}
- >
+ }>
+
+ {orderByDetails && t(orderByDetails?.i18n_label)}
+
}
placement="bottom-end"
closeOnSelect
diff --git a/apps/web/core/components/project/empty-state.tsx b/apps/web/core/components/project/empty-state.tsx
index 4e4bce83880..f12a689bcc8 100644
--- a/apps/web/core/components/project/empty-state.tsx
+++ b/apps/web/core/components/project/empty-state.tsx
@@ -6,7 +6,7 @@
import React from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
type Props = {
title: string;
@@ -33,14 +33,14 @@ export function EmptyState({ title, description, image, primaryButton, secondary
{primaryButton && (
- {primaryButton.text}
-
+ />
)}
{secondaryButton}
diff --git a/apps/web/core/components/project/form.tsx b/apps/web/core/components/project/form.tsx
index b241eb30bdb..9db685ca9a9 100644
--- a/apps/web/core/components/project/form.tsx
+++ b/apps/web/core/components/project/form.tsx
@@ -12,7 +12,7 @@ import { Input, InputGroup } from "@makeplane/propel/components/input";
import { NETWORK_CHOICES } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmojiPicker, EmojiIconPickerTypes, Logo } from "@plane/propel/emoji-icon-picker";
import { LockIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
@@ -446,9 +446,15 @@ export function ProjectDetailsForm(props: IProjectDetailsForm) {
<>
-
- {isLoading ? t("updating") : t("common.update_project")}
-
+
{t("common.created_on")} {renderFormattedDate(project?.created_at)}
diff --git a/apps/web/core/components/project/header.tsx b/apps/web/core/components/project/header.tsx
index e554ab2d199..7776a460f98 100644
--- a/apps/web/core/components/project/header.tsx
+++ b/apps/web/core/components/project/header.tsx
@@ -10,7 +10,7 @@ import { usePathname } from "next/navigation";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ProjectIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -61,15 +61,13 @@ export const ProjectsBaseHeader = observer(function ProjectsBaseHeader() {
{isAuthorizedUser && !isArchived ? (
{
toggleCreateProjectModal(true);
}}
- className="items-center gap-1"
- >
- {t("workspace_projects.create.label")}
- {t("workspace_projects.label", { count: 1 })}
-
+ label={t("workspace_projects.create.label")}
+ />
) : (
<>>
)}
diff --git a/apps/web/core/components/project/join-project-modal.tsx b/apps/web/core/components/project/join-project-modal.tsx
index 8d1088440b2..ac581d5a818 100644
--- a/apps/web/core/components/project/join-project-modal.tsx
+++ b/apps/web/core/components/project/join-project-modal.tsx
@@ -6,7 +6,7 @@
import { useState } from "react";
// types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IProject } from "@plane/types";
// ui
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -59,12 +59,17 @@ export function JoinProjectModal(props: TJoinProjectModalProps) {
-
- Cancel
-
-
- {isJoiningLoading ? "Joining..." : "Join Project"}
-
+
+
);
diff --git a/apps/web/core/components/project/leave-project-modal.tsx b/apps/web/core/components/project/leave-project-modal.tsx
index c6e019d78d8..db029d83bc4 100644
--- a/apps/web/core/components/project/leave-project-modal.tsx
+++ b/apps/web/core/components/project/leave-project-modal.tsx
@@ -9,9 +9,9 @@ import { useParams } from "next/navigation";
import { Controller, useForm } from "react-hook-form";
import { AlertTriangleIcon } from "lucide-react";
// Plane imports
+import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
-import { Button } from "@plane/propel/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IProject } from "@plane/types";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -171,12 +171,15 @@ export const LeaveProjectModal = observer(function LeaveProjectModal(props: ILea
/>
-
- Cancel
-
-
- {isSubmitting ? "Leaving..." : "Leave Project"}
-
+
+
diff --git a/apps/web/core/components/project/member-list.tsx b/apps/web/core/components/project/member-list.tsx
index e5d2122110c..56d8f4ef251 100644
--- a/apps/web/core/components/project/member-list.tsx
+++ b/apps/web/core/components/project/member-list.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// plane imports
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { SearchIcon } from "@plane/propel/icons";
// components
import { MembersSettingsLoader } from "@/components/ui/loader/settings/members";
@@ -102,12 +102,13 @@ export const ProjectMemberList = observer(function ProjectMemberList(props: TPro
{isAdmin && (
{
setInviteModal(true);
}}
- >
- {t("add_member")}
-
+ />
)}
diff --git a/apps/web/core/components/project/multi-select-modal.tsx b/apps/web/core/components/project/multi-select-modal.tsx
index 8f7952c5ff8..ef865d7ad01 100644
--- a/apps/web/core/components/project/multi-select-modal.tsx
+++ b/apps/web/core/components/project/multi-select-modal.tsx
@@ -11,7 +11,7 @@ import { useTheme } from "next-themes";
import { Combobox } from "@headlessui/react";
// plane ui
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Logo } from "@plane/propel/emoji-icon-picker";
import { SearchIcon, CloseIcon } from "@plane/propel/icons";
import { Checkbox } from "@makeplane/propel/components/checkbox";
@@ -179,19 +179,17 @@ export const ProjectMultiSelectModal = observer(function ProjectMultiSelectModal
-
- {t("cancel")}
-
+
- {isSubmitting ? t("confirming") : t("confirm")}
-
+ />
);
diff --git a/apps/web/core/components/project/project-feature-update.tsx b/apps/web/core/components/project/project-feature-update.tsx
index 931f36b3476..fac59cd8d9f 100644
--- a/apps/web/core/components/project/project-feature-update.tsx
+++ b/apps/web/core/components/project/project-feature-update.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
import Link from "next/link";
import { useTranslation } from "@plane/i18n";
// ui
-import { Button, getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Logo } from "@plane/propel/emoji-icon-picker";
import { Row } from "@plane/ui";
// components
@@ -46,18 +46,17 @@ export const ProjectFeatureUpdate = observer(function ProjectFeatureUpdate(props
{/* eslint-disable-next-line jsx-a11y/tabindex-no-positive */}
-
- {t("close")}
-
-
+ }
// oxlint-disable-next-line jsx-a11y/tabindex-no-positive
tabIndex={2}
- >
- {t("open_project")}
-
+ />
>
diff --git a/apps/web/core/components/project/publish-project/modal.tsx b/apps/web/core/components/project/publish-project/modal.tsx
index 7bbd38a2c78..a80e49953a6 100644
--- a/apps/web/core/components/project/publish-project/modal.tsx
+++ b/apps/web/core/components/project/publish-project/modal.tsx
@@ -11,7 +11,7 @@ import { Controller, useForm } from "react-hook-form";
// types
import { SPACE_BASE_PATH, SPACE_BASE_URL } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { GlobeIcon, NewTabIcon, CheckIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { TProjectPublishLayouts, TProjectPublishSettings } from "@plane/types";
@@ -184,13 +184,13 @@ export const PublishProjectModal = observer(function PublishProjectModal(props:
Publish project
{isProjectPublished && (
handleUnPublishProject(watch("id") ?? "")}
loading={isUnPublishing}
- >
- {isUnPublishing ? "Unpublishing" : "Unpublish"}
-
+ />
)}
@@ -320,19 +320,27 @@ export const PublishProjectModal = observer(function PublishProjectModal(props:
{!fetchSettingsLoader && (
-
- Cancel
-
+
{isProjectPublished ? (
isDirty && (
-
- {isSubmitting ? "Updating" : "Update settings"}
-
+
)
) : (
-
- {isSubmitting ? "Publishing" : "Publish"}
-
+
)}
)}
diff --git a/apps/web/core/components/project/send-project-invitation-modal.tsx b/apps/web/core/components/project/send-project-invitation-modal.tsx
index f57369ac14e..33fc9f2a05e 100644
--- a/apps/web/core/components/project/send-project-invitation-modal.tsx
+++ b/apps/web/core/components/project/send-project-invitation-modal.tsx
@@ -10,7 +10,7 @@ import { useForm, Controller, useFieldArray } from "react-hook-form";
// plane imports
import { ROLE, EUserPermissions } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlusIcon, CloseIcon, ChevronDownIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Avatar, CustomSelect, CustomSearchSelect, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -297,14 +297,19 @@ export const SendProjectInvitationModal = observer(function SendProjectInvitatio
{t("common.add_more")}
-
- {t("cancel")}
-
-
- {isSubmitting
- ? `${fields && fields.length > 1 ? `${t("add_members")}...` : `${t("add_member")}...`}`
- : `${fields && fields.length > 1 ? t("add_members") : t("add_member")}`}
-
+
+ 1 ? `${t("add_members")}...` : `${t("add_member")}...`}`
+ : `${fields && fields.length > 1 ? t("add_members") : t("add_member")}`
+ }
+ type="submit"
+ loading={isSubmitting}
+ />
diff --git a/apps/web/core/components/project/settings/control-section.tsx b/apps/web/core/components/project/settings/control-section.tsx
index de56790c885..d142d74874a 100644
--- a/apps/web/core/components/project/settings/control-section.tsx
+++ b/apps/web/core/components/project/settings/control-section.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { useParams } from "react-router";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// components
import { SettingsBoxedControlItem } from "@/components/settings/boxed-control-item";
// hooks
@@ -61,9 +61,13 @@ export const GeneralProjectSettingsControlSection = observer(function GeneralPro
title={t("archive")}
description="Archiving a project will unlist your project from your side navigation although you will still be able to access it from your projects page. You can restore the project or delete it whenever you want."
control={
- setArchiveProject(true)}>
- {t("archive")}
-
+ setArchiveProject(true)}
+ />
}
/>
{/* Format Selector */}
@@ -72,9 +76,13 @@ export const GeneralProjectSettingsControlSection = observer(function GeneralPro
title={t("delete")}
description="When deleting a project, all of the data and resources within that project will be permanently removed and cannot be recovered."
control={
- setSelectedProject(currentProjectDetails.id ?? null)}>
- {t("delete")}
-
+ setSelectedProject(currentProjectDetails.id ?? null)}
+ />
}
/>
diff --git a/apps/web/core/components/projects/settings/intake/header.tsx b/apps/web/core/components/projects/settings/intake/header.tsx
index f24e43d4c01..268d355a212 100644
--- a/apps/web/core/components/projects/settings/intake/header.tsx
+++ b/apps/web/core/components/projects/settings/intake/header.tsx
@@ -11,7 +11,7 @@ import { RefreshCcw } from "lucide-react";
// ui
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Breadcrumbs, Header } from "@plane/ui";
// components
import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
@@ -78,9 +78,13 @@ export const ProjectInboxHeader = observer(function ProjectInboxHeader() {
modalState={createIssueModal}
handleModalClose={() => setCreateIssueModal(false)}
/>
- setCreateIssueModal(true)}>
- {t("add_work_item")}
-
+ setCreateIssueModal(true)}
+ />
) : (
<>>
diff --git a/apps/web/core/components/rich-filters/add-filters/button.tsx b/apps/web/core/components/rich-filters/add-filters/button.tsx
index 51f58c37505..3a13170b1a9 100644
--- a/apps/web/core/components/rich-filters/add-filters/button.tsx
+++ b/apps/web/core/components/rich-filters/add-filters/button.tsx
@@ -8,20 +8,39 @@ import React from "react";
import { observer } from "mobx-react";
import { ListFilter } from "lucide-react";
// plane imports
-import type { TButtonSize, TButtonVariant } from "@plane/propel/button";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
+import type { ButtonSize, ButtonVariant } from "@makeplane/propel/elements/button";
import type { IFilterInstance } from "@plane/shared-state";
import type { TExternalFilter, TFilterProperty, TSupportedOperators } from "@plane/types";
import { LOGICAL_OPERATOR } from "@plane/types";
-import { cn } from "@plane/utils";
// local imports
import { AddFilterDropdown } from "./dropdown";
+type TLegacyButtonSize = "sm" | "base" | "lg" | "xl";
+type TLegacyButtonVariant = "primary" | "secondary" | "tertiary" | "ghost" | "link" | "error-fill" | "error-outline";
+
+const ADD_FILTER_BUTTON_SIZE: Record = {
+ sm: "xs",
+ base: "sm",
+ lg: "md",
+ xl: "lg",
+};
+
+const ADD_FILTER_BUTTON_VARIANT: Record = {
+ primary: "primary",
+ secondary: "secondary",
+ tertiary: "tertiary",
+ ghost: "ghost",
+ link: "ghost",
+ "error-fill": "danger",
+ "error-outline": "danger-outline",
+};
+
export type TAddFilterButtonProps = {
buttonConfig?: {
label: string | null;
- variant?: TButtonVariant;
- size?: TButtonSize;
+ variant?: TLegacyButtonVariant;
+ size?: TLegacyButtonSize;
className?: string;
defaultOpen?: boolean;
iconConfig?: {
@@ -41,12 +60,10 @@ export const AddFilterButton = observer(function AddFilterButton
{
@@ -68,14 +85,19 @@ export const AddFilterButton = observer(function AddFilterButton
+ }
+ >
{iconConfig.shouldShowIcon && }
{label}
-
+
}
/>
);
diff --git a/apps/web/core/components/rich-filters/filters-row.tsx b/apps/web/core/components/rich-filters/filters-row.tsx
index 5b8aa933189..f415e529cd8 100644
--- a/apps/web/core/components/rich-filters/filters-row.tsx
+++ b/apps/web/core/components/rich-filters/filters-row.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { ListFilterPlus } from "lucide-react";
import { Transition } from "@headlessui/react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IFilterInstance } from "@plane/shared-state";
import type { TExternalFilter, TFilterProperty } from "@plane/types";
import { cn, EHeaderVariant, Header, Loader } from "@plane/ui";
@@ -79,25 +79,39 @@ export const FiltersRow = observer(function FiltersRow
-
- {filter.clearFilterOptions?.label ?? "Clear all"}
-
+
+
+
-
- {filter.saveViewOptions?.label ?? "Save view"}
-
+
+
+
-
- {isUpdating ? "Confirming" : (filter.updateViewOptions?.label ?? "Update view")}
-
+
+
+
>
);
diff --git a/apps/web/core/components/settings/profile/content/pages/api-tokens.tsx b/apps/web/core/components/settings/profile/content/pages/api-tokens.tsx
index 0d7217373a1..839b8e7aa6a 100644
--- a/apps/web/core/components/settings/profile/content/pages/api-tokens.tsx
+++ b/apps/web/core/components/settings/profile/content/pages/api-tokens.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import useSWR from "swr";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmptyStateCompact } from "@plane/propel/empty-state";
import { APITokenService } from "@plane/services";
// components
@@ -41,9 +41,13 @@ export const APITokensProfileSettings = observer(function APITokensProfileSettin
title={t("account_settings.api_tokens.title")}
description={t("account_settings.api_tokens.description")}
control={
- setIsCreateTokenModalOpen(true)}>
- {t("workspace_settings.settings.api_tokens.add_token")}
-
+ setIsCreateTokenModalOpen(true)}
+ />
}
/>
diff --git a/apps/web/core/components/settings/profile/content/pages/general/form.tsx b/apps/web/core/components/settings/profile/content/pages/general/form.tsx
index 7fee925ae6f..be0192c4ee8 100644
--- a/apps/web/core/components/settings/profile/content/pages/general/form.tsx
+++ b/apps/web/core/components/settings/profile/content/pages/general/form.tsx
@@ -12,7 +12,7 @@ import { CircleUserRound } from "lucide-react";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/propel/toast";
import { EFileAssetType } from "@plane/types";
import type { IUser, TUserProfile } from "@plane/types";
@@ -406,9 +406,14 @@ export const GeneralProfileSettingsForm = observer(function GeneralProfileSettin
-
- {isLoading ? t("saving") : t("save_changes")}
-
+
@@ -417,9 +422,13 @@ export const GeneralProfileSettingsForm = observer(function GeneralProfileSettin
title={t("deactivate_account")}
description={t("deactivate_account_description")}
control={
- setDeactivateAccountModal(true)}>
- {t("deactivate_account")}
-
+ setDeactivateAccountModal(true)}
+ />
}
/>
diff --git a/apps/web/core/components/settings/profile/content/pages/security.tsx b/apps/web/core/components/settings/profile/content/pages/security.tsx
index f4d00654c8e..e239a21bc35 100644
--- a/apps/web/core/components/settings/profile/content/pages/security.tsx
+++ b/apps/web/core/components/settings/profile/content/pages/security.tsx
@@ -13,7 +13,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { E_PASSWORD_STRENGTH } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { PasswordStrengthIndicator } from "@plane/ui";
import { getPasswordStrength } from "@plane/utils";
@@ -272,11 +272,19 @@ export const SecurityProfileSettings = observer(function SecurityProfileSettings
-
- {isSubmitting
- ? `${t("auth.common.password.change_password.label.submitting")}`
- : t("auth.common.password.change_password.label.default")}
-
+
diff --git a/apps/web/core/components/sidebar/add-button.tsx b/apps/web/core/components/sidebar/add-button.tsx
index 6db327e363b..1ce096c347b 100644
--- a/apps/web/core/components/sidebar/add-button.tsx
+++ b/apps/web/core/components/sidebar/add-button.tsx
@@ -4,25 +4,31 @@
* See the LICENSE file for details.
*/
-import { Button } from "@plane/propel/button";
+import type { MouseEventHandler, ReactNode } from "react";
+import { Button } from "@makeplane/propel/components/button";
-type Props = React.ComponentProps<"button"> & {
- label: React.ReactNode;
+type Props = {
+ label: string;
+ icon?: ReactNode;
onClick: () => void;
+ disabled?: boolean;
+ onMouseEnter?: MouseEventHandler;
+ onMouseLeave?: MouseEventHandler;
};
export function SidebarAddButton(props: Props) {
- const { label, onClick, disabled, ...rest } = props;
+ const { label, icon, onClick, disabled, onMouseEnter, onMouseLeave } = props;
return (
-
- {label}
-
+
+
+
);
}
diff --git a/apps/web/core/components/views/filters/order-by.tsx b/apps/web/core/components/views/filters/order-by.tsx
index 33360658864..5d80fe8086d 100644
--- a/apps/web/core/components/views/filters/order-by.tsx
+++ b/apps/web/core/components/views/filters/order-by.tsx
@@ -8,7 +8,7 @@ import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react";
// plane imports
import { VIEW_SORT_BY_OPTIONS, VIEW_SORTING_KEY_OPTIONS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/elements/button";
import { CheckIcon } from "@plane/propel/icons";
import type { TViewFiltersSortBy, TViewFiltersSortKey } from "@plane/types";
import { CustomMenu } from "@plane/ui";
@@ -27,20 +27,22 @@ export function ViewOrderByDropdown(props: Props) {
const orderByDetails = VIEW_SORTING_KEY_OPTIONS.find((option) => sortKey === option.key);
const isDescending = sortBy === "desc";
- const buttonClassName = isMobile
- ? "flex items-center text-13 text-secondary gap-2 w-full"
- : getButtonStyling("secondary", "lg");
+ const icon = !isDescending ? : ;
+ const sortLabel = orderByDetails?.i18n_label ? t(orderByDetails.i18n_label) : "";
- const icon = (
- <>{!isDescending ? : }>
- );
return (
- {!isMobile && icon}
- {orderByDetails?.i18n_label && t(orderByDetails?.i18n_label)}
-
+ isMobile ? (
+
+ {sortLabel}
+
+ ) : (
+ }>
+ {icon}
+ {sortLabel}
+
+ )
}
placement="bottom-end"
className="flex w-full justify-center"
diff --git a/apps/web/core/components/views/form.tsx b/apps/web/core/components/views/form.tsx
index ae5712da0e5..f7eacaae699 100644
--- a/apps/web/core/components/views/form.tsx
+++ b/apps/web/core/components/views/form.tsx
@@ -12,7 +12,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ETabIndices, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EmojiPicker, EmojiIconPickerTypes, Logo } from "@plane/propel/emoji-icon-picker";
import { ViewsIcon } from "@plane/propel/icons";
import type {
@@ -284,18 +284,31 @@ export const ProjectViewForm = observer(function ProjectViewForm(props: Props) {
-
- {t("common.cancel")}
-
-
- {data
- ? isSubmitting
- ? t("common.updating")
- : t("view.update.label")
- : isSubmitting
- ? t("common.creating")
- : t("view.create.label")}
-
+
+
);
diff --git a/apps/web/core/components/web-hooks/empty-state.tsx b/apps/web/core/components/web-hooks/empty-state.tsx
index e79debd0690..48fa3106507 100644
--- a/apps/web/core/components/web-hooks/empty-state.tsx
+++ b/apps/web/core/components/web-hooks/empty-state.tsx
@@ -6,7 +6,7 @@
import React from "react";
// ui
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
// assets
import EmptyWebhook from "@/app/assets/empty-state/web-hook.svg?url";
@@ -24,9 +24,9 @@ export function WebhooksEmptyState(props: Props) {
No webhooks
Create webhooks to receive real-time updates and automate actions
-
- Add webhook
-
+
+
+
);
diff --git a/apps/web/core/components/web-hooks/form/delete-section.tsx b/apps/web/core/components/web-hooks/form/delete-section.tsx
index 5b51d78dbdf..726b8537a4d 100644
--- a/apps/web/core/components/web-hooks/form/delete-section.tsx
+++ b/apps/web/core/components/web-hooks/form/delete-section.tsx
@@ -5,7 +5,7 @@
*/
import { Disclosure, Transition } from "@headlessui/react";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { ChevronDownIcon, ChevronUpIcon } from "@plane/propel/icons";
type Props = {
@@ -41,9 +41,7 @@ export function WebhookDeleteSection(props: Props) {
webhook.
-
- Delete webhook
-
+
diff --git a/apps/web/core/components/web-hooks/form/form.tsx b/apps/web/core/components/web-hooks/form/form.tsx
index 4800931d004..9d5576fcf78 100644
--- a/apps/web/core/components/web-hooks/form/form.tsx
+++ b/apps/web/core/components/web-hooks/form/form.tsx
@@ -8,7 +8,7 @@ import React, { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IWebhook, TWebhookEventTypes } from "@plane/types";
// hooks
import {
@@ -97,19 +97,27 @@ export const WebhookForm = observer(function WebhookForm(props: Props) {
{data ? (
-
- {isSubmitting ? t("updating") : t("update")}
-
+
) : (
-
- {t("cancel")}
-
+
{!webhookSecretKey && (
-
- {isSubmitting ? t("common.creating") : t("common.create")}
-
+
)}
)}
diff --git a/apps/web/core/components/web-hooks/form/secret-key.tsx b/apps/web/core/components/web-hooks/form/secret-key.tsx
index 98bf1b73c88..390abfd7bfd 100644
--- a/apps/web/core/components/web-hooks/form/secret-key.tsx
+++ b/apps/web/core/components/web-hooks/form/secret-key.tsx
@@ -11,7 +11,7 @@ import { useParams } from "next/navigation";
// icons
import { Eye, EyeOff, RefreshCw } from "lucide-react";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CopyIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
@@ -134,14 +134,14 @@ export const WebhookSecretKey = observer(function WebhookSecretKey(props: Props)
{data && (
}
+ onClick={handleRegenerateSecretKey}
loading={isRegenerating}
- prependIcon={ }
- >
- {isRegenerating ? `${t("re_generating")}...` : t("re_generate_key")}
-
+ />
)}
diff --git a/apps/web/core/components/web-hooks/generated-hook-details.tsx b/apps/web/core/components/web-hooks/generated-hook-details.tsx
index 03755264a46..795066bc4c9 100644
--- a/apps/web/core/components/web-hooks/generated-hook-details.tsx
+++ b/apps/web/core/components/web-hooks/generated-hook-details.tsx
@@ -7,7 +7,7 @@
// components
// ui
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IWebhook } from "@plane/types";
// types
import { WebhookSecretKey } from "./form";
@@ -31,9 +31,7 @@ export function GeneratedHookDetails(props: Props) {
-
- Close
-
+
>
);
diff --git a/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx
index 02e8c353c39..5c74b155c74 100644
--- a/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx
+++ b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx
@@ -8,7 +8,7 @@ import { useParams } from "next/navigation";
import { useForm, Controller } from "react-hook-form";
// plane imports
import { allTimeIn30MinutesInterval12HoursFormat } from "@plane/constants";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { CloseIcon } from "@plane/propel/icons";
import { CustomSelect, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// components
@@ -215,12 +215,15 @@ export function NotificationSnoozeModal(props: TNotificationSnoozeModal) {
-
- Cancel
-
-
- {isSubmitting ? "Submitting..." : "Submit"}
-
+
+
diff --git a/apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx b/apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx
index e8f1d632887..d1611cd0b28 100644
--- a/apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx
+++ b/apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx
@@ -8,7 +8,7 @@ import React, { useState } from "react";
import { observer } from "mobx-react";
import { AlertTriangle } from "lucide-react";
import { Dialog, Transition } from "@headlessui/react";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { useUser } from "@/hooks/store/user";
import type { Props } from "./confirm-workspace-member-remove";
@@ -88,18 +88,24 @@ export const ConfirmWorkspaceMemberRemove = observer(function ConfirmWorkspaceMe
-
- Cancel
-
-
- {currentUser?.id === userDetails.id
- ? isRemoving
- ? "Leaving"
- : "Leave"
- : isRemoving
- ? "Removing"
- : "Remove"}
-
+
+
diff --git a/apps/web/core/components/workspace/billing/comparison/base.tsx b/apps/web/core/components/workspace/billing/comparison/base.tsx
index b09965a0282..4c98178b65b 100644
--- a/apps/web/core/components/workspace/billing/comparison/base.tsx
+++ b/apps/web/core/components/workspace/billing/comparison/base.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
import { ArrowDown, ArrowUp } from "lucide-react";
// plane imports
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { cn } from "@plane/utils";
// constants
import type { TPlanePlans } from "@/components/workspace/billing/comparison/plans";
@@ -127,13 +127,15 @@ export const PlansComparisonBase = observer(function PlansComparisonBase(props:
:
}
+ iconPosition="end"
onClick={() => {
setIsCompareAllFeaturesSectionOpen(!isCompareAllFeaturesSectionOpen);
}}
- appendIcon={isCompareAllFeaturesSectionOpen ?
:
}
- >
- {isCompareAllFeaturesSectionOpen ? "Collapse comparison" : "Compare all features"}
-
+ />
diff --git a/apps/web/core/components/workspace/billing/comparison/plan-detail.tsx b/apps/web/core/components/workspace/billing/comparison/plan-detail.tsx
index 27d2b8cf141..c0b62c1ce6a 100644
--- a/apps/web/core/components/workspace/billing/comparison/plan-detail.tsx
+++ b/apps/web/core/components/workspace/billing/comparison/plan-detail.tsx
@@ -12,7 +12,7 @@ import {
TALK_TO_SALES_URL,
} from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { TBillingFrequency } from "@plane/types";
import { EProductSubscriptionEnum } from "@plane/types";
import { getSubscriptionName } from "@plane/utils";
@@ -100,9 +100,13 @@ export const PlanDetail = observer(function PlanDetail(props: TPlanDetailProps)
{/* Subscription button */}
-
- {isSubscriptionActive ? `Upgrade to ${subscriptionName}` : t("common.upgrade_cta.talk_to_sales")}
-
+
);
diff --git a/apps/web/core/components/workspace/confirm-workspace-member-remove.tsx b/apps/web/core/components/workspace/confirm-workspace-member-remove.tsx
index 9ec6dc42806..76c96604637 100644
--- a/apps/web/core/components/workspace/confirm-workspace-member-remove.tsx
+++ b/apps/web/core/components/workspace/confirm-workspace-member-remove.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { AlertTriangle } from "lucide-react";
// ui
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
// hooks
import { useUser } from "@/hooks/store/user";
@@ -73,18 +73,24 @@ export const ConfirmWorkspaceMemberRemove = observer(function ConfirmWorkspaceMe
-
- {t("cancel")}
-
-
- {currentUser?.id === userDetails.id
- ? isRemoving
- ? t("leaving")
- : t("leave")
- : isRemoving
- ? t("removing")
- : t("remove")}
-
+
+
);
diff --git a/apps/web/core/components/workspace/create-workspace-form.tsx b/apps/web/core/components/workspace/create-workspace-form.tsx
index ae73a70f7d9..220b483a5a8 100644
--- a/apps/web/core/components/workspace/create-workspace-form.tsx
+++ b/apps/web/core/components/workspace/create-workspace-form.tsx
@@ -12,7 +12,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IWorkspace } from "@plane/types";
// ui
@@ -247,13 +247,24 @@ export const CreateWorkspaceForm = observer(function CreateWorkspaceForm(props:
{secondaryButton}
-
- {isSubmitting ? t(primaryButtonText.loading) : t(primaryButtonText.default)}
-
+
{!secondaryButton && (
- router.back()}>
- {t("common.go_back")}
-
+ router.back()}
+ />
)}
diff --git a/apps/web/core/components/workspace/delete-workspace-form.tsx b/apps/web/core/components/workspace/delete-workspace-form.tsx
index 6c9d6fb33bf..92845b9c1ee 100644
--- a/apps/web/core/components/workspace/delete-workspace-form.tsx
+++ b/apps/web/core/components/workspace/delete-workspace-form.tsx
@@ -11,7 +11,7 @@ import { AlertTriangle } from "lucide-react";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IWorkspace } from "@plane/types";
@@ -159,12 +159,16 @@ export const DeleteWorkspaceForm = observer(function DeleteWorkspaceForm(props:
-
- {t("cancel")}
-
-
- {isSubmitting ? t("deleting") : t("confirm")}
-
+
+
);
diff --git a/apps/web/core/components/workspace/delete-workspace-section.tsx b/apps/web/core/components/workspace/delete-workspace-section.tsx
index 6a6f845d077..e8c561c545d 100644
--- a/apps/web/core/components/workspace/delete-workspace-section.tsx
+++ b/apps/web/core/components/workspace/delete-workspace-section.tsx
@@ -8,7 +8,7 @@ import { useState } from "react";
import { observer } from "mobx-react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IWorkspace } from "@plane/types";
// components
import { SettingsBoxedControlItem } from "@/components/settings/boxed-control-item";
@@ -37,9 +37,13 @@ export const DeleteWorkspaceSection = observer(function DeleteWorkspaceSection(p
title={t("workspace_settings.settings.general.delete_workspace")}
description={t("workspace_settings.settings.general.delete_workspace_description")}
control={
- setDeleteWorkspaceModal(true)}>
- {t("delete")}
-
+ setDeleteWorkspaceModal(true)}
+ />
}
/>
>
diff --git a/apps/web/core/components/workspace/edition-badge.tsx b/apps/web/core/components/workspace/edition-badge.tsx
index b11e850b4e5..ec181c924c8 100644
--- a/apps/web/core/components/workspace/edition-badge.tsx
+++ b/apps/web/core/components/workspace/edition-badge.tsx
@@ -13,7 +13,7 @@ import { Tooltip } from "@plane/propel/tooltip";
import { usePlatformOS } from "@/hooks/use-platform-os";
import packageJson from "package.json";
// local components
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PaidPlanUpgradeModal } from "@/components/license/modal/upgrade-modal";
export const WorkspaceEditionBadge = observer(function WorkspaceEditionBadge() {
@@ -33,13 +33,13 @@ export const WorkspaceEditionBadge = observer(function WorkspaceEditionBadge() {
setIsPaidPlanPurchaseModalOpen(true)}
aria-haspopup="dialog"
aria-label={t("aria_labels.projects_sidebar.edition_badge")}
- >
- Community
-
+ />
>
);
diff --git a/apps/web/core/components/workspace/invite-modal/actions.tsx b/apps/web/core/components/workspace/invite-modal/actions.tsx
index 23b5f4d0dda..f5249710303 100644
--- a/apps/web/core/components/workspace/invite-modal/actions.tsx
+++ b/apps/web/core/components/workspace/invite-modal/actions.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlusIcon } from "@plane/propel/icons";
import { cn } from "@plane/utils";
@@ -57,14 +57,26 @@ export const InvitationModalActions = observer(function InvitationModalActions(p
{addMoreButtonText || t("common.add_more")}
-
- {cancelButtonText || t("cancel")}
-
-
- {isSubmitting
- ? submitButtonText?.loading || t("workspace_settings.settings.members.modal.button_loading")
- : submitButtonText?.default || t("workspace_settings.settings.members.modal.button")}
-
+
+
);
diff --git a/apps/web/core/components/workspace/settings/workspace-details.tsx b/apps/web/core/components/workspace/settings/workspace-details.tsx
index 8b6dff916ee..cf1095b9d5e 100644
--- a/apps/web/core/components/workspace/settings/workspace-details.tsx
+++ b/apps/web/core/components/workspace/settings/workspace-details.tsx
@@ -12,7 +12,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ORGANIZATION_SIZE, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { EditIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { IWorkspace } from "@plane/types";
@@ -293,14 +293,14 @@ export const WorkspaceDetails = observer(function WorkspaceDetails() {
{
void handleSubmit(onSubmit)(e);
}}
loading={isLoading}
- >
- {isLoading ? t("updating") : t("workspace_settings.settings.general.update_workspace")}
-
+ />
)}
diff --git a/apps/web/core/components/workspace/sidebar/quick-actions.tsx b/apps/web/core/components/workspace/sidebar/quick-actions.tsx
index f1d6bd80ae5..e9a32f88900 100644
--- a/apps/web/core/components/workspace/sidebar/quick-actions.tsx
+++ b/apps/web/core/components/workspace/sidebar/quick-actions.tsx
@@ -79,12 +79,8 @@ export const SidebarQuickActions = observer(function SidebarQuickActions() {
/>
-
- {t("sidebar.new_work_item")}
- >
- }
+ label={t("sidebar.new_work_item")}
+ icon={ }
onClick={() => toggleCreateIssueModal(true)}
disabled={disabled}
onMouseEnter={handleMouseEnter}
diff --git a/apps/web/core/components/workspace/views/form.tsx b/apps/web/core/components/workspace/views/form.tsx
index 73350a9b075..80494ed0412 100644
--- a/apps/web/core/components/workspace/views/form.tsx
+++ b/apps/web/core/components/workspace/views/form.tsx
@@ -11,7 +11,7 @@ import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
import { ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IIssueDisplayFilterOptions, IIssueDisplayProperties, IWorkspaceView, IIssueFilters } from "@plane/types";
import { EViewAccess, EIssueLayoutTypes, EIssuesStoreType } from "@plane/types";
import { TextArea } from "@plane/ui";
@@ -189,18 +189,23 @@ export const WorkspaceViewForm = observer(function WorkspaceViewForm(props: Prop
-
- {t("common.cancel")}
-
-
- {data
- ? isSubmitting
- ? t("common.updating")
- : t("view.update.label")
- : isSubmitting
- ? t("common.creating")
- : t("view.create.label")}
-
+
+
);
diff --git a/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx b/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
index e74dfd55dbe..0366613f3e5 100644
--- a/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
+++ b/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
@@ -12,11 +12,10 @@ import useSWR from "swr";
// ui
import { LogOut } from "lucide-react";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
-import { Button, getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { PlaneLogo } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Tooltip } from "@plane/propel/tooltip";
-import { cn } from "@plane/utils";
// assets
import WorkSpaceNotAvailable from "@/app/assets/workspace/workspace-not-available.png?url";
// components
@@ -179,19 +178,34 @@ export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props
{allWorkspaces && allWorkspaces.length > 0 && (
-
- Go Home
-
+ }
+ />
)}
{allWorkspaces?.length > 0 && (
-
- Visit Profile
-
+ }
+ />
)}
{allWorkspaces && allWorkspaces.length === 0 && (
-
- Create new workspace
-
+ }
+ />
)}
@@ -216,16 +230,22 @@ export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props
-
-
- Check pending invites
-
-
-
-
- Create new workspace
-
-
+ }
+ />
+ }
+ />
From 550b46a1b5fefb0a30ba9149c3c3fac0f72eeccf Mon Sep 17 00:00:00 2001
From: anmolsinghbhatia
Date: Mon, 31 Aug 2026 14:10:18 +0530
Subject: [PATCH 2/3] fix: address Button migration review on web call sites
Use IconButton for icon-only controls and AnchorButton for link-styled
actions. Add accessible names on render anchors, un-nest link+button
pairs, restore compact header labels, and pass through empty-state
variant/icon props.
---
.../[workspaceSlug]/(projects)/header.tsx | 12 ++++++-
.../(projects)/profile/[userId]/header.tsx | 12 ++++---
.../[projectId]/cycles/(list)/header.tsx | 33 ++++++++++++++-----
.../[projectId]/modules/(list)/header.tsx | 33 ++++++++++++++-----
apps/web/app/(all)/create-workspace/page.tsx | 7 +++-
.../account/auth-forms/forgot-password.tsx | 6 ++--
.../workspace-active-cycles-upgrade.tsx | 4 ++-
.../components/common/new-empty-state.tsx | 1 +
.../empty-state/detailed-empty-state-root.tsx | 8 ++---
.../components/exporter/single-export.tsx | 18 ++++++++--
.../global/product-updates/footer.tsx | 4 ++-
.../inbox/content/inbox-issue-header.tsx | 27 ++++++++++-----
.../components/instance/not-ready-view.tsx | 13 ++++++--
.../issues/bulk-operations/upgrade-banner.tsx | 9 ++++-
.../filters/header/helpers/dropdown.tsx | 30 ++++++++++++-----
.../license/modal/card/talk-to-sales.tsx | 2 +-
.../components/onboarding/invitations.tsx | 2 +-
.../components/onboarding/steps/role/root.tsx | 2 +-
apps/web/core/components/project/card.tsx | 24 +++++++-------
.../web-hooks/generated-hook-details.tsx | 2 +-
20 files changed, 174 insertions(+), 75 deletions(-)
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
index 572ebe6d2ee..be884294e24 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
@@ -9,6 +9,7 @@ import { Shapes } from "lucide-react";
// plane imports
import { useTranslation } from "@plane/i18n";
import { Button } from "@makeplane/propel/components/button";
+import { IconButton } from "@makeplane/propel/components/icon-button";
import { HomeIcon } from "@plane/propel/icons";
import { Breadcrumbs, Header } from "@plane/ui";
// components
@@ -37,7 +38,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
-
+
+
+ }
+ onClick={() => toggleWidgetSettings(true)}
+ />
+
>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
index 6233e21921c..f66a423eef4 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
@@ -19,7 +19,7 @@ import { ProfileIssuesFilter } from "@/components/profile/profile-issues-filter"
// hooks
import { useAppTheme } from "@/hooks/store/use-app-theme";
import { useUser, useUserPermissions } from "@/hooks/store/user";
-import { Button } from "@makeplane/propel/elements/button";
+import { IconButton } from "@makeplane/propel/components/icon-button";
type TUserProfileHeader = {
userProjectsData: IUserProfileProjectSegregation | undefined;
@@ -96,9 +96,13 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
))}
-
toggleProfileSidebar()}>
-
-
+
}
+ onClick={() => toggleProfileSidebar()}
+ />
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
index 83c4e057876..e12c08c539a 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx
@@ -60,15 +60,30 @@ export const CyclesListHeader = observer(function CyclesListHeader() {
{canUserCreateCycle && currentProjectDetails ? (
- {
- toggleCreateCycleModal(true);
- }}
- />
+ <>
+
+ {
+ toggleCreateCycleModal(true);
+ }}
+ />
+
+
+ {
+ toggleCreateCycleModal(true);
+ }}
+ />
+
+ >
) : (
<>>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
index e694d35942e..a9f4904b57f 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx
@@ -65,15 +65,30 @@ export const ModulesListHeader = observer(function ModulesListHeader() {
{canUserCreateModule ? (
- {
- toggleCreateModuleModal(true);
- }}
- />
+ <>
+
+ {
+ toggleCreateModuleModal(true);
+ }}
+ />
+
+
+ {
+ toggleCreateModuleModal(true);
+ }}
+ />
+
+ >
) : (
<>>
)}
diff --git a/apps/web/app/(all)/create-workspace/page.tsx b/apps/web/app/(all)/create-workspace/page.tsx
index c903e561fbf..b0a7c9c97a5 100644
--- a/apps/web/app/(all)/create-workspace/page.tsx
+++ b/apps/web/app/(all)/create-workspace/page.tsx
@@ -99,7 +99,12 @@ const CreateWorkspacePage = observer(function CreateWorkspacePage() {
stretch="auto"
label={t("workspace_creation.errors.creation_disabled.request_button")}
nativeButton={false}
- render={ }
+ render={
+
+ }
/>
diff --git a/apps/web/core/components/account/auth-forms/forgot-password.tsx b/apps/web/core/components/account/auth-forms/forgot-password.tsx
index df8cb5730b1..c35bf547c3e 100644
--- a/apps/web/core/components/account/auth-forms/forgot-password.tsx
+++ b/apps/web/core/components/account/auth-forms/forgot-password.tsx
@@ -11,6 +11,7 @@ import { Controller, useForm } from "react-hook-form";
// icons
import { CircleCheck } from "lucide-react";
// plane imports
+import { AnchorButton } from "@makeplane/propel/components/anchor-button";
import { Button } from "@makeplane/propel/components/button";
import { Field } from "@makeplane/propel/components/field";
import { Input, InputGroup } from "@makeplane/propel/components/input";
@@ -133,10 +134,9 @@ export const ForgotPasswordForm = observer(function ForgotPasswordForm() {
disabled={!isValid}
loading={isSubmitting || resendTimerCode > 0}
/>
- }
diff --git a/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
index 4f3f9b230f9..8c9c43b6410 100644
--- a/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
+++ b/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx
@@ -98,7 +98,9 @@ export const WorkspaceActiveCyclesUpgrade = observer(function WorkspaceActiveCyc
label={t("upgrade")}
icon={ }
nativeButton={false}
- render={ }
+ render={
+
+ }
/>
diff --git a/apps/web/core/components/common/new-empty-state.tsx b/apps/web/core/components/common/new-empty-state.tsx
index 1baaac204fb..9b0c63c7541 100644
--- a/apps/web/core/components/common/new-empty-state.tsx
+++ b/apps/web/core/components/common/new-empty-state.tsx
@@ -57,6 +57,7 @@ export function NewEmptyState({ title, description, image, primaryButton, disabl
onClick={primaryButton.onClick}
disabled={disabled}
label={primaryButton.text}
+ icon={primaryButton.icon}
/>
diff --git a/apps/web/core/components/exporter/single-export.tsx b/apps/web/core/components/exporter/single-export.tsx
index 9f67e196c7e..23d1cfacaa5 100644
--- a/apps/web/core/components/exporter/single-export.tsx
+++ b/apps/web/core/components/exporter/single-export.tsx
@@ -65,9 +65,21 @@ export function SingleExport({ service, refreshing }: Props) {
<>
{service.status == "completed" && (
)}
>
diff --git a/apps/web/core/components/global/product-updates/footer.tsx b/apps/web/core/components/global/product-updates/footer.tsx
index e2ae29b179f..d5de2a3511d 100644
--- a/apps/web/core/components/global/product-updates/footer.tsx
+++ b/apps/web/core/components/global/product-updates/footer.tsx
@@ -63,7 +63,9 @@ export function ProductUpdatesFooter() {
label={t("powered_by_plane_pages")}
icon={ }
nativeButton={false}
- render={ }
+ render={
+
+ }
/>
);
diff --git a/apps/web/core/components/inbox/content/inbox-issue-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-header.tsx
index 4e28160c4a8..b94aaac78a5 100644
--- a/apps/web/core/components/inbox/content/inbox-issue-header.tsx
+++ b/apps/web/core/components/inbox/content/inbox-issue-header.tsx
@@ -369,15 +369,24 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader
icon={ }
onClick={() => handleCopyIssueLink(workItemLink)}
/>
- router.push(workItemLink)} target="_self">
- }
- />
-
+ }
+ nativeButton={false}
+ render={
+ router.push(workItemLink)}
+ target="_self"
+ aria-label={t("inbox_issue.actions.open")}
+ >
+ {""}
+
+ }
+ />
) : (
<>
diff --git a/apps/web/core/components/instance/not-ready-view.tsx b/apps/web/core/components/instance/not-ready-view.tsx
index 998055c52e4..1ec0454fb6f 100644
--- a/apps/web/core/components/instance/not-ready-view.tsx
+++ b/apps/web/core/components/instance/not-ready-view.tsx
@@ -45,9 +45,16 @@ export function InstanceNotReady() {
-
-
-
+
+ }
+ />
+
diff --git a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
index 2db6b84bec8..5d58cb55e08 100644
--- a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
+++ b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx
@@ -29,7 +29,14 @@ export function BulkOperationsUpgradeBanner(props: Props) {
stretch="auto"
label="Upgrade to One"
nativeButton={false}
- render={ }
+ render={
+
+ }
/>
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
index 6ecdfab98a8..fc4e292cb5b 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
@@ -11,6 +11,7 @@ import { usePopper } from "react-popper";
import { Popover, Transition } from "@headlessui/react";
// ui
import { Button } from "@makeplane/propel/components/button";
+import { IconButton } from "@makeplane/propel/components/icon-button";
type Props = {
children: React.ReactNode;
@@ -46,7 +47,7 @@ export function FiltersDropdown(props: Props) {
return (
- {({ open }) => (
+ {() => (
<>
{menuButton ? (
@@ -70,14 +71,25 @@ export function FiltersDropdown(props: Props) {
)}
-
+ {miniIcon ? (
+
+ ) : (
+
+ )}
)}
diff --git a/apps/web/core/components/license/modal/card/talk-to-sales.tsx b/apps/web/core/components/license/modal/card/talk-to-sales.tsx
index 7869d7ddaa9..79468a7738d 100644
--- a/apps/web/core/components/license/modal/card/talk-to-sales.tsx
+++ b/apps/web/core/components/license/modal/card/talk-to-sales.tsx
@@ -78,7 +78,7 @@ export const TalkToSalesCard = observer(function TalkToSalesCard(props: TalkToSa
stretch="full"
label="Talk to Sales"
nativeButton={false}
- render={ }
+ render={ }
/>
{isTrialAllowed && !isSelfHosted && (
diff --git a/apps/web/core/components/onboarding/invitations.tsx b/apps/web/core/components/onboarding/invitations.tsx
index 70878a40563..9484cb71db2 100644
--- a/apps/web/core/components/onboarding/invitations.tsx
+++ b/apps/web/core/components/onboarding/invitations.tsx
@@ -112,7 +112,7 @@ export function Invitations(props: Props) {
or
-
+
-
+
diff --git a/apps/web/core/components/project/card.tsx b/apps/web/core/components/project/card.tsx
index 47ab8d1a6a5..3ac0ae03a30 100644
--- a/apps/web/core/components/project/card.tsx
+++ b/apps/web/core/components/project/card.tsx
@@ -353,19 +353,17 @@ export const ProjectCard = observer(function ProjectCard(props: Props) {
))}
{!isMemberOfProject && (
-
- {
- e.preventDefault();
- e.stopPropagation();
- setJoinProjectModal(true);
- }}
- />
-
+ {
+ e.preventDefault();
+ e.stopPropagation();
+ setJoinProjectModal(true);
+ }}
+ />
)}
>
diff --git a/apps/web/core/components/web-hooks/generated-hook-details.tsx b/apps/web/core/components/web-hooks/generated-hook-details.tsx
index 795066bc4c9..1a00c90fd2b 100644
--- a/apps/web/core/components/web-hooks/generated-hook-details.tsx
+++ b/apps/web/core/components/web-hooks/generated-hook-details.tsx
@@ -10,7 +10,7 @@ import { useTranslation } from "@plane/i18n";
import { Button } from "@makeplane/propel/components/button";
import type { IWebhook } from "@plane/types";
// types
-import { WebhookSecretKey } from "./form";
+import { WebhookSecretKey } from "./form/secret-key";
type Props = {
handleClose: () => void;
From 8b4ea6dc93e8bafa250a13e922c2235b09a91aa0 Mon Sep 17 00:00:00 2001
From: anmolsinghbhatia
Date: Mon, 31 Aug 2026 14:37:00 +0530
Subject: [PATCH 3/3] fix: set explicit sizes on migrated Button icons
Lucide defaults to 24px and published Button no longer injects glyph
size. Pass size-3.5 for xs/sm and size-4 for md/lg, including cloneElement
on dynamic icon props.
---
.../app/(all)/[workspaceSlug]/(projects)/header.tsx | 4 ++--
.../(projects)/profile/[userId]/header.tsx | 6 +++++-
apps/web/core/components/common/empty-state.tsx | 10 ++++++++--
apps/web/core/components/common/new-empty-state.tsx | 10 ++++++++--
apps/web/core/components/cycles/transfer-issues.tsx | 2 +-
.../core/components/empty-state/comic-box-button.tsx | 12 +++++++++---
.../empty-state/detailed-empty-state-root.tsx | 9 +++++++--
.../core/components/estimates/points/create-root.tsx | 2 +-
apps/web/core/components/exporter/prev-exports.tsx | 4 ++--
.../issue-detail/label/select/label-select.tsx | 2 +-
.../components/issues/issue-detail/subscription.tsx | 2 +-
.../filters/header/helpers/dropdown.tsx | 12 +++++++++---
apps/web/core/components/project/empty-state.tsx | 10 ++++++++--
apps/web/core/components/sidebar/add-button.tsx | 9 ++++++++-
.../core/components/web-hooks/form/secret-key.tsx | 2 +-
.../components/workspace/billing/comparison/base.tsx | 4 +++-
16 files changed, 74 insertions(+), 26 deletions(-)
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
index be884294e24..ee399a610cc 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx
@@ -44,7 +44,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
size="md"
stretch="auto"
onClick={() => toggleWidgetSettings(true)}
- icon={ }
+ icon={ }
label={t("home.manage_widgets")}
/>
@@ -53,7 +53,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
variant="secondary"
size="md"
aria-label={t("home.manage_widgets")}
- icon={ }
+ icon={ }
onClick={() => toggleWidgetSettings(true)}
/>
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
index f66a423eef4..e802874997e 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx
@@ -100,7 +100,11 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
variant="ghost"
size="md"
aria-label="Toggle profile sidebar"
- icon={ }
+ icon={
+
+ }
onClick={() => toggleProfileSidebar()}
/>
diff --git a/apps/web/core/components/common/empty-state.tsx b/apps/web/core/components/common/empty-state.tsx
index 39714252e82..5f073d5a491 100644
--- a/apps/web/core/components/common/empty-state.tsx
+++ b/apps/web/core/components/common/empty-state.tsx
@@ -4,10 +4,16 @@
* See the LICENSE file for details.
*/
-import React from "react";
+import React, { cloneElement, isValidElement } from "react";
// ui
import { Button } from "@makeplane/propel/components/button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: React.ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
title: string;
@@ -36,7 +42,7 @@ export function EmptyState({ title, description, image, primaryButton, secondary
size="sm"
stretch="auto"
label={primaryButton.text}
- icon={primaryButton.icon}
+ icon={withIconSize(primaryButton.icon, "size-3.5")}
onClick={primaryButton.onClick}
disabled={disabled}
/>
diff --git a/apps/web/core/components/common/new-empty-state.tsx b/apps/web/core/components/common/new-empty-state.tsx
index 9b0c63c7541..1ff3b6815ab 100644
--- a/apps/web/core/components/common/new-empty-state.tsx
+++ b/apps/web/core/components/common/new-empty-state.tsx
@@ -4,10 +4,16 @@
* See the LICENSE file for details.
*/
-import React, { useState } from "react";
+import React, { cloneElement, isValidElement, useState } from "react";
// ui
import { Button } from "@makeplane/propel/components/button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: React.ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
title: string;
@@ -57,7 +63,7 @@ export function NewEmptyState({ title, description, image, primaryButton, disabl
onClick={primaryButton.onClick}
disabled={disabled}
label={primaryButton.text}
- icon={primaryButton.icon}
+ icon={withIconSize(primaryButton.icon, "size-4")}
/>
}
+ icon={ }
onClick={handleClick}
disabled={disabled}
/>
diff --git a/apps/web/core/components/empty-state/comic-box-button.tsx b/apps/web/core/components/empty-state/comic-box-button.tsx
index 7452aaa4422..a585b9378ee 100644
--- a/apps/web/core/components/empty-state/comic-box-button.tsx
+++ b/apps/web/core/components/empty-state/comic-box-button.tsx
@@ -4,12 +4,18 @@
* See the LICENSE file for details.
*/
-import type { Ref } from "react";
-import { Fragment, useState } from "react";
+import type { ReactNode, Ref } from "react";
+import { cloneElement, Fragment, isValidElement, useState } from "react";
import { usePopper } from "react-popper";
import { Popover } from "@headlessui/react";
// plane imports
import { Button } from "@makeplane/propel/components/button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
label: string;
@@ -56,7 +62,7 @@ export function ComicBoxButton(props: Props) {
stretch="auto"
onClick={onClick}
disabled={disabled}
- icon={icon}
+ icon={withIconSize(icon, "size-4")}
label={label}
/>
diff --git a/apps/web/core/components/empty-state/detailed-empty-state-root.tsx b/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
index 03fe2aa48f5..b78ff763977 100644
--- a/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
+++ b/apps/web/core/components/empty-state/detailed-empty-state-root.tsx
@@ -4,13 +4,18 @@
* See the LICENSE file for details.
*/
-import React from "react";
+import React, { cloneElement, isValidElement } from "react";
import { observer } from "mobx-react";
// ui
import { Button } from "@makeplane/propel/components/button";
// utils
import { cn } from "@plane/utils";
+function withIconSize(icon: React.ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
+
type EmptyStateSize = "sm" | "base" | "lg";
type ButtonConfig = {
@@ -54,7 +59,7 @@ function CustomButton({
size="sm"
stretch="auto"
label={config.text}
- icon={icon}
+ icon={withIconSize(icon, "size-3.5")}
iconPosition={config.prependIcon ? "start" : "end"}
onClick={config.onClick}
disabled={config.disabled}
diff --git a/apps/web/core/components/estimates/points/create-root.tsx b/apps/web/core/components/estimates/points/create-root.tsx
index 00927b2df05..cdf3b9bfb82 100644
--- a/apps/web/core/components/estimates/points/create-root.tsx
+++ b/apps/web/core/components/estimates/points/create-root.tsx
@@ -175,7 +175,7 @@ export const EstimatePointCreateRoot = observer(function EstimatePointCreateRoot
variant="ghost"
size="sm"
stretch="auto"
- icon={ }
+ icon={ }
onClick={handleCreate}
label={`Add ${estimateType}`}
/>
diff --git a/apps/web/core/components/exporter/prev-exports.tsx b/apps/web/core/components/exporter/prev-exports.tsx
index 53880b10ef3..8dece25dc09 100644
--- a/apps/web/core/components/exporter/prev-exports.tsx
+++ b/apps/web/core/components/exporter/prev-exports.tsx
@@ -96,7 +96,7 @@ export const PrevExports = observer(function PrevExports(props: Props) {
size="xs"
stretch="auto"
label={t("prev")}
- icon={ }
+ icon={ }
disabled={!exporterServices?.prev_page_results}
onClick={() => exporterServices?.prev_page_results && setCursor(exporterServices?.prev_cursor)}
/>
@@ -105,7 +105,7 @@ export const PrevExports = observer(function PrevExports(props: Props) {
size="xs"
stretch="auto"
label={t("next")}
- icon={ }
+ icon={ }
iconPosition="end"
disabled={!exporterServices?.next_page_results}
onClick={() => exporterServices?.next_page_results && setCursor(exporterServices?.next_cursor)}
diff --git a/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx b/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
index a4383b3d146..35b8f9b984d 100644
--- a/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
+++ b/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
@@ -132,7 +132,7 @@ export const IssueLabelSelect = observer(function IssueLabelSelect(props: IIssue
size="xs"
stretch="auto"
label={label}
- icon={ }
+ icon={ }
ref={setReferenceElement}
type="button"
onClick={() => !projectLabels && fetchLabels()}
diff --git a/apps/web/core/components/issues/issue-detail/subscription.tsx b/apps/web/core/components/issues/issue-detail/subscription.tsx
index a06d1125655..f769eaf20ab 100644
--- a/apps/web/core/components/issues/issue-detail/subscription.tsx
+++ b/apps/web/core/components/issues/issue-detail/subscription.tsx
@@ -82,7 +82,7 @@ export const IssueSubscription = observer(function IssueSubscription(props: TIss
return (
:
}
+ icon={isSubscribed ?
:
}
variant="secondary"
size="md"
stretch="auto"
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
index fc4e292cb5b..123ef8ed7e8 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
@@ -4,7 +4,7 @@
* See the LICENSE file for details.
*/
-import React, { Fragment, useState } from "react";
+import React, { cloneElement, Fragment, isValidElement, useState } from "react";
import type { Placement } from "@popperjs/core";
import { usePopper } from "react-popper";
// headless ui
@@ -12,6 +12,12 @@ import { Popover, Transition } from "@headlessui/react";
// ui
import { Button } from "@makeplane/propel/components/button";
import { IconButton } from "@makeplane/propel/components/icon-button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: React.ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
children: React.ReactNode;
@@ -62,7 +68,7 @@ export function FiltersDropdown(props: Props) {
variant="secondary"
size="md"
stretch="auto"
- icon={icon}
+ icon={withIconSize(icon, "size-4")}
tabIndex={tabIndex}
label={title ?? ""}
/>
@@ -76,7 +82,7 @@ export function FiltersDropdown(props: Props) {
variant="secondary"
size="md"
aria-label={typeof title === "string" ? title : "Filters"}
- icon={miniIcon}
+ icon={withIconSize(miniIcon, "size-4")}
disabled={disabled}
tabIndex={tabIndex}
/>
diff --git a/apps/web/core/components/project/empty-state.tsx b/apps/web/core/components/project/empty-state.tsx
index f12a689bcc8..4d7c313f4c1 100644
--- a/apps/web/core/components/project/empty-state.tsx
+++ b/apps/web/core/components/project/empty-state.tsx
@@ -4,9 +4,15 @@
* See the LICENSE file for details.
*/
-import React from "react";
+import React, { cloneElement, isValidElement } from "react";
// ui
import { Button } from "@makeplane/propel/components/button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: React.ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
title: string;
@@ -37,7 +43,7 @@ export function EmptyState({ title, description, image, primaryButton, secondary
size="lg"
stretch="auto"
label={primaryButton.text}
- icon={primaryButton.icon}
+ icon={withIconSize(primaryButton.icon, "size-4")}
onClick={primaryButton.onClick}
disabled={disabled}
/>
diff --git a/apps/web/core/components/sidebar/add-button.tsx b/apps/web/core/components/sidebar/add-button.tsx
index 1ce096c347b..b1a7f36cfd5 100644
--- a/apps/web/core/components/sidebar/add-button.tsx
+++ b/apps/web/core/components/sidebar/add-button.tsx
@@ -5,7 +5,14 @@
*/
import type { MouseEventHandler, ReactNode } from "react";
+import { cloneElement, isValidElement } from "react";
import { Button } from "@makeplane/propel/components/button";
+import { cn } from "@plane/utils";
+
+function withIconSize(icon: ReactNode, sizeClass: string) {
+ if (!isValidElement<{ className?: string }>(icon)) return icon;
+ return cloneElement(icon, { className: cn(sizeClass, icon.props.className) });
+}
type Props = {
label: string;
@@ -25,7 +32,7 @@ export function SidebarAddButton(props: Props) {
size="lg"
stretch="full"
label={label}
- icon={icon}
+ icon={withIconSize(icon, "size-4")}
onClick={onClick}
disabled={disabled}
/>
diff --git a/apps/web/core/components/web-hooks/form/secret-key.tsx b/apps/web/core/components/web-hooks/form/secret-key.tsx
index 390abfd7bfd..97fc5f34beb 100644
--- a/apps/web/core/components/web-hooks/form/secret-key.tsx
+++ b/apps/web/core/components/web-hooks/form/secret-key.tsx
@@ -138,7 +138,7 @@ export const WebhookSecretKey = observer(function WebhookSecretKey(props: Props)
size="md"
stretch="auto"
label={isRegenerating ? `${t("re_generating")}...` : t("re_generate_key")}
- icon={
}
+ icon={
}
onClick={handleRegenerateSecretKey}
loading={isRegenerating}
/>
diff --git a/apps/web/core/components/workspace/billing/comparison/base.tsx b/apps/web/core/components/workspace/billing/comparison/base.tsx
index 4c98178b65b..cf7c6a032a9 100644
--- a/apps/web/core/components/workspace/billing/comparison/base.tsx
+++ b/apps/web/core/components/workspace/billing/comparison/base.tsx
@@ -130,7 +130,9 @@ export const PlansComparisonBase = observer(function PlansComparisonBase(props:
size="sm"
stretch="auto"
label={isCompareAllFeaturesSectionOpen ? "Collapse comparison" : "Compare all features"}
- icon={isCompareAllFeaturesSectionOpen ?
:
}
+ icon={
+ isCompareAllFeaturesSectionOpen ?
:
+ }
iconPosition="end"
onClick={() => {
setIsCompareAllFeaturesSectionOpen(!isCompareAllFeaturesSectionOpen);