From 4baa06367ee1ed34b48cc04e36b6807c58007202 Mon Sep 17 00:00:00 2001
From: anmolsinghbhatia
Date: Fri, 28 Aug 2026 19:03:30 +0530
Subject: [PATCH] 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 | 32 +++++---
.../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 | 20 ++---
.../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(+), 1387 deletions(-)
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx
index a063df5256..880f6f2185 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 f15d767388..572ebe6d2e 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 7bd93646c2..3696d7e49a 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 296b780c91..6233e21921 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 592bf09a50..e918a60d40 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 8f4165010f..fc50b7fda7 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 5e75728953..83c4e05787 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 13613d413b..5193cd7f52 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 e5497ed82a..e694d35942 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 fc1f76aa5d..6ce20ef868 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 a26a539dd6..a5b543260f 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 fa32b71c6a..eee93e62b0 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 7eab6a4a7f..33ff36ea64 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 f4fdddc4ed..fe75d32398 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 0c7ea4e12a..4e3466a3d9 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 099a0ee40a..5a279c7411 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 1d381547d4..f6967c3785 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 38087189cc..c903e561fb 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 0da54f0a88..cbeb829fc0 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 0269dcbdcb..60d2c18080 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 a8d61829e3..0b23507bb3 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 13763951ce..651982260f 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 2138753aaf..000bddac7e 100644
--- a/apps/web/core/components/account/auth-forms/email.tsx
+++ b/apps/web/core/components/account/auth-forms/email.tsx
@@ -11,7 +11,7 @@ import { observer } from "mobx-react";
import { CircleAlert, XCircle } from "lucide-react";
// plane imports
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 { Input, Spinner } from "@plane/ui";
import { cn, checkEmailValidity } from "@plane/utils";
@@ -100,9 +100,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 ebb9345c35..0744d8f306 100644
--- a/apps/web/core/components/account/auth-forms/forgot-password.tsx
+++ b/apps/web/core/components/account/auth-forms/forgot-password.tsx
@@ -12,10 +12,10 @@ import { Controller, useForm } from "react-hook-form";
import { CircleCheck } from "lucide-react";
// plane imports
import { useTranslation } from "@plane/i18n";
-import { Button, getButtonStyling } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import { Input } from "@plane/ui";
-import { cn, checkEmailValidity } from "@plane/utils";
+import { checkEmailValidity } from "@plane/utils";
// hooks
import useTimer from "@/hooks/use-timer";
// services
@@ -117,20 +117,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 09ccac02c6..427355d6f8 100644
--- a/apps/web/core/components/account/auth-forms/password.tsx
+++ b/apps/web/core/components/account/auth-forms/password.tsx
@@ -12,7 +12,7 @@ import { Eye, EyeOff, Info, XCircle } from "lucide-react";
// plane imports
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 { Input, PasswordStrengthIndicator, Spinner } from "@plane/ui";
import { getPasswordStrength } from "@plane/utils";
@@ -279,31 +279,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 98283d3505..ed2593a4f1 100644
--- a/apps/web/core/components/account/auth-forms/reset-password.tsx
+++ b/apps/web/core/components/account/auth-forms/reset-password.tsx
@@ -12,7 +12,7 @@ import { Eye, EyeOff } from "lucide-react";
// ui
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 { Input, PasswordStrengthIndicator } from "@plane/ui";
// components
import { getPasswordStrength } from "@plane/utils";
@@ -195,9 +195,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 f16db6650b..a751d6b7b3 100644
--- a/apps/web/core/components/account/auth-forms/set-password.tsx
+++ b/apps/web/core/components/account/auth-forms/set-password.tsx
@@ -13,7 +13,7 @@ import { Eye, EyeOff } from "lucide-react";
// plane imports
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 { Input, PasswordStrengthIndicator } from "@plane/ui";
// components
@@ -198,9 +198,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 9c4b8a6c18..75e39aa22d 100644
--- a/apps/web/core/components/account/auth-forms/unique-code.tsx
+++ b/apps/web/core/components/account/auth-forms/unique-code.tsx
@@ -8,7 +8,7 @@ import { useEffect, useState } from "react";
import { CircleCheck, XCircle } from "lucide-react";
import { API_BASE_URL } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { Input, Spinner } from "@plane/ui";
// constants
// helpers
@@ -162,15 +162,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 f4dba2a81c..4d3cdeb56e 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 ff1ee25439..4f3f9b230f 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 7bdbbddb36..864637b034 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 942285cab2..dbebdf158d 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 944d19e34b..c0f0f4c257 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 1e1b96cf90..84814658b9 100644
--- a/apps/web/core/components/api-token/modal/form.tsx
+++ b/apps/web/core/components/api-token/modal/form.tsx
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
import { Calendar } from "lucide-react";
// 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 { IApiToken } from "@plane/types";
// ui
@@ -251,14 +251,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 aad163191f..1c83ce161e 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 b38603006f..8765e4bee7 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 ed847676ac..639be4beb8 100644
--- a/apps/web/core/components/automation/select-month-modal.tsx
+++ b/apps/web/core/components/automation/select-month-modal.tsx
@@ -7,7 +7,7 @@
import { useParams } from "next/navigation";
// react-hook-form
import { Controller, useForm } from "react-hook-form";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IProject } from "@plane/types";
// ui
import { Input, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -123,12 +123,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 a5f469deb7..39714252e8 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 74ef8f3fbb..27e40fe99d 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 742ea3a6a8..1baaac204f 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 854b50922c..aa8715f40c 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 0f1ac2c53c..4f0a876370 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 edcf3b948e..410eb9405a 100644
--- a/apps/web/core/components/core/image-picker-popover.tsx
+++ b/apps/web/core/components/core/image-picker-popover.tsx
@@ -16,7 +16,8 @@ import { Popover } from "@headlessui/react";
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 { Input, Loader } from "@plane/ui";
@@ -192,9 +193,15 @@ function ImagePickerPopoverComponent
-
+ }
+ >
{label}
-
+
{isOpen && (
)}
/>
- setSearchParams(formData.search)}>
- Search
-
+ setSearchParams(formData.search)}
+ />
{unsplashImages ? (
unsplashImages.length > 0 ? (
@@ -349,22 +360,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 1d7b4099a0..66690ebd15 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 944cb52e57..6df7a7dde3 100644
--- a/apps/web/core/components/core/modals/change-email-modal.tsx
+++ b/apps/web/core/components/core/modals/change-email-modal.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { Controller, 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 { Input, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
import { cn } from "@plane/utils";
@@ -201,16 +201,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 646ce6c359..e6e06b87f0 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 8b932742c4..a48bd90371 100644
--- a/apps/web/core/components/core/modals/gpt-assistant-popover.tsx
+++ b/apps/web/core/components/core/modals/gpt-assistant-popover.tsx
@@ -13,7 +13,7 @@ import { AlertCircle } from "lucide-react";
import { Popover, Transition } from "@headlessui/react";
// plane imports
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";
import { Input } from "@plane/ui";
// components
@@ -180,13 +180,14 @@ export function GptAssistantPopover(props: Props) {
const responseActionButton = response !== "" && (
{
onResponse(response);
onClose();
}}
- >
- Use this response
-
+ />
);
const generateResponseButtonText = isSubmitting
@@ -287,12 +288,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 ff688c7285..b591c07ec9 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 c22ce52aad..e491b78463 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 47307776d8..4dd76e93b4 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 c2ffc0bc3d..47c2e2ff26 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 a4586163b4..e2d6e82819 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 e29c05fed9..86aa946b30 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 3d26c0b360..9c97a3b675 100644
--- a/apps/web/core/components/cycles/form.tsx
+++ b/apps/web/core/components/cycles/form.tsx
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
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 { Input, TextArea } from "@plane/ui";
@@ -184,18 +184,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 adbab83aa4..027d5bbe41 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 dbee6ab0b4..d8343a7beb 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 f48b0e9570..4eae331fd9 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 dc955cdded..0420a4b731 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 222e0531f8..7452aaa442 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 593e5adda7..3e987ae1bf 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 518f666509..3fa1284fc2 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 e6b39fcdec..99b0511f36 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 ad3c57e9fd..00927b2df0 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 8fde52e1bf..df8d9c8636 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 7ca85bca08..2fbf2572b1 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 f3ebedb41f..53880b10ef 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 8bd05281e9..9f67e196c7 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 09965aac3e..e2ae29b179 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 76361332e1..e1c0dcc12c 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
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
// plane types
// plane ui
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 { Input, ModalCore } from "@plane/ui";
import type { TLinkOperations } from "./use-links";
@@ -126,13 +126,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 5243521731..4e28160c4a 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 2413ccc382..6a0909af7c 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 ad2e720c71..385a6473f5 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 1ad83a6b0e..700c517ca4 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 850d0af2eb..998055c52e 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 6f638012ba..dabaaaf18c 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 ad487abca1..0c848a1d89 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 bfd3336902..2db6b84bec 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 9ba05b9afd..9e9afbb223 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 cbd899e9f2..abee6c9a1a 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 b032f11c11..6ae414f9bf 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 ef808a1fe7..c48c019266 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 df2dd31cf5..84fd0c7110 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 ff2f84f7d4..4c1bf9c930 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 9c00651461..a4383b3d14 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 ecc11ddcdf..4c99760bc6 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
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
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 { Input, ModalCore } from "@plane/ui";
@@ -134,11 +134,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 d9573d63c6..a06d112565 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 fdf49f374a..6ecdfab98a 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 14f7490946..6edf182d77 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 a9ea0faa35..0ed2505fd5 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 6be483cd1a..ac0eb14ab1 100644
--- a/apps/web/core/components/labels/create-update-label-inline.tsx
+++ b/apps/web/core/components/labels/create-update-label-inline.tsx
@@ -13,7 +13,7 @@ import { Popover, Transition } from "@headlessui/react";
// plane imports
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";
import { Input } from "@plane/ui";
@@ -234,19 +234,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 6bb506970a..80c99a264a 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 01de02caf8..d21d7bcd83 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 c12ee70422..7869d7ddaa 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 58067d62c6..5ab959a6d9 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 b33cf62cd3..0e615d55df 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 a958bc486c..c906876020 100644
--- a/apps/web/core/components/modules/form.tsx
+++ b/apps/web/core/components/modules/form.tsx
@@ -9,7 +9,7 @@ import { Controller, useForm } 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 { IModule } from "@plane/types";
// ui
import { Input, TextArea } from "@plane/ui";
@@ -233,18 +233,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 b99254aefd..e5cf6f9edf 100644
--- a/apps/web/core/components/modules/links/create-update-modal.tsx
+++ b/apps/web/core/components/modules/links/create-update-modal.tsx
@@ -7,7 +7,7 @@
import { useEffect } from "react";
import { Controller, useForm } from "react-hook-form";
// plane types
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { ILinkDetails, ModuleLink } from "@plane/types";
// plane ui
@@ -137,12 +137,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 34f7a937ce..02a6b0f4b0 100644
--- a/apps/web/core/components/onboarding/create-workspace.tsx
+++ b/apps/web/core/components/onboarding/create-workspace.tsx
@@ -11,7 +11,7 @@ import { Controller, useForm } from "react-hook-form";
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
@@ -104,17 +104,15 @@ export const CreateWorkspace = observer(function CreateWorkspace(props: Props) {
{!!invitedWorkspaces && (
<>
-
- I want to join invited workspaces{" "}
-
- {invitedWorkspaces}
-
-
+
+
+
or
@@ -264,9 +262,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 09152433c1..70878a4056 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 b73c87bb8b..ec19e57e13 100644
--- a/apps/web/core/components/onboarding/invite-members.tsx
+++ b/apps/web/core/components/onboarding/invite-members.tsx
@@ -24,7 +24,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";
@@ -386,15 +386,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 1880323e8f..5f2a88718f 100644
--- a/apps/web/core/components/onboarding/profile-setup.tsx
+++ b/apps/web/core/components/onboarding/profile-setup.tsx
@@ -11,7 +11,7 @@ import { Eye, EyeOff } from "lucide-react";
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
@@ -540,9 +540,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 5e71c802f3..1a58b36ba2 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 43029d1cfd..358217b378 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 536110fd03..8c28a9f912 100644
--- a/apps/web/core/components/onboarding/steps/team/root.tsx
+++ b/apps/web/core/components/onboarding/steps/team/root.tsx
@@ -22,7 +22,7 @@ import { Listbox } from "@headlessui/react";
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";
@@ -381,15 +381,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 8908adaf3b..1e0303f079 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 f9c32a91f2..b94a600b8b 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 92153459c0..fc0b7f2e19 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 aa80f8e330..2b1a793c33 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 db87b7150b..4180221e35 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 2e9f22f0ad..0fd53c5c86 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 cd21b2b5fa..90f7e46ae5 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 810e838c15..769a775c46 100644
--- a/apps/web/core/components/pages/modals/page-form.tsx
+++ b/apps/web/core/components/pages/modals/page-form.tsx
@@ -11,7 +11,7 @@ import type { LucideIcon } from "lucide-react";
// plane imports
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";
@@ -144,19 +144,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 5cd3b76794..092c55b393 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 d162dbd245..b070508892 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 f3fdec84d6..d41d50ca66 100644
--- a/apps/web/core/components/project-states/create-update/form.tsx
+++ b/apps/web/core/components/project-states/create-update/form.tsx
@@ -6,7 +6,7 @@
import { useEffect, useState } from "react";
import { TwitterPicker } from "react-color";
-import { Button } from "@plane/propel/button";
+import { Button } from "@makeplane/propel/components/button";
import type { IState } from "@plane/types";
import { Popover, Input, TextArea } from "@plane/ui";
@@ -98,12 +98,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 0f17ce90f7..de41087a8f 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 c9286d15fa..47ab8d1a6a 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 52a7c30600..06cea55a61 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 ae66ca7191..50a307fcbc 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 3155e9f72c..a93eda9775 100644
--- a/apps/web/core/components/project/delete-project-modal.tsx
+++ b/apps/web/core/components/project/delete-project-modal.tsx
@@ -8,7 +8,7 @@ import { useParams } from "next/navigation";
import { Controller, useForm } from "react-hook-form";
import { AlertTriangle } 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 { IProject } from "@plane/types";
import { Input, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -139,12 +139,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 bb8acd15ec..f50778293e 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 5b83e0c287..eb714d0a45 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 4e4bce8388..f12a689bcc 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 cfd7ea6e4e..d72e0240b6 100644
--- a/apps/web/core/components/project/form.tsx
+++ b/apps/web/core/components/project/form.tsx
@@ -10,7 +10,7 @@ import { Info } from "lucide-react";
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";
@@ -438,9 +438,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 e554ab2d19..7776a460f9 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 8d1088440b..ac581d5a81 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 262a1237be..e6c52d959b 100644
--- a/apps/web/core/components/project/leave-project-modal.tsx
+++ b/apps/web/core/components/project/leave-project-modal.tsx
@@ -9,7 +9,7 @@ import { useParams } from "next/navigation";
import { Controller, useForm } from "react-hook-form";
import { AlertTriangleIcon } 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 { IProject } from "@plane/types";
import { Input, EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
@@ -163,12 +163,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 e5d2122110..56d8f4ef25 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 8f7952c5ff..ef865d7ad0 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 931f36b347..fac59cd8d9 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 7bbd38a2c7..a80e49953a 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 f57369ac14..33fc9f2a05 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 de56790c88..d142d74874 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 f24e43d4c0..268d355a21 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 51f58c3750..3a13170b1a 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 5b8aa93318..f415e529cd 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 0d7217373a..839b8e7aa6 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 e20245f835..e2c493aa7d 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
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
import { CircleUserRound } from "lucide-react";
// plane imports
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";
@@ -394,9 +394,14 @@ export const GeneralProfileSettingsForm = observer(function GeneralProfileSettin
-
- {isLoading ? t("saving") : t("save_changes")}
-
+
@@ -405,9 +410,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 869e377c22..2b9656df69 100644
--- a/apps/web/core/components/settings/profile/content/pages/security.tsx
+++ b/apps/web/core/components/settings/profile/content/pages/security.tsx
@@ -11,7 +11,7 @@ import { Eye, EyeOff } from "lucide-react";
// plane imports
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 { Input, PasswordStrengthIndicator } from "@plane/ui";
import { getPasswordStrength } from "@plane/utils";
@@ -264,11 +264,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 6db327e363..1ce096c347 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 3336065886..5d80fe8086 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 10ad919d92..c9022ef291 100644
--- a/apps/web/core/components/views/form.tsx
+++ b/apps/web/core/components/views/form.tsx
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
// plane imports
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 {
@@ -279,18 +279,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 e79debd069..48fa310650 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 5b51d78dbd..726b8537a4 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 4800931d00..9d5576fcf7 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 98bf1b73c8..390abfd7bf 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 03755264a4..795066bc4c 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 02e8c353c3..5c74b155c7 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 e8f1d63288..d1611cd0b2 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 b09965a028..4c98178b65 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 27d2b8cf14..c0b62c1ce6 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 9ec6dc4280..76c9660463 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 2274f1832b..71a6da59d9 100644
--- a/apps/web/core/components/workspace/create-workspace-form.tsx
+++ b/apps/web/core/components/workspace/create-workspace-form.tsx
@@ -10,7 +10,7 @@ import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
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
@@ -241,13 +241,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 4d9196b16f..0d86064b8c 100644
--- a/apps/web/core/components/workspace/delete-workspace-form.tsx
+++ b/apps/web/core/components/workspace/delete-workspace-form.tsx
@@ -9,7 +9,7 @@ import { Controller, useForm } from "react-hook-form";
import { AlertTriangle } from "lucide-react";
// 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 { IWorkspace } from "@plane/types";
import { Input } from "@plane/ui";
@@ -151,12 +151,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 6a6f845d07..e8c561c545 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 b11e850b4e..ec181c924c 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 23b5f4d0dd..f524971030 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 e8c27a60ed..02849492d3 100644
--- a/apps/web/core/components/workspace/settings/workspace-details.tsx
+++ b/apps/web/core/components/workspace/settings/workspace-details.tsx
@@ -10,7 +10,7 @@ import { Controller, useForm } from "react-hook-form";
// Plane Imports
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";
@@ -285,14 +285,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 f1d6bd80ae..e9a32f8890 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 d980acee04..3b8c094246 100644
--- a/apps/web/core/components/workspace/views/form.tsx
+++ b/apps/web/core/components/workspace/views/form.tsx
@@ -9,7 +9,7 @@ import { Controller, useForm } from "react-hook-form";
// plane imports
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 { Input, TextArea } from "@plane/ui";
@@ -184,18 +184,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 e74dfd55db..0366613f3e 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
-
-
+ }
+ />
+ }
+ />