From b1def9316e11e5bbd01434fdf6f102dcd5a732bc Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 10:26:30 +0530 Subject: [PATCH 01/42] refactor: remove command palette & sidebar components and related files from web/app/ce --- .../command-palette/actions/index.ts | 7 -- .../work-item-actions/change-state-list.tsx | 55 --------- .../actions/work-item-actions/index.ts | 7 -- .../ce/components/command-palette/helpers.tsx | 116 ------------------ .../ce/components/command-palette/index.ts | 8 -- .../common/quick-actions-factory.tsx | 7 -- .../filters/applied-filters/issue-types.tsx | 17 --- .../issues/filters/team-project.tsx | 17 --- .../projects/settings/features-list.tsx | 7 -- .../ce/components/sidebar/app-switcher.tsx | 9 -- apps/web/ce/components/sidebar/index.ts | 8 -- .../sidebar/project-navigation-root.tsx | 18 --- .../ce/components/workspace/app-switcher.tsx | 11 -- .../common/quick-actions-helper.tsx | 2 +- .../project/project-feature-update.tsx | 4 +- .../workspace/sidebar/projects-list-item.tsx | 6 +- 16 files changed, 8 insertions(+), 291 deletions(-) delete mode 100644 apps/web/ce/components/command-palette/actions/index.ts delete mode 100644 apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx delete mode 100644 apps/web/ce/components/command-palette/actions/work-item-actions/index.ts delete mode 100644 apps/web/ce/components/command-palette/helpers.tsx delete mode 100644 apps/web/ce/components/command-palette/index.ts delete mode 100644 apps/web/ce/components/common/quick-actions-factory.tsx delete mode 100644 apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx delete mode 100644 apps/web/ce/components/issues/filters/team-project.tsx delete mode 100644 apps/web/ce/components/projects/settings/features-list.tsx delete mode 100644 apps/web/ce/components/sidebar/app-switcher.tsx delete mode 100644 apps/web/ce/components/sidebar/index.ts delete mode 100644 apps/web/ce/components/sidebar/project-navigation-root.tsx delete mode 100644 apps/web/ce/components/workspace/app-switcher.tsx diff --git a/apps/web/ce/components/command-palette/actions/index.ts b/apps/web/ce/components/command-palette/actions/index.ts deleted file mode 100644 index a6961e23876..00000000000 --- a/apps/web/ce/components/command-palette/actions/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./work-item-actions"; diff --git a/apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx b/apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx deleted file mode 100644 index 69e4aed88e3..00000000000 --- a/apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { Command } from "cmdk"; -import { observer } from "mobx-react"; -import { EIconSize } from "@plane/constants"; -// plane imports -import { CheckIcon, StateGroupIcon } from "@plane/propel/icons"; -import { Spinner } from "@plane/ui"; -// store hooks -import { useProjectState } from "@/hooks/store/use-project-state"; - -export type TChangeWorkItemStateListProps = { - projectId: string | null; - currentStateId: string | null; - handleStateChange: (stateId: string) => void; -}; - -export const ChangeWorkItemStateList = observer(function ChangeWorkItemStateList(props: TChangeWorkItemStateListProps) { - const { projectId, currentStateId, handleStateChange } = props; - // store hooks - const { getProjectStates } = useProjectState(); - // derived values - const projectStates = getProjectStates(projectId); - - return ( - <> - {projectStates ? ( - projectStates.length > 0 ? ( - projectStates.map((state) => ( - handleStateChange(state.id)} className="focus:outline-none"> -
- -

{state.name}

-
-
{state.id === currentStateId && }
-
- )) - ) : ( -
No states found
- ) - ) : ( - - )} - - ); -}); diff --git a/apps/web/ce/components/command-palette/actions/work-item-actions/index.ts b/apps/web/ce/components/command-palette/actions/work-item-actions/index.ts deleted file mode 100644 index 3f2f8c07184..00000000000 --- a/apps/web/ce/components/command-palette/actions/work-item-actions/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./change-state-list"; diff --git a/apps/web/ce/components/command-palette/helpers.tsx b/apps/web/ce/components/command-palette/helpers.tsx deleted file mode 100644 index d691579226b..00000000000 --- a/apps/web/ce/components/command-palette/helpers.tsx +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { LayoutGrid } from "lucide-react"; -// plane imports -import { CycleIcon, ModuleIcon, PageIcon, ProjectIcon, ViewsIcon } from "@plane/propel/icons"; -import type { - IWorkspaceDefaultSearchResult, - IWorkspaceIssueSearchResult, - IWorkspacePageSearchResult, - IWorkspaceProjectSearchResult, - IWorkspaceSearchResult, -} from "@plane/types"; -import { generateWorkItemLink } from "@plane/utils"; -// plane web components -import { IssueIdentifier } from "@/plane-web/components/issues/issue-details/issue-identifier"; - -export type TCommandGroups = { - [key: string]: { - icon: React.ReactNode | null; - itemName: (item: any) => React.ReactNode; - path: (item: any, projectId: string | undefined) => string; - title: string; - }; -}; - -export const commandGroups: TCommandGroups = { - cycle: { - icon: , - itemName: (cycle: IWorkspaceDefaultSearchResult) => ( -
- {cycle.project__identifier} {cycle.name} -
- ), - path: (cycle: IWorkspaceDefaultSearchResult) => - `/${cycle?.workspace__slug}/projects/${cycle?.project_id}/cycles/${cycle?.id}`, - title: "Cycles", - }, - issue: { - icon: null, - itemName: (issue: IWorkspaceIssueSearchResult) => ( -
- {" "} - {issue.name} -
- ), - path: (issue: IWorkspaceIssueSearchResult) => - generateWorkItemLink({ - workspaceSlug: issue?.workspace__slug, - projectId: issue?.project_id, - issueId: issue?.id, - projectIdentifier: issue.project__identifier, - sequenceId: issue?.sequence_id, - }), - title: "Work items", - }, - issue_view: { - icon: , - itemName: (view: IWorkspaceDefaultSearchResult) => ( -
- {view.project__identifier} {view.name} -
- ), - path: (view: IWorkspaceDefaultSearchResult) => - `/${view?.workspace__slug}/projects/${view?.project_id}/views/${view?.id}`, - title: "Views", - }, - module: { - icon: , - itemName: (module: IWorkspaceDefaultSearchResult) => ( -
- {module.project__identifier} {module.name} -
- ), - path: (module: IWorkspaceDefaultSearchResult) => - `/${module?.workspace__slug}/projects/${module?.project_id}/modules/${module?.id}`, - title: "Modules", - }, - page: { - icon: , - itemName: (page: IWorkspacePageSearchResult) => ( -
- {page.project__identifiers?.[0]} {page.name} -
- ), - path: (page: IWorkspacePageSearchResult, projectId: string | undefined) => { - let redirectProjectId = page?.project_ids?.[0]; - if (!!projectId && page?.project_ids?.includes(projectId)) redirectProjectId = projectId; - return redirectProjectId - ? `/${page?.workspace__slug}/projects/${redirectProjectId}/pages/${page?.id}` - : `/${page?.workspace__slug}/wiki/${page?.id}`; - }, - title: "Pages", - }, - project: { - icon: , - itemName: (project: IWorkspaceProjectSearchResult) => project?.name, - path: (project: IWorkspaceProjectSearchResult) => `/${project?.workspace__slug}/projects/${project?.id}/issues/`, - title: "Projects", - }, - workspace: { - icon: , - itemName: (workspace: IWorkspaceSearchResult) => workspace?.name, - path: (workspace: IWorkspaceSearchResult) => `/${workspace?.slug}/`, - title: "Workspaces", - }, -}; diff --git a/apps/web/ce/components/command-palette/index.ts b/apps/web/ce/components/command-palette/index.ts deleted file mode 100644 index 128f77fb157..00000000000 --- a/apps/web/ce/components/command-palette/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./actions"; -export * from "./helpers"; diff --git a/apps/web/ce/components/common/quick-actions-factory.tsx b/apps/web/ce/components/common/quick-actions-factory.tsx deleted file mode 100644 index 9f94c8ddf15..00000000000 --- a/apps/web/ce/components/common/quick-actions-factory.tsx +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export { useQuickActionsFactory } from "@/components/common/quick-actions-factory"; diff --git a/apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx b/apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx deleted file mode 100644 index 09ff7737f59..00000000000 --- a/apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { observer } from "mobx-react"; - -type Props = { - handleRemove: (val: string) => void; - values: string[]; - editable: boolean | undefined; -}; - -export const AppliedIssueTypeFilters = observer(function AppliedIssueTypeFilters(_props: Props) { - return null; -}); diff --git a/apps/web/ce/components/issues/filters/team-project.tsx b/apps/web/ce/components/issues/filters/team-project.tsx deleted file mode 100644 index f838f4c9481..00000000000 --- a/apps/web/ce/components/issues/filters/team-project.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { observer } from "mobx-react"; - -type Props = { - appliedFilters: string[] | null; - handleUpdate: (val: string) => void; - searchQuery: string; -}; - -export const FilterTeamProjects = observer(function FilterTeamProjects(_props: Props) { - return null; -}); diff --git a/apps/web/ce/components/projects/settings/features-list.tsx b/apps/web/ce/components/projects/settings/features-list.tsx deleted file mode 100644 index f256288ae10..00000000000 --- a/apps/web/ce/components/projects/settings/features-list.tsx +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export { ProjectFeaturesList } from "@/components/project/settings/features-list"; diff --git a/apps/web/ce/components/sidebar/app-switcher.tsx b/apps/web/ce/components/sidebar/app-switcher.tsx deleted file mode 100644 index 80cc87797f9..00000000000 --- a/apps/web/ce/components/sidebar/app-switcher.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export function SidebarAppSwitcher() { - return null; -} diff --git a/apps/web/ce/components/sidebar/index.ts b/apps/web/ce/components/sidebar/index.ts deleted file mode 100644 index 4f6ed0ef8df..00000000000 --- a/apps/web/ce/components/sidebar/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./app-switcher"; -export * from "./project-navigation-root"; diff --git a/apps/web/ce/components/sidebar/project-navigation-root.tsx b/apps/web/ce/components/sidebar/project-navigation-root.tsx deleted file mode 100644 index fd5249c01fc..00000000000 --- a/apps/web/ce/components/sidebar/project-navigation-root.tsx +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -// components -import { ProjectNavigation } from "@/components/workspace/sidebar/project-navigation"; - -type TProjectItemsRootProps = { - workspaceSlug: string; - projectId: string; -}; - -export function ProjectNavigationRoot(props: TProjectItemsRootProps) { - const { workspaceSlug, projectId } = props; - return ; -} diff --git a/apps/web/ce/components/workspace/app-switcher.tsx b/apps/web/ce/components/workspace/app-switcher.tsx deleted file mode 100644 index 4c1779e375d..00000000000 --- a/apps/web/ce/components/workspace/app-switcher.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import React from "react"; - -export function WorkspaceAppSwitcher() { - return <>; -} diff --git a/apps/web/core/components/common/quick-actions-helper.tsx b/apps/web/core/components/common/quick-actions-helper.tsx index 4b9af1dadde..a79b440248e 100644 --- a/apps/web/core/components/common/quick-actions-helper.tsx +++ b/apps/web/core/components/common/quick-actions-helper.tsx @@ -8,7 +8,7 @@ import type { ICycle, IModule, IProjectView, IWorkspaceView } from "@plane/types"; import type { TContextMenuItem } from "@plane/ui"; // hooks -import { useQuickActionsFactory } from "@/plane-web/components/common/quick-actions-factory"; +import { useQuickActionsFactory } from "@/components/common/quick-actions-factory"; // Types interface UseCycleMenuItemsProps { diff --git a/apps/web/core/components/project/project-feature-update.tsx b/apps/web/core/components/project/project-feature-update.tsx index b2eac27f0d3..931f36b3476 100644 --- a/apps/web/core/components/project/project-feature-update.tsx +++ b/apps/web/core/components/project/project-feature-update.tsx @@ -15,7 +15,7 @@ import { Row } from "@plane/ui"; // hooks import { useProject } from "@/hooks/store/use-project"; // plane web imports -import { ProjectFeaturesList } from "@/plane-web/components/projects/settings/features-list"; +import { ProjectFeaturesList } from "@/components/project/settings/features-list"; type Props = { workspaceSlug: string; @@ -45,6 +45,7 @@ export const ProjectFeatureUpdate = observer(function ProjectFeatureUpdate(props {t("created").toLowerCase()}.
+ {/* eslint-disable-next-line jsx-a11y/tabindex-no-positive */} @@ -52,6 +53,7 @@ export const ProjectFeatureUpdate = observer(function ProjectFeatureUpdate(props href={`/${workspaceSlug}/projects/${projectId}/issues`} onClick={onClose} className={getButtonStyling("primary", "lg")} + // oxlint-disable-next-line jsx-a11y/tabindex-no-positive tabIndex={2} > {t("open_project")} diff --git a/apps/web/core/components/workspace/sidebar/projects-list-item.tsx b/apps/web/core/components/workspace/sidebar/projects-list-item.tsx index f1256a4e44c..cff27b54694 100644 --- a/apps/web/core/components/workspace/sidebar/projects-list-item.tsx +++ b/apps/web/core/components/workspace/sidebar/projects-list-item.tsx @@ -40,9 +40,9 @@ import { useProjectNavigationPreferences } from "@/hooks/use-navigation-preferen import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports import { useNavigationItems } from "@/plane-web/components/navigations"; -import { ProjectNavigationRoot } from "@/plane-web/components/sidebar"; // local imports import { HIGHLIGHT_CLASS, highlightIssueOnDrop } from "../../issues/issue-layouts/utils"; +import { ProjectNavigation } from "./project-navigation"; type Props = { projectId: string; @@ -177,6 +177,7 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem element, canDrop: ({ source }) => !disableDrop && source?.data?.id !== projectId && source?.data?.dragInstanceId === "PROJECTS", + // oxlint-disable-next-line no-shadow getData: ({ input, element }) => { const data = { id: projectId }; @@ -222,6 +223,7 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem }, }) ); + // oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps }, [projectId, isLastChild, projectListType, handleOnProjectDrop]); useEffect(() => { @@ -479,7 +481,7 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem {isProjectListOpen && (
- + )} From c9561a72f911005fe766aaca2bb4cd6e1486e589 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 11:49:12 +0530 Subject: [PATCH 02/42] refactor: update analytics tab imports and add new analytics tab components --- .../(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx | 2 +- apps/web/{ce => core}/components/analytics/tabs.tsx | 0 .../{ce => core}/components/analytics/use-analytics-tabs.tsx | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename apps/web/{ce => core}/components/analytics/tabs.tsx (100%) rename apps/web/{ce => core}/components/analytics/use-analytics-tabs.tsx (100%) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx index 63321351dfe..3d4735b6574 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx @@ -21,7 +21,7 @@ import { useCommandPalette } from "@/hooks/store/use-command-palette"; import { useProject } from "@/hooks/store/use-project"; import { useWorkspace } from "@/hooks/store/use-workspace"; import { useUserPermissions } from "@/hooks/store/user"; -import { useAnalyticsTabs } from "@/plane-web/components/analytics/use-analytics-tabs"; +import { useAnalyticsTabs } from "@/components/analytics/use-analytics-tabs"; import type { Route } from "./+types/page"; function AnalyticsPage({ params }: Route.ComponentProps) { diff --git a/apps/web/ce/components/analytics/tabs.tsx b/apps/web/core/components/analytics/tabs.tsx similarity index 100% rename from apps/web/ce/components/analytics/tabs.tsx rename to apps/web/core/components/analytics/tabs.tsx diff --git a/apps/web/ce/components/analytics/use-analytics-tabs.tsx b/apps/web/core/components/analytics/use-analytics-tabs.tsx similarity index 100% rename from apps/web/ce/components/analytics/use-analytics-tabs.tsx rename to apps/web/core/components/analytics/use-analytics-tabs.tsx From 9804225e697f9ad9c78036fca5eb75bfcc7062cd Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 12:22:55 +0530 Subject: [PATCH 03/42] feat: add project, work item, and workspace level modals for enhanced user interaction --- .../components}/modals/project-level.tsx | 0 .../components}/modals/work-item-level.tsx | 1 + .../components}/modals/workspace-level.tsx | 0 apps/web/core/components/power-k/projects-app-provider.tsx | 6 +++--- 4 files changed, 4 insertions(+), 3 deletions(-) rename apps/web/{ce/components/command-palette => core/components}/modals/project-level.tsx (100%) rename apps/web/{ce/components/command-palette => core/components}/modals/work-item-level.tsx (99%) rename apps/web/{ce/components/command-palette => core/components}/modals/workspace-level.tsx (100%) diff --git a/apps/web/ce/components/command-palette/modals/project-level.tsx b/apps/web/core/components/modals/project-level.tsx similarity index 100% rename from apps/web/ce/components/command-palette/modals/project-level.tsx rename to apps/web/core/components/modals/project-level.tsx diff --git a/apps/web/ce/components/command-palette/modals/work-item-level.tsx b/apps/web/core/components/modals/work-item-level.tsx similarity index 99% rename from apps/web/ce/components/command-palette/modals/work-item-level.tsx rename to apps/web/core/components/modals/work-item-level.tsx index fc83af463a3..bf6bd4e0612 100644 --- a/apps/web/ce/components/command-palette/modals/work-item-level.tsx +++ b/apps/web/core/components/modals/work-item-level.tsx @@ -54,6 +54,7 @@ export const WorkItemLevelModals = observer(function WorkItemLevelModals(props: const { fetchSubIssues: fetchSubWorkItems } = useIssueDetail(); const { fetchSubIssues: fetchEpicSubWorkItems } = useIssueDetail(EIssueServiceType.EPICS); + // oxlint-disable-next-line no-shadow const handleDeleteIssue = async (workspaceSlug: string, projectId: string, issueId: string) => { try { const isEpic = workItemDetails?.is_epic; diff --git a/apps/web/ce/components/command-palette/modals/workspace-level.tsx b/apps/web/core/components/modals/workspace-level.tsx similarity index 100% rename from apps/web/ce/components/command-palette/modals/workspace-level.tsx rename to apps/web/core/components/modals/workspace-level.tsx diff --git a/apps/web/core/components/power-k/projects-app-provider.tsx b/apps/web/core/components/power-k/projects-app-provider.tsx index 624bb708fcb..897c1545f7b 100644 --- a/apps/web/core/components/power-k/projects-app-provider.tsx +++ b/apps/web/core/components/power-k/projects-app-provider.tsx @@ -13,9 +13,9 @@ import { usePowerK } from "@/hooks/store/use-power-k"; import { useUser } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { ProjectLevelModals } from "@/plane-web/components/command-palette/modals/project-level"; -import { WorkItemLevelModals } from "@/plane-web/components/command-palette/modals/work-item-level"; -import { WorkspaceLevelModals } from "@/plane-web/components/command-palette/modals/workspace-level"; +import { ProjectLevelModals } from "@/components/modals/project-level"; +import { WorkItemLevelModals } from "@/components/modals/work-item-level"; +import { WorkspaceLevelModals } from "@/components/modals/workspace-level"; // local imports import { useProjectsAppPowerKCommands } from "./config/commands"; import type { TPowerKCommandConfig, TPowerKContext } from "./core/types"; From fa572acd35e753f0da79a6ffb1f5057c773a58fa Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 12:29:39 +0530 Subject: [PATCH 04/42] refactor: replace WorkspaceActiveCyclesRoot with WorkspaceActiveCyclesUpgrade and remove obsolete components --- .../(projects)/active-cycles/page.tsx | 6 +++--- apps/web/ce/components/active-cycles/index.ts | 7 ------- apps/web/ce/components/active-cycles/root.tsx | 12 ------------ .../workspace-active-cycles-upgrade.tsx | 0 4 files changed, 3 insertions(+), 22 deletions(-) delete mode 100644 apps/web/ce/components/active-cycles/index.ts delete mode 100644 apps/web/ce/components/active-cycles/root.tsx rename apps/web/{ce => core}/components/active-cycles/workspace-active-cycles-upgrade.tsx (100%) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx index 222fa03c99e..12e3afe53ca 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx @@ -9,8 +9,8 @@ import { observer } from "mobx-react"; import { PageHead } from "@/components/core/page-title"; // hooks import { useWorkspace } from "@/hooks/store/use-workspace"; -// plane web components -import { WorkspaceActiveCyclesRoot } from "@/plane-web/components/active-cycles"; +// local imports +import { WorkspaceActiveCyclesUpgrade } from "@/components/active-cycles/workspace-active-cycles-upgrade"; function WorkspaceActiveCyclesPage() { const { currentWorkspace } = useWorkspace(); @@ -20,7 +20,7 @@ function WorkspaceActiveCyclesPage() { return ( <> - + ); } diff --git a/apps/web/ce/components/active-cycles/index.ts b/apps/web/ce/components/active-cycles/index.ts deleted file mode 100644 index d980334597b..00000000000 --- a/apps/web/ce/components/active-cycles/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./root"; diff --git a/apps/web/ce/components/active-cycles/root.tsx b/apps/web/ce/components/active-cycles/root.tsx deleted file mode 100644 index 81805656b30..00000000000 --- a/apps/web/ce/components/active-cycles/root.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -// local imports -import { WorkspaceActiveCyclesUpgrade } from "./workspace-active-cycles-upgrade"; - -export function WorkspaceActiveCyclesRoot() { - return ; -} diff --git a/apps/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx similarity index 100% rename from apps/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx rename to apps/web/core/components/active-cycles/workspace-active-cycles-upgrade.tsx From 2e282f4f2b55af7b6716b4b2be90bdff2039c8f3 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 12:45:10 +0530 Subject: [PATCH 05/42] refactor: migrate app-rail HOC to core components and remove obsolete index file --- apps/web/ce/components/app-rail/index.ts | 7 ------- .../components/navigation}/app-rail-hoc.tsx | 0 apps/web/core/components/navigation/items-root.tsx | 2 +- 3 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 apps/web/ce/components/app-rail/index.ts rename apps/web/{ce/components/app-rail => core/components/navigation}/app-rail-hoc.tsx (100%) diff --git a/apps/web/ce/components/app-rail/index.ts b/apps/web/ce/components/app-rail/index.ts deleted file mode 100644 index 8b6ba42a4ce..00000000000 --- a/apps/web/ce/components/app-rail/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./app-rail-hoc"; diff --git a/apps/web/ce/components/app-rail/app-rail-hoc.tsx b/apps/web/core/components/navigation/app-rail-hoc.tsx similarity index 100% rename from apps/web/ce/components/app-rail/app-rail-hoc.tsx rename to apps/web/core/components/navigation/app-rail-hoc.tsx diff --git a/apps/web/core/components/navigation/items-root.tsx b/apps/web/core/components/navigation/items-root.tsx index 5ba8e1e33fd..2f67a1f2818 100644 --- a/apps/web/core/components/navigation/items-root.tsx +++ b/apps/web/core/components/navigation/items-root.tsx @@ -9,7 +9,7 @@ import React from "react"; import type { AppSidebarItemData } from "@/components/sidebar/sidebar-item"; import { AppSidebarItem } from "@/components/sidebar/sidebar-item"; -import { withDockItems } from "@/plane-web/components/app-rail/app-rail-hoc"; +import { withDockItems } from "./app-rail-hoc"; type Props = { dockItems: (AppSidebarItemData & { shouldRender: boolean })[]; From 625c26c10c4656800bf8381a358434aa20a419e1 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 13:01:11 +0530 Subject: [PATCH 06/42] refactor: remove unused automation components and simplify layout structure --- .../projects/[projectId]/automations/layout.tsx | 13 ++----------- .../projects/[projectId]/automations/page.tsx | 3 --- .../ce/components/automations/list/wrapper.tsx | 15 --------------- apps/web/ce/components/automations/root.tsx | 16 ---------------- 4 files changed, 2 insertions(+), 45 deletions(-) delete mode 100644 apps/web/ce/components/automations/list/wrapper.tsx delete mode 100644 apps/web/ce/components/automations/root.tsx diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/layout.tsx index a4d766c5391..d2be455ea27 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/layout.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/layout.tsx @@ -6,18 +6,9 @@ import { observer } from "mobx-react"; import { Outlet } from "react-router"; -// plane web imports -import { AutomationsListWrapper } from "@/plane-web/components/automations/list/wrapper"; -import type { Route } from "./+types/layout"; -function AutomationsListLayout({ params }: Route.ComponentProps) { - const { projectId, workspaceSlug } = params; - - return ( - - - - ); +function AutomationsListLayout() { + return ; } export default observer(AutomationsListLayout); diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx index b591e91b1a7..3a8b98631c8 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx @@ -18,8 +18,6 @@ import { SettingsHeading } from "@/components/settings/heading"; // hooks import { useProject } from "@/hooks/store/use-project"; import { useUserPermissions } from "@/hooks/store/user"; -// plane web imports -import { CustomAutomationsRoot } from "@/plane-web/components/automations/root"; // local imports import type { Route } from "./+types/page"; import { AutomationsProjectSettingsHeader } from "./header"; @@ -70,7 +68,6 @@ function AutomationSettingsPage({ params }: Route.ComponentProps) {
- ); } diff --git a/apps/web/ce/components/automations/list/wrapper.tsx b/apps/web/ce/components/automations/list/wrapper.tsx deleted file mode 100644 index f884b403fde..00000000000 --- a/apps/web/ce/components/automations/list/wrapper.tsx +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -type Props = { - projectId: string; - workspaceSlug: string; - children: React.ReactNode; -}; - -export function AutomationsListWrapper(props: Props) { - return <>{props.children}; -} diff --git a/apps/web/ce/components/automations/root.tsx b/apps/web/ce/components/automations/root.tsx deleted file mode 100644 index 1baeeb8b0b2..00000000000 --- a/apps/web/ce/components/automations/root.tsx +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import React from "react"; - -export type TCustomAutomationsRootProps = { - projectId: string; - workspaceSlug: string; -}; - -export function CustomAutomationsRoot(_props: TCustomAutomationsRootProps) { - return <>; -} From b18639e2cb79238b81707c61b8b16dce6839325f Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 13:33:46 +0530 Subject: [PATCH 07/42] refactor: update import paths for CommonProjectBreadcrumbs and add new breadcrumb components --- .../(projects)/browse/[workItem]/work-item-header.tsx | 2 +- .../projects/(detail)/[projectId]/archives/header.tsx | 2 +- .../(detail)/[projectId]/archives/issues/(detail)/header.tsx | 2 +- .../projects/(detail)/[projectId]/cycles/(detail)/header.tsx | 4 ++-- .../projects/(detail)/[projectId]/cycles/(list)/header.tsx | 2 +- .../projects/(detail)/[projectId]/modules/(detail)/header.tsx | 4 ++-- .../projects/(detail)/[projectId]/modules/(list)/header.tsx | 2 +- .../projects/(detail)/[projectId]/pages/(detail)/header.tsx | 2 +- .../projects/(detail)/[projectId]/pages/(list)/header.tsx | 3 ++- .../(detail)/[projectId]/views/(detail)/[viewId]/header.tsx | 2 +- .../projects/(detail)/[projectId]/views/(list)/header.tsx | 2 +- apps/web/ce/components/issues/header.tsx | 2 +- apps/web/ce/components/projects/settings/intake/header.tsx | 2 +- apps/web/{ce => core}/components/breadcrumbs/common.tsx | 0 .../{ce => core}/components/breadcrumbs/project-feature.tsx | 3 +-- apps/web/{ce => core}/components/breadcrumbs/project.tsx | 2 ++ 16 files changed, 19 insertions(+), 17 deletions(-) rename apps/web/{ce => core}/components/breadcrumbs/common.tsx (100%) rename apps/web/{ce => core}/components/breadcrumbs/project-feature.tsx (95%) rename apps/web/{ce => core}/components/breadcrumbs/project.tsx (96%) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx index dd7978fe554..f8f18b1fc6f 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx @@ -18,7 +18,7 @@ import { useIssueDetail } from "@/hooks/store/use-issue-detail"; import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const WorkItemDetailsHeader = observer(function WorkItemDetailsHeader() { // router diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx index f7b5e90e596..c158c18998a 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx @@ -19,7 +19,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; type TProps = { activeTab: "issues" | "cycles" | "modules"; diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx index 4217bae906a..8fb15fe5acf 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx @@ -18,7 +18,7 @@ import { ISSUE_DETAILS } from "@plane/constants"; // hooks import { useProject } from "@/hooks/store/use-project"; // plane web -import { ProjectBreadcrumb } from "@/plane-web/components/breadcrumbs/project"; +import { ProjectBreadcrumb } from "@/components/breadcrumbs/project"; // services import { IssueService } from "@/services/issue"; 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 05f4cca2d0a..c4fe7bba45e 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 @@ -48,7 +48,7 @@ import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; import useLocalStorage from "@/hooks/use-local-storage"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const CycleIssuesHeader = observer(function CycleIssuesHeader() { // refs @@ -75,7 +75,7 @@ export const CycleIssuesHeader = observer(function CycleIssuesHeader() { const { setValue, storedValue } = useLocalStorage("cycle_sidebar_collapsed", false); - const isSidebarCollapsed = storedValue ? (storedValue === true ? true : false) : false; + const isSidebarCollapsed = storedValue === true; const toggleSidebar = () => { setValue(!isSidebarCollapsed); }; 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 62cac65eaf9..8f97d3ed9fd 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 @@ -21,7 +21,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const CyclesListHeader = observer(function CyclesListHeader() { // router 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 5524626e04d..297d69be5e1 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 @@ -47,7 +47,7 @@ import { useIssuesActions } from "@/hooks/use-issues-actions"; import useLocalStorage from "@/hooks/use-local-storage"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; import { IconButton } from "@plane/propel/icon-button"; export const ModuleIssuesHeader = observer(function ModuleIssuesHeader() { @@ -74,7 +74,7 @@ export const ModuleIssuesHeader = observer(function ModuleIssuesHeader() { // local storage const { setValue, storedValue } = useLocalStorage("module_sidebar_collapsed", "false"); // derived values - const isSidebarCollapsed = storedValue ? (storedValue === "true" ? true : false) : false; + const isSidebarCollapsed = storedValue ? storedValue === "true" : false; const activeLayout = issueFilters?.displayFilters?.layout; const moduleDetails = moduleId ? getModuleById(moduleId) : undefined; const canUserCreateIssue = allowPermissions( 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 67688828b7a..7e2f7dea742 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 @@ -22,7 +22,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const ModulesListHeader = observer(function ModulesListHeader() { // router diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx index 0d2b77e94d6..811badfd90b 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx @@ -21,7 +21,7 @@ import { PageSyncingBadge } from "@/components/pages/header/syncing-badge"; import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; import { PageDetailsHeaderExtraActions } from "@/plane-web/components/pages"; import { EPageStoreType, usePage, usePageStore } from "@/hooks/store"; 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 3ff73641616..a26a539dd64 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 @@ -21,7 +21,7 @@ import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; // hooks import { useProject } from "@/hooks/store/use-project"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; import { EPageStoreType, usePageStore } from "@/hooks/store"; export const PagesListHeader = observer(function PagesListHeader() { @@ -44,6 +44,7 @@ export const PagesListHeader = observer(function PagesListHeader() { }; await createPage(payload) + // oxlint-disable-next-line promise/always-return .then((res) => { const pageId = `/${workspaceSlug}/projects/${currentProjectDetails?.id}/pages/${res?.id}`; router.push(pageId); 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 3393257eeb0..7dfc3d15e1a 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 @@ -36,7 +36,7 @@ import { useProjectView } from "@/hooks/store/use-project-view"; import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const ProjectViewIssuesHeader = observer(function ProjectViewIssuesHeader() { // refs diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx index 4cf703cc928..2cc0c0b9ce8 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx @@ -18,7 +18,7 @@ import { ViewListHeader } from "@/components/views/view-list-header"; import { useCommandPalette } from "@/hooks/store/use-command-palette"; import { useProject } from "@/hooks/store/use-project"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const ProjectViewsHeader = observer(function ProjectViewsHeader() { const { workspaceSlug, projectId } = useParams(); diff --git a/apps/web/ce/components/issues/header.tsx b/apps/web/ce/components/issues/header.tsx index 4871217bb99..860611319e7 100644 --- a/apps/web/ce/components/issues/header.tsx +++ b/apps/web/ce/components/issues/header.tsx @@ -36,7 +36,7 @@ import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; export const IssuesHeader = observer(function IssuesHeader() { // router diff --git a/apps/web/ce/components/projects/settings/intake/header.tsx b/apps/web/ce/components/projects/settings/intake/header.tsx index c60466e41a8..f24e43d4c01 100644 --- a/apps/web/ce/components/projects/settings/intake/header.tsx +++ b/apps/web/ce/components/projects/settings/intake/header.tsx @@ -21,7 +21,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useProjectInbox } from "@/hooks/store/use-project-inbox"; import { useUserPermissions } from "@/hooks/store/user"; // plane web imports -import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common"; +import { CommonProjectBreadcrumbs } from "@/components/breadcrumbs/common"; import { IntakeIcon } from "@plane/propel/icons"; export const ProjectInboxHeader = observer(function ProjectInboxHeader() { diff --git a/apps/web/ce/components/breadcrumbs/common.tsx b/apps/web/core/components/breadcrumbs/common.tsx similarity index 100% rename from apps/web/ce/components/breadcrumbs/common.tsx rename to apps/web/core/components/breadcrumbs/common.tsx diff --git a/apps/web/ce/components/breadcrumbs/project-feature.tsx b/apps/web/core/components/breadcrumbs/project-feature.tsx similarity index 95% rename from apps/web/ce/components/breadcrumbs/project-feature.tsx rename to apps/web/core/components/breadcrumbs/project-feature.tsx index 4b076a7abd4..df093a99b11 100644 --- a/apps/web/ce/components/breadcrumbs/project-feature.tsx +++ b/apps/web/core/components/breadcrumbs/project-feature.tsx @@ -14,8 +14,7 @@ import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; import type { TNavigationItem } from "@/components/workspace/sidebar/project-navigation"; // hooks import { useProject } from "@/hooks/store/use-project"; -// local imports -import { getProjectFeatureNavigation } from "../projects/navigation/helper"; +import { getProjectFeatureNavigation } from "@/plane-web/components/projects/navigation/helper"; type TProjectFeatureBreadcrumbProps = { workspaceSlug: string; diff --git a/apps/web/ce/components/breadcrumbs/project.tsx b/apps/web/core/components/breadcrumbs/project.tsx similarity index 96% rename from apps/web/ce/components/breadcrumbs/project.tsx rename to apps/web/core/components/breadcrumbs/project.tsx index 0a43d91e341..b997ad5fac8 100644 --- a/apps/web/ce/components/breadcrumbs/project.tsx +++ b/apps/web/core/components/breadcrumbs/project.tsx @@ -36,6 +36,7 @@ export const ProjectBreadcrumb = observer(function ProjectBreadcrumb(props: TPro // derived values const switcherOptions = joinedProjectIds + // oxlint-disable-next-line no-shadow .map((projectId) => { const project = getPartialProjectById(projectId); return { @@ -54,6 +55,7 @@ export const ProjectBreadcrumb = observer(function ProjectBreadcrumb(props: TPro .filter((option) => option !== undefined) as ICustomSearchSelectOption[]; // helpers + // oxlint-disable-next-line unicorn/consistent-function-scoping const renderIcon = (projectDetails: TProject) => ( From d86a2abae58566f3b4df3d820421c3d55785c408 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 14:43:16 +0530 Subject: [PATCH 08/42] refactor: update import path for WorkItemDetailRoot and add new work item detail component --- .../(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx | 2 +- apps/web/{ce => core}/components/browse/workItem-detail.tsx | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename apps/web/{ce => core}/components/browse/workItem-detail.tsx (100%) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx index 427e43fc9d4..a644c40b6e6 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx @@ -28,7 +28,7 @@ import { useAppRouter } from "@/hooks/use-app-router"; import { ProjectAuthWrapper } from "@/layouts/auth-layout/project-wrapper"; // plane web imports import { useWorkItemProperties } from "@/hooks/use-issue-properties"; -import { WorkItemDetailRoot } from "@/plane-web/components/browse/workItem-detail"; +import { WorkItemDetailRoot } from "@/components/browse/workItem-detail"; import type { Route } from "./+types/page"; diff --git a/apps/web/ce/components/browse/workItem-detail.tsx b/apps/web/core/components/browse/workItem-detail.tsx similarity index 100% rename from apps/web/ce/components/browse/workItem-detail.tsx rename to apps/web/core/components/browse/workItem-detail.tsx From 38c1a977af8c6c0cbfb857f5eea2ea82cffa100a Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 14:51:30 +0530 Subject: [PATCH 09/42] refactor: remove obsolete comments index file and introduce CommentBlock component in core --- apps/web/ce/components/comments/index.ts | 8 -------- apps/web/core/components/comments/card/root.tsx | 4 ++-- .../{ce => core}/components/comments/comment-block.tsx | 0 3 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 apps/web/ce/components/comments/index.ts rename apps/web/{ce => core}/components/comments/comment-block.tsx (100%) diff --git a/apps/web/ce/components/comments/index.ts b/apps/web/ce/components/comments/index.ts deleted file mode 100644 index 3bbc477fb93..00000000000 --- a/apps/web/ce/components/comments/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./comment-block"; -export { CommentCardDisplay } from "@/components/comments/card/display"; diff --git a/apps/web/core/components/comments/card/root.tsx b/apps/web/core/components/comments/card/root.tsx index 006a365dd23..b7837c4c592 100644 --- a/apps/web/core/components/comments/card/root.tsx +++ b/apps/web/core/components/comments/card/root.tsx @@ -9,10 +9,10 @@ import { observer } from "mobx-react"; // plane imports import type { EditorRefApi } from "@plane/editor"; import type { TIssueComment, TCommentsOperations } from "@plane/types"; -// plane web imports -import { CommentBlock, CommentCardDisplay } from "@/plane-web/components/comments"; // local imports import { CommentQuickActions } from "../quick-actions"; +import { CommentBlock } from "../comment-block"; +import { CommentCardDisplay } from "./display"; type TCommentCard = { workspaceSlug: string; diff --git a/apps/web/ce/components/comments/comment-block.tsx b/apps/web/core/components/comments/comment-block.tsx similarity index 100% rename from apps/web/ce/components/comments/comment-block.tsx rename to apps/web/core/components/comments/comment-block.tsx From 5a91581f312e46dfd91cd04b1b98cc392bd15c5e Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 15:12:15 +0530 Subject: [PATCH 10/42] refactor: update import paths for common components and introduce new ExtendedAppHeader, GlobalModals, and SubscriptionPill components --- apps/web/app/(all)/[workspaceSlug]/layout.tsx | 2 +- .../web/{ce => core}/components/common/extended-app-header.tsx | 0 apps/web/{ce => core}/components/common/modal/global.tsx | 0 .../components/common/subscription/subscription-pill.tsx | 0 apps/web/core/components/core/app-header.tsx | 3 ++- apps/web/core/components/settings/workspace/sidebar/header.tsx | 2 +- apps/web/core/components/workspace/sidebar/dropdown-item.tsx | 2 +- 7 files changed, 5 insertions(+), 4 deletions(-) rename apps/web/{ce => core}/components/common/extended-app-header.tsx (100%) rename apps/web/{ce => core}/components/common/modal/global.tsx (100%) rename apps/web/{ce => core}/components/common/subscription/subscription-pill.tsx (100%) diff --git a/apps/web/app/(all)/[workspaceSlug]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/layout.tsx index f093efe76d7..b71f3e83313 100644 --- a/apps/web/app/(all)/[workspaceSlug]/layout.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/layout.tsx @@ -8,7 +8,7 @@ import { Outlet } from "react-router"; import { AuthenticationWrapper } from "@/lib/wrappers/authentication-wrapper"; import { WorkspaceContentWrapper } from "@/plane-web/components/workspace/content-wrapper"; import { AppRailVisibilityProvider } from "@/lib/app-rail"; -import { GlobalModals } from "@/plane-web/components/common/modal/global"; +import { GlobalModals } from "@/components/common/modal/global"; import { WorkspaceAuthWrapper } from "@/layouts/auth-layout/workspace-wrapper"; import type { Route } from "./+types/layout"; diff --git a/apps/web/ce/components/common/extended-app-header.tsx b/apps/web/core/components/common/extended-app-header.tsx similarity index 100% rename from apps/web/ce/components/common/extended-app-header.tsx rename to apps/web/core/components/common/extended-app-header.tsx diff --git a/apps/web/ce/components/common/modal/global.tsx b/apps/web/core/components/common/modal/global.tsx similarity index 100% rename from apps/web/ce/components/common/modal/global.tsx rename to apps/web/core/components/common/modal/global.tsx diff --git a/apps/web/ce/components/common/subscription/subscription-pill.tsx b/apps/web/core/components/common/subscription/subscription-pill.tsx similarity index 100% rename from apps/web/ce/components/common/subscription/subscription-pill.tsx rename to apps/web/core/components/common/subscription/subscription-pill.tsx diff --git a/apps/web/core/components/core/app-header.tsx b/apps/web/core/components/core/app-header.tsx index 4ea58e36968..13d13712054 100644 --- a/apps/web/core/components/core/app-header.tsx +++ b/apps/web/core/components/core/app-header.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { Row } from "@plane/ui"; // components import { cn } from "@plane/utils"; -import { ExtendedAppHeader } from "@/plane-web/components/common/extended-app-header"; +import { ExtendedAppHeader } from "@/components/common/extended-app-header"; export interface AppHeaderProps { header: ReactNode; @@ -27,6 +27,7 @@ export const AppHeader = observer(function AppHeader(props: AppHeaderProps) { + {/* eslint-disable-next-line oxc/const-comparisons */} {mobileHeader && mobileHeader}
); diff --git a/apps/web/core/components/settings/workspace/sidebar/header.tsx b/apps/web/core/components/settings/workspace/sidebar/header.tsx index 48b13a1ff2c..2e1e010a732 100644 --- a/apps/web/core/components/settings/workspace/sidebar/header.tsx +++ b/apps/web/core/components/settings/workspace/sidebar/header.tsx @@ -17,7 +17,7 @@ import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; import { useWorkspace } from "@/hooks/store/use-workspace"; // plane web imports -import { SubscriptionPill } from "@/plane-web/components/common/subscription/subscription-pill"; +import { SubscriptionPill } from "@/components/common/subscription/subscription-pill"; export const WorkspaceSettingsSidebarHeader = observer(function WorkspaceSettingsSidebarHeader() { // router diff --git a/apps/web/core/components/workspace/sidebar/dropdown-item.tsx b/apps/web/core/components/workspace/sidebar/dropdown-item.tsx index 3a280bd6add..137eeb85c77 100644 --- a/apps/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/apps/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -16,7 +16,7 @@ import { CheckIcon } from "@plane/propel/icons"; import type { IWorkspace } from "@plane/types"; import { cn, getFileURL, getUserRole } from "@plane/utils"; // plane web imports -import { SubscriptionPill } from "@/plane-web/components/common/subscription/subscription-pill"; +import { SubscriptionPill } from "@/components/common/subscription/subscription-pill"; type TProps = { workspace: IWorkspace; From 613717a7737bdacf69dcde6866064a31635216f8 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 15:22:29 +0530 Subject: [PATCH 11/42] refactor: remove obsolete index file and add MaintenanceMessage and InboxSourcePill components --- apps/web/ce/components/instance/index.ts | 7 ------- apps/web/core/components/inbox/sidebar/inbox-list-item.tsx | 2 +- apps/web/{ce => core}/components/inbox/source-pill.tsx | 0 .../components/instance/maintenance-message.tsx | 0 apps/web/core/components/instance/maintenance-view.tsx | 2 +- 5 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 apps/web/ce/components/instance/index.ts rename apps/web/{ce => core}/components/inbox/source-pill.tsx (100%) rename apps/web/{ce => core}/components/instance/maintenance-message.tsx (100%) diff --git a/apps/web/ce/components/instance/index.ts b/apps/web/ce/components/instance/index.ts deleted file mode 100644 index 78624d0ec59..00000000000 --- a/apps/web/ce/components/instance/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./maintenance-message"; diff --git a/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx b/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx index db8d4240f9f..63df5704589 100644 --- a/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx +++ b/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx @@ -21,7 +21,7 @@ import { useMember } from "@/hooks/store/use-member"; import { useProjectInbox } from "@/hooks/store/use-project-inbox"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports -import { InboxSourcePill } from "@/plane-web/components/inbox/source-pill"; +import { InboxSourcePill } from "@/components/inbox/source-pill"; // local imports import { InboxIssueStatus } from "../inbox-issue-status"; diff --git a/apps/web/ce/components/inbox/source-pill.tsx b/apps/web/core/components/inbox/source-pill.tsx similarity index 100% rename from apps/web/ce/components/inbox/source-pill.tsx rename to apps/web/core/components/inbox/source-pill.tsx diff --git a/apps/web/ce/components/instance/maintenance-message.tsx b/apps/web/core/components/instance/maintenance-message.tsx similarity index 100% rename from apps/web/ce/components/instance/maintenance-message.tsx rename to apps/web/core/components/instance/maintenance-message.tsx diff --git a/apps/web/core/components/instance/maintenance-view.tsx b/apps/web/core/components/instance/maintenance-view.tsx index eaa3bba4f9b..05203dcfd3f 100644 --- a/apps/web/core/components/instance/maintenance-view.tsx +++ b/apps/web/core/components/instance/maintenance-view.tsx @@ -11,7 +11,7 @@ import maintenanceModeLightModeImage from "@/app/assets/instance/maintenance-mod // layouts import DefaultLayout from "@/layouts/default-layout"; // components -import { MaintenanceMessage } from "@/plane-web/components/instance"; +import { MaintenanceMessage } from "./maintenance-message"; export function MaintenanceView() { // hooks From 1fce8add7b19fb9354b08522090b1e270347084d Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 16:42:03 +0530 Subject: [PATCH 12/42] refactor: remove obsolete cycle components and introduce new cycle-related components in core --- apps/web/ce/components/cycles/active-cycle/index.ts | 7 ------- .../ce/components/cycles/analytics-sidebar/index.ts | 7 ------- apps/web/ce/components/cycles/index.ts | 10 ---------- .../components/cycles/active-cycle/root.tsx | 0 .../components/cycles/additional-actions.tsx | 0 .../cycles/analytics-sidebar/issue-progress.tsx | 4 ++-- .../cycles/analytics-sidebar/sidebar-chart-root.tsx} | 2 +- .../cycles/analytics-sidebar/sidebar-chart.tsx} | 0 .../{ce => core}/components/cycles/end-cycle/index.ts | 0 .../{ce => core}/components/cycles/end-cycle/modal.tsx | 0 .../components/cycles/list/cycle-list-item-action.tsx | 5 +++-- apps/web/core/components/cycles/list/root.tsx | 2 +- 12 files changed, 7 insertions(+), 30 deletions(-) delete mode 100644 apps/web/ce/components/cycles/active-cycle/index.ts delete mode 100644 apps/web/ce/components/cycles/analytics-sidebar/index.ts delete mode 100644 apps/web/ce/components/cycles/index.ts rename apps/web/{ce => core}/components/cycles/active-cycle/root.tsx (100%) rename apps/web/{ce => core}/components/cycles/additional-actions.tsx (100%) rename apps/web/{ce/components/cycles/analytics-sidebar/root.tsx => core/components/cycles/analytics-sidebar/sidebar-chart-root.tsx} (88%) rename apps/web/{ce/components/cycles/analytics-sidebar/base.tsx => core/components/cycles/analytics-sidebar/sidebar-chart.tsx} (100%) rename apps/web/{ce => core}/components/cycles/end-cycle/index.ts (100%) rename apps/web/{ce => core}/components/cycles/end-cycle/modal.tsx (100%) diff --git a/apps/web/ce/components/cycles/active-cycle/index.ts b/apps/web/ce/components/cycles/active-cycle/index.ts deleted file mode 100644 index d980334597b..00000000000 --- a/apps/web/ce/components/cycles/active-cycle/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./root"; diff --git a/apps/web/ce/components/cycles/analytics-sidebar/index.ts b/apps/web/ce/components/cycles/analytics-sidebar/index.ts deleted file mode 100644 index d980334597b..00000000000 --- a/apps/web/ce/components/cycles/analytics-sidebar/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./root"; diff --git a/apps/web/ce/components/cycles/index.ts b/apps/web/ce/components/cycles/index.ts deleted file mode 100644 index defcd502a93..00000000000 --- a/apps/web/ce/components/cycles/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./active-cycle"; -export * from "./analytics-sidebar"; -export * from "./additional-actions"; -export * from "./end-cycle"; diff --git a/apps/web/ce/components/cycles/active-cycle/root.tsx b/apps/web/core/components/cycles/active-cycle/root.tsx similarity index 100% rename from apps/web/ce/components/cycles/active-cycle/root.tsx rename to apps/web/core/components/cycles/active-cycle/root.tsx diff --git a/apps/web/ce/components/cycles/additional-actions.tsx b/apps/web/core/components/cycles/additional-actions.tsx similarity index 100% rename from apps/web/ce/components/cycles/additional-actions.tsx rename to apps/web/core/components/cycles/additional-actions.tsx diff --git a/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx index 738856d20ea..5d2806154ea 100644 --- a/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx @@ -19,9 +19,9 @@ import { getDate } from "@plane/utils"; import { useCycle } from "@/hooks/store/use-cycle"; // plane web components import { useWorkItemFilters } from "@/hooks/store/work-item-filters/use-work-item-filters"; -import { SidebarChartRoot } from "@/plane-web/components/cycles"; // local imports import { CycleProgressStats } from "./progress-stats"; +import { SidebarChart } from "./sidebar-chart"; type TCycleAnalyticsProgress = { workspaceSlug: string; @@ -131,7 +131,7 @@ export const CycleAnalyticsProgress = observer(function CycleAnalyticsProgress(p {cycleStartDate && cycleEndDate ? ( <> {isCycleDateValid && ( - + )} {/* progress detailed view */} {chartDistributionData && ( diff --git a/apps/web/ce/components/cycles/analytics-sidebar/root.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart-root.tsx similarity index 88% rename from apps/web/ce/components/cycles/analytics-sidebar/root.tsx rename to apps/web/core/components/cycles/analytics-sidebar/sidebar-chart-root.tsx index 17501e01d8a..0ddb13bd9a5 100644 --- a/apps/web/ce/components/cycles/analytics-sidebar/root.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart-root.tsx @@ -6,7 +6,7 @@ import React from "react"; // components -import { SidebarChart } from "./base"; +import { SidebarChart } from "./sidebar-chart"; type Props = { workspaceSlug: string; diff --git a/apps/web/ce/components/cycles/analytics-sidebar/base.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx similarity index 100% rename from apps/web/ce/components/cycles/analytics-sidebar/base.tsx rename to apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx diff --git a/apps/web/ce/components/cycles/end-cycle/index.ts b/apps/web/core/components/cycles/end-cycle/index.ts similarity index 100% rename from apps/web/ce/components/cycles/end-cycle/index.ts rename to apps/web/core/components/cycles/end-cycle/index.ts diff --git a/apps/web/ce/components/cycles/end-cycle/modal.tsx b/apps/web/core/components/cycles/end-cycle/modal.tsx similarity index 100% rename from apps/web/ce/components/cycles/end-cycle/modal.tsx rename to apps/web/core/components/cycles/end-cycle/modal.tsx diff --git a/apps/web/core/components/cycles/list/cycle-list-item-action.tsx b/apps/web/core/components/cycles/list/cycle-list-item-action.tsx index adade682f75..65f3b5e94a4 100644 --- a/apps/web/core/components/cycles/list/cycle-list-item-action.tsx +++ b/apps/web/core/components/cycles/list/cycle-list-item-action.tsx @@ -31,11 +31,10 @@ import { useUserPermissions } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; import { usePlatformOS } from "@/hooks/use-platform-os"; import { useTimeZoneConverter } from "@/hooks/use-timezone-converter"; -// plane web components -import { CycleAdditionalActions } from "@/plane-web/components/cycles"; // local imports import { CycleQuickActions } from "../quick-actions"; import { TransferIssuesModal } from "../transfer-issues-modal"; +import { CycleAdditionalActions } from "../additional-actions"; type Props = { workspaceSlug: string; @@ -109,6 +108,7 @@ export const CycleListItemAction = observer(function CycleListItemAction(props: if (!workspaceSlug || !projectId) return; const addToFavoritePromise = addCycleToFavorites(workspaceSlug?.toString(), projectId.toString(), cycleId).then( + // oxlint-disable-next-line promise/always-return () => { if (!isFavoriteMenuOpen) toggleFavoriteMenu(true); } @@ -194,6 +194,7 @@ export const CycleListItemAction = observer(function CycleListItemAction(props: )} {showTransferIssues && ( + // oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
{ diff --git a/apps/web/core/components/cycles/list/root.tsx b/apps/web/core/components/cycles/list/root.tsx index 07351decfbb..6831f616e90 100644 --- a/apps/web/core/components/cycles/list/root.tsx +++ b/apps/web/core/components/cycles/list/root.tsx @@ -11,11 +11,11 @@ import { Disclosure } from "@headlessui/react"; import { useTranslation } from "@plane/i18n"; import { ContentWrapper, ERowVariant } from "@plane/ui"; import { ListLayout } from "@/components/core/list"; -import { ActiveCycleRoot } from "@/plane-web/components/cycles"; // local imports import { CyclePeekOverview } from "../cycle-peek-overview"; import { CycleListGroupHeader } from "./cycle-list-group-header"; import { CyclesListMap } from "./cycles-list-map"; +import { ActiveCycleRoot } from "../active-cycle/root"; export interface ICyclesList { completedCycleIds: string[]; From 58c71854fac4cdcab88881edaa2c8d003a5bc220 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 17:24:42 +0530 Subject: [PATCH 13/42] refac: moved de-dupe directory to core --- .../{ce => core}/components/de-dupe/de-dupe-button.tsx | 0 .../components/de-dupe/duplicate-modal/index.ts | 0 .../components/de-dupe/duplicate-modal/root.tsx | 0 .../components/de-dupe/duplicate-popover/index.ts | 0 .../components/de-dupe/duplicate-popover/root.tsx | 1 + .../components/de-dupe/issue-block/button-label.tsx | 0 apps/web/core/components/inbox/content/issue-root.tsx | 4 +++- .../components/inbox/modals/create-modal/create-root.tsx | 7 +++++-- .../core/components/issues/issue-detail/main-content.tsx | 3 ++- apps/web/core/components/issues/issue-modal/form.tsx | 8 ++++++-- .../core/components/issues/peek-overview/issue-detail.tsx | 3 ++- 11 files changed, 19 insertions(+), 7 deletions(-) rename apps/web/{ce => core}/components/de-dupe/de-dupe-button.tsx (100%) rename apps/web/{ce => core}/components/de-dupe/duplicate-modal/index.ts (100%) rename apps/web/{ce => core}/components/de-dupe/duplicate-modal/root.tsx (100%) rename apps/web/{ce => core}/components/de-dupe/duplicate-popover/index.ts (100%) rename apps/web/{ce => core}/components/de-dupe/duplicate-popover/root.tsx (94%) rename apps/web/{ce => core}/components/de-dupe/issue-block/button-label.tsx (100%) diff --git a/apps/web/ce/components/de-dupe/de-dupe-button.tsx b/apps/web/core/components/de-dupe/de-dupe-button.tsx similarity index 100% rename from apps/web/ce/components/de-dupe/de-dupe-button.tsx rename to apps/web/core/components/de-dupe/de-dupe-button.tsx diff --git a/apps/web/ce/components/de-dupe/duplicate-modal/index.ts b/apps/web/core/components/de-dupe/duplicate-modal/index.ts similarity index 100% rename from apps/web/ce/components/de-dupe/duplicate-modal/index.ts rename to apps/web/core/components/de-dupe/duplicate-modal/index.ts diff --git a/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx b/apps/web/core/components/de-dupe/duplicate-modal/root.tsx similarity index 100% rename from apps/web/ce/components/de-dupe/duplicate-modal/root.tsx rename to apps/web/core/components/de-dupe/duplicate-modal/root.tsx diff --git a/apps/web/ce/components/de-dupe/duplicate-popover/index.ts b/apps/web/core/components/de-dupe/duplicate-popover/index.ts similarity index 100% rename from apps/web/ce/components/de-dupe/duplicate-popover/index.ts rename to apps/web/core/components/de-dupe/duplicate-popover/index.ts diff --git a/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx b/apps/web/core/components/de-dupe/duplicate-popover/root.tsx similarity index 94% rename from apps/web/ce/components/de-dupe/duplicate-popover/root.tsx rename to apps/web/core/components/de-dupe/duplicate-popover/root.tsx index 146d6b4bc88..343ab888445 100644 --- a/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx +++ b/apps/web/core/components/de-dupe/duplicate-popover/root.tsx @@ -22,6 +22,7 @@ type TDeDupeIssuePopoverRootProps = { }; export const DeDupeIssuePopoverRoot = observer(function DeDupeIssuePopoverRoot(props: TDeDupeIssuePopoverRootProps) { + // oxlint-disable-next-line no-empty-pattern const {} = props; return <>; }); diff --git a/apps/web/ce/components/de-dupe/issue-block/button-label.tsx b/apps/web/core/components/de-dupe/issue-block/button-label.tsx similarity index 100% rename from apps/web/ce/components/de-dupe/issue-block/button-label.tsx rename to apps/web/core/components/de-dupe/issue-block/button-label.tsx diff --git a/apps/web/core/components/inbox/content/issue-root.tsx b/apps/web/core/components/inbox/content/issue-root.tsx index e4c40103965..c093c5eeb17 100644 --- a/apps/web/core/components/inbox/content/issue-root.tsx +++ b/apps/web/core/components/inbox/content/issue-root.tsx @@ -30,7 +30,7 @@ import { useProjectInbox } from "@/hooks/store/use-project-inbox"; import { useUser } from "@/hooks/store/user"; import useReloadConfirmations from "@/hooks/use-reload-confirmation"; // store types -import { DeDupeIssuePopoverRoot } from "@/plane-web/components/de-dupe/duplicate-popover"; +import { DeDupeIssuePopoverRoot } from "@/components/de-dupe/duplicate-popover"; import { useDebouncedDuplicateIssues } from "@/hooks/use-debounced-duplicate-issues"; // services import { IntakeWorkItemVersionService } from "@/services/inbox"; @@ -125,6 +125,7 @@ export const InboxIssueMainContent = observer(function InboxIssueMainContent(pro }); } }, + // oxlint-disable-next-line no-shadow archive: async (workspaceSlug: string, projectId: string, issueId: string) => { try { await archiveIssue(workspaceSlug, projectId, issueId); @@ -133,6 +134,7 @@ export const InboxIssueMainContent = observer(function InboxIssueMainContent(pro } }, }), + // oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps [inboxIssue] ); diff --git a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx index 32963204dd0..af479bf56bd 100644 --- a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx @@ -1,3 +1,5 @@ +// oxlint-disable jsx_a11y/prefer-tag-over-role +// oxlint-disable jsx_a11y/click-events-have-key-events /** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only @@ -24,8 +26,8 @@ import { useAppRouter } from "@/hooks/use-app-router"; import useKeypress from "@/hooks/use-keypress"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web imports -import { DeDupeButtonRoot } from "@/plane-web/components/de-dupe/de-dupe-button"; -import { DuplicateModalRoot } from "@/plane-web/components/de-dupe/duplicate-modal"; +import { DeDupeButtonRoot } from "@/components/de-dupe/de-dupe-button"; +import { DuplicateModalRoot } from "@/components/de-dupe/duplicate-modal"; import { useDebouncedDuplicateIssues } from "@/hooks/use-debounced-duplicate-issues"; // services import { FileService } from "@/services/file.service"; @@ -160,6 +162,7 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props setFormSubmitting(true); await createInboxIssue(workspaceSlug, projectId, payload) + // oxlint-disable-next-line promise/always-return .then(async (res) => { if (uploadedAssetIds.length > 0) { await fileService.updateBulkProjectAssetsUploadStatus(workspaceSlug, projectId, res?.issue.id ?? "", { diff --git a/apps/web/core/components/issues/issue-detail/main-content.tsx b/apps/web/core/components/issues/issue-detail/main-content.tsx index 34140963ae0..6d49eae8d2d 100644 --- a/apps/web/core/components/issues/issue-detail/main-content.tsx +++ b/apps/web/core/components/issues/issue-detail/main-content.tsx @@ -1,3 +1,4 @@ +// oxlint-disable no-shadow /** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only @@ -22,7 +23,7 @@ import { useUser } from "@/hooks/store/user"; import useReloadConfirmations from "@/hooks/use-reload-confirmation"; import useSize from "@/hooks/use-window-size"; // plane web components -import { DeDupeIssuePopoverRoot } from "@/plane-web/components/de-dupe/duplicate-popover"; +import { DeDupeIssuePopoverRoot } from "@/components/de-dupe/duplicate-popover"; import { IssueTypeSwitcher } from "@/plane-web/components/issues/issue-details/issue-type-switcher"; import { useDebouncedDuplicateIssues } from "@/hooks/use-debounced-duplicate-issues"; // services diff --git a/apps/web/core/components/issues/issue-modal/form.tsx b/apps/web/core/components/issues/issue-modal/form.tsx index 53aded43871..56808587308 100644 --- a/apps/web/core/components/issues/issue-modal/form.tsx +++ b/apps/web/core/components/issues/issue-modal/form.tsx @@ -1,3 +1,6 @@ +// oxlint-disable promise/always-return +// oxlint-disable no-shadow +// oxlint-disable jsx_a11y/prefer-tag-over-role /** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only @@ -44,8 +47,8 @@ import { useWorkspaceDraftIssues } from "@/hooks/store/workspace-draft"; import { usePlatformOS } from "@/hooks/use-platform-os"; import { useProjectIssueProperties } from "@/hooks/use-project-issue-properties"; // plane web imports -import { DeDupeButtonRoot } from "@/plane-web/components/de-dupe/de-dupe-button"; -import { DuplicateModalRoot } from "@/plane-web/components/de-dupe/duplicate-modal"; +import { DeDupeButtonRoot } from "@/components/de-dupe/de-dupe-button"; +import { DuplicateModalRoot } from "@/components/de-dupe/duplicate-modal"; import { IssueTypeSelect, WorkItemTemplateSelect } from "@/plane-web/components/issues/issue-modal"; import { WorkItemModalAdditionalProperties } from "@/plane-web/components/issues/issue-modal/modal-additional-properties"; import { useDebouncedDuplicateIssues } from "@/hooks/use-debounced-duplicate-issues"; @@ -342,6 +345,7 @@ export const IssueFormRoot = observer(function IssueFormRoot(props: IssueFormPro setSelectedParentIssue( convertWorkItemDataToSearchResponse(workspaceSlug?.toString(), issue, projectDetails, stateDetails) ); + // oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps }, [watch, getIssueById, getProjectById, selectedParentIssue, getStateById]); // executing this useEffect when isDirty changes diff --git a/apps/web/core/components/issues/peek-overview/issue-detail.tsx b/apps/web/core/components/issues/peek-overview/issue-detail.tsx index 96054b02fc5..cd4b30a622e 100644 --- a/apps/web/core/components/issues/peek-overview/issue-detail.tsx +++ b/apps/web/core/components/issues/peek-overview/issue-detail.tsx @@ -1,3 +1,4 @@ +// oxlint-disable no-shadow /** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only @@ -22,7 +23,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useUser } from "@/hooks/store/user"; import useReloadConfirmations from "@/hooks/use-reload-confirmation"; // plane web components -import { DeDupeIssuePopoverRoot } from "@/plane-web/components/de-dupe/duplicate-popover"; +import { DeDupeIssuePopoverRoot } from "@/components/de-dupe/duplicate-popover"; import { IssueTypeSwitcher } from "@/plane-web/components/issues/issue-details/issue-type-switcher"; // plane web hooks import { useDebouncedDuplicateIssues } from "@/hooks/use-debounced-duplicate-issues"; From b2ec91c98974cd3adb7cef21a8639fd572d216b2 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 17:39:21 +0530 Subject: [PATCH 14/42] refactor: add new desktop components and update import paths for sidebar functionality --- apps/web/{ce => core}/components/desktop/helper.ts | 0 apps/web/{ce => core}/components/desktop/index.ts | 0 .../{ce => core}/components/desktop/sidebar-workspace-menu.tsx | 0 apps/web/core/components/navigation/app-rail-root.tsx | 2 +- apps/web/core/components/sidebar/sidebar-toggle-button.tsx | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) rename apps/web/{ce => core}/components/desktop/helper.ts (100%) rename apps/web/{ce => core}/components/desktop/index.ts (100%) rename apps/web/{ce => core}/components/desktop/sidebar-workspace-menu.tsx (100%) diff --git a/apps/web/ce/components/desktop/helper.ts b/apps/web/core/components/desktop/helper.ts similarity index 100% rename from apps/web/ce/components/desktop/helper.ts rename to apps/web/core/components/desktop/helper.ts diff --git a/apps/web/ce/components/desktop/index.ts b/apps/web/core/components/desktop/index.ts similarity index 100% rename from apps/web/ce/components/desktop/index.ts rename to apps/web/core/components/desktop/index.ts diff --git a/apps/web/ce/components/desktop/sidebar-workspace-menu.tsx b/apps/web/core/components/desktop/sidebar-workspace-menu.tsx similarity index 100% rename from apps/web/ce/components/desktop/sidebar-workspace-menu.tsx rename to apps/web/core/components/desktop/sidebar-workspace-menu.tsx diff --git a/apps/web/core/components/navigation/app-rail-root.tsx b/apps/web/core/components/navigation/app-rail-root.tsx index 009e45e031b..5821adb7aee 100644 --- a/apps/web/core/components/navigation/app-rail-root.tsx +++ b/apps/web/core/components/navigation/app-rail-root.tsx @@ -17,7 +17,7 @@ import { AppSidebarItem } from "@/components/sidebar/sidebar-item"; import { useAppRailPreferences } from "@/hooks/use-navigation-preferences"; import { useAppRailVisibility } from "@/lib/app-rail/context"; // plane web imports -import { DesktopSidebarWorkspaceMenu } from "@/plane-web/components/desktop"; +import { DesktopSidebarWorkspaceMenu } from "@/components/desktop"; // local imports import { AppSidebarItemsRoot } from "./items-root"; diff --git a/apps/web/core/components/sidebar/sidebar-toggle-button.tsx b/apps/web/core/components/sidebar/sidebar-toggle-button.tsx index 65452d5488e..958682fa1fc 100644 --- a/apps/web/core/components/sidebar/sidebar-toggle-button.tsx +++ b/apps/web/core/components/sidebar/sidebar-toggle-button.tsx @@ -8,7 +8,7 @@ import { observer } from "mobx-react"; import { PanelLeft } from "lucide-react"; // hooks import { useAppTheme } from "@/hooks/store/use-app-theme"; -import { isSidebarToggleVisible } from "@/plane-web/components/desktop"; +import { isSidebarToggleVisible } from "@/components/desktop"; import { IconButton } from "@plane/propel/icon-button"; export const AppSidebarToggleButton = observer(function AppSidebarToggleButton() { From a82a6263f489d49025287bf12a0a02d0a908142b Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Tue, 16 Jun 2026 17:48:23 +0530 Subject: [PATCH 15/42] refactor: remove obsolete index file and introduce new version number and product updates components in core --- apps/web/ce/components/global/index.ts | 7 ------- .../components/global/product-updates/changelog.tsx | 1 + .../components/global/product-updates/header.tsx | 0 apps/web/core/components/global/product-updates/modal.tsx | 4 ++-- apps/web/{ce => core}/components/global/version-number.tsx | 0 .../components/workspace/sidebar/help-section/root.tsx | 3 +-- 6 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 apps/web/ce/components/global/index.ts rename apps/web/{ce => core}/components/global/product-updates/changelog.tsx (95%) rename apps/web/{ce => core}/components/global/product-updates/header.tsx (100%) rename apps/web/{ce => core}/components/global/version-number.tsx (100%) diff --git a/apps/web/ce/components/global/index.ts b/apps/web/ce/components/global/index.ts deleted file mode 100644 index 1d62fc2cfe4..00000000000 --- a/apps/web/ce/components/global/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export * from "./version-number"; diff --git a/apps/web/ce/components/global/product-updates/changelog.tsx b/apps/web/core/components/global/product-updates/changelog.tsx similarity index 95% rename from apps/web/ce/components/global/product-updates/changelog.tsx rename to apps/web/core/components/global/product-updates/changelog.tsx index 06de2360829..cfddb2af4f2 100644 --- a/apps/web/ce/components/global/product-updates/changelog.tsx +++ b/apps/web/core/components/global/product-updates/changelog.tsx @@ -78,6 +78,7 @@ export const ProductUpdatesChangelog = observer(function ProductUpdatesChangelog )} + {/* eslint-disable-next-line react/iframe-missing-sandbox oxlint-disable-next-line jsx_a11y/iframe-has-title */}