Skip to content

Commit 6712389

Browse files
refactor: migrate web icons to @makeplane/propel (#9731)
* refactor: migrate web icons to @makeplane/propel Replace confirmed icon symbols across apps/web with their audited @makeplane/propel/icons targets. Unresolved symbols and the State, Priority and Brand icons stay on their existing imports. Lucide size props become explicit width/height, including the two relation icons and the inbox status icon that forward a size variable. Two aliased imports resolve to targets the file already imported, so the aliases are dropped rather than importing the same symbol twice. Widen the member dropdown chain and the AI menu from LucideIcon to ComponentType<SVGProps<SVGSVGElement>> so both Lucide and Propel icons satisfy them; both only ever render the icon with a className. CycleGroupIcon is deliberately not migrated: it dispatches a different glyph and color per cycle status, which CyclesOutline cannot express. apps/web already declared @makeplane/propel, so no dependency change was needed. * fix: address icon migration review on web Restore the six user-facing strings the identifier rename overwrote. The migration replaced every occurrence of a source symbol name, including ones inside string literals and JSX text, so the GitHub empty state read "StarOutline us on GitHub", the exporter column key, header and button label became "DownloadOutline", the project card action title became "SettingsOutline" and a tooltip became "PinOutline". Drop 122 strokeWidth props and 10 text-2 classes. Propel glyphs paint with fill="currentColor", so strokeWidth never changed weight, and text-2 was a bad conversion of stroke-2, which is a stroke width rather than a colour and has no meaning on a fill path. Use StarFilled for the two favorited sidebar stars. Lucide's Star with fill-yellow-500 was a solid star, and StarOutline is a ring path, so filling it does not reproduce that shape.
1 parent b7281ea commit 6712389

470 files changed

Lines changed: 2108 additions & 1982 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { observer } from "mobx-react";
88
import { useTranslation } from "@plane/i18n";
99
// ui
10-
import { CycleIcon } from "@plane/propel/icons";
10+
import { CyclesOutline } from "@makeplane/propel/icons";
1111
import { Breadcrumbs, Header } from "@plane/ui";
1212
// components
1313
import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
@@ -24,7 +24,7 @@ export const WorkspaceActiveCycleHeader = observer(function WorkspaceActiveCycle
2424
component={
2525
<BreadcrumbLink
2626
label={t("active_cycles")}
27-
icon={<CycleIcon className="h-4 w-4 rotate-180 text-tertiary" />}
27+
icon={<CyclesOutline className="h-4 w-4 rotate-180 text-tertiary" />}
2828
/>
2929
}
3030
/>

apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import { observer } from "mobx-react";
88
import { useTranslation } from "@plane/i18n";
9-
import { AnalyticsIcon } from "@plane/propel/icons";
9+
import { AnalyticsOutline } from "@makeplane/propel/icons";
1010
// plane imports
1111
import { Breadcrumbs, Header } from "@plane/ui";
1212
// components
@@ -22,7 +22,7 @@ export const WorkspaceAnalyticsHeader = observer(function WorkspaceAnalyticsHead
2222
component={
2323
<BreadcrumbLink
2424
label={t("workspace_analytics.label")}
25-
icon={<AnalyticsIcon className="h-4 w-4 text-tertiary" />}
25+
icon={<AnalyticsOutline className="h-4 w-4 text-tertiary" />}
2626
/>
2727
}
2828
/>

apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import React from "react";
88
import { observer } from "mobx-react";
99
import { useParams } from "next/navigation";
1010
// plane ui
11-
import { WorkItemsIcon } from "@plane/propel/icons";
11+
import { WorkItemsOutline } from "@makeplane/propel/icons";
1212
import { Breadcrumbs, Header } from "@plane/ui";
1313
// components
1414
import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
@@ -46,7 +46,7 @@ export const WorkItemDetailsHeader = observer(function WorkItemDetailsHeader() {
4646
<BreadcrumbLink
4747
label="Work Items"
4848
href={`/${workspaceSlug}/projects/${projectId}/issues/`}
49-
icon={<WorkItemsIcon className="h-4 w-4 text-tertiary" />}
49+
icon={<WorkItemsOutline className="h-4 w-4 text-tertiary" />}
5050
/>
5151
}
5252
/>

apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
1010
import { useTranslation } from "@plane/i18n";
1111
// ui
1212
import { Button } from "@plane/propel/button";
13-
import { DraftIcon } from "@plane/propel/icons";
13+
import { DraftsOutline } from "@makeplane/propel/icons";
1414
import { EIssuesStoreType } from "@plane/types";
1515
import { Breadcrumbs, Header } from "@plane/ui";
1616
// components
@@ -52,7 +52,7 @@ export const WorkspaceDraftHeader = observer(function WorkspaceDraftHeader() {
5252
<Breadcrumbs>
5353
<Breadcrumbs.Item
5454
component={
55-
<BreadcrumbLink label={t("drafts")} icon={<DraftIcon className="h-4 w-4 text-tertiary" />} />
55+
<BreadcrumbLink label={t("drafts")} icon={<DraftsOutline className="h-4 w-4 text-tertiary" />} />
5656
}
5757
/>
5858
</Breadcrumbs>

apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useParams } from "next/navigation";
1111
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
1212
import { useTranslation } from "@plane/i18n";
1313
import { EmptyStateCompact } from "@plane/propel/empty-state";
14-
import { PlusIcon, SearchIcon } from "@plane/propel/icons";
14+
import { AddOutline, SearchOutline } from "@makeplane/propel/icons";
1515
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
1616
import { Tooltip } from "@makeplane/propel/components/tooltip";
1717
import { copyUrlToClipboard, orderJoinedProjects } from "@plane/utils";
@@ -123,13 +123,13 @@ export const ExtendedProjectSidebar = observer(function ExtendedProjectSidebar()
123123
setIsProjectModalOpen(true);
124124
}}
125125
>
126-
<PlusIcon className="size-3" />
126+
<AddOutline className="size-3" />
127127
</button>
128128
</Tooltip>
129129
)}
130130
</div>
131131
<div className="ml-auto flex w-full items-center gap-1.5 rounded-md border border-subtle bg-surface-1 px-2.5 py-1">
132-
<SearchIcon className="h-3.5 w-3.5 text-placeholder" />
132+
<SearchOutline className="h-3.5 w-3.5 text-placeholder" />
133133
<input
134134
className="w-full max-w-[234px] border-none bg-transparent text-13 outline-none placeholder:text-placeholder"
135135
placeholder={t("search")}

apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
*/
66

77
import { observer } from "mobx-react";
8-
import { Shapes } from "lucide-react";
8+
import { HomeOutline, WidgetOutline } from "@makeplane/propel/icons";
99
// plane imports
1010
import { useTranslation } from "@plane/i18n";
1111
import { Button } from "@plane/propel/button";
12-
import { HomeIcon } from "@plane/propel/icons";
1312
import { Breadcrumbs, Header } from "@plane/ui";
1413
// components
1514
import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
@@ -30,7 +29,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
3029
<Breadcrumbs>
3130
<Breadcrumbs.Item
3231
component={
33-
<BreadcrumbLink label={t("home.title")} icon={<HomeIcon className="h-4 w-4 text-tertiary" />} />
32+
<BreadcrumbLink label={t("home.title")} icon={<HomeOutline className="h-4 w-4 text-tertiary" />} />
3433
}
3534
/>
3635
</Breadcrumbs>
@@ -42,7 +41,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead
4241
size="lg"
4342
onClick={() => toggleWidgetSettings(true)}
4443
className="my-auto mb-0"
45-
prependIcon={<Shapes />}
44+
prependIcon={<WidgetOutline />}
4645
>
4746
<div className="hidden sm:hidden md:block">{t("home.manage_widgets")}</div>
4847
</Button>

apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
// ui
88
import { observer } from "mobx-react";
99
import { useParams, useRouter } from "next/navigation";
10-
import { PanelRight } from "lucide-react";
10+
import { ChevronDownOutline, RightSidePaneOutline, YourWorkOutline } from "@makeplane/propel/icons";
1111
import { PROFILE_VIEWER_TAB, PROFILE_ADMINS_TAB, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
1212
import { useTranslation } from "@plane/i18n";
13-
import { YourWorkIcon, ChevronDownIcon } from "@plane/propel/icons";
1413
import type { IUserProfileProjectSegregation } from "@plane/types";
1514
import { Breadcrumbs, Header, CustomMenu } from "@plane/ui";
1615
// components
@@ -62,7 +61,7 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
6261
<BreadcrumbLink
6362
label={breadcrumbLabel}
6463
disableTooltip
65-
icon={<YourWorkIcon className="h-4 w-4 text-tertiary" />}
64+
icon={<YourWorkOutline className="h-4 w-4 text-tertiary" />}
6665
/>
6766
}
6867
/>
@@ -78,7 +77,7 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
7877
customButton={
7978
<div className="flex items-center gap-2 rounded-md border border-subtle px-2 py-1.5">
8079
<span className="flex flex-grow justify-center text-13 text-secondary">{type}</span>
81-
<ChevronDownIcon className="h-4 w-4 text-placeholder" />
80+
<ChevronDownOutline className="h-4 w-4 text-placeholder" />
8281
</div>
8382
}
8483
customButtonClassName="flex flex-grow justify-center text-secondary text-13"
@@ -103,7 +102,7 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse
103102
toggleProfileSidebar();
104103
}}
105104
appendIcon={
106-
<PanelRight className={!profileSidebarCollapsed ? "text-accent-primary" : "text-secondary"} />
105+
<RightSidePaneOutline className={!profileSidebarCollapsed ? "text-accent-primary" : "text-secondary"} />
107106
}
108107
></Button>
109108
</div>

apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "
1212
// plane i18n
1313
import { useTranslation } from "@plane/i18n";
1414
// icons
15-
import { ChevronDownIcon } from "@plane/propel/icons";
15+
import { ChevronDownOutline } from "@makeplane/propel/icons";
1616
// types
1717
import type {
1818
IIssueDisplayFilterOptions,
@@ -92,7 +92,7 @@ export const ProfileIssuesMobileHeader = observer(function ProfileIssuesMobileHe
9292
customButton={
9393
<div className="flex-center flex text-13 text-secondary">
9494
{t("common.layout")}
95-
<ChevronDownIcon className="my-auto ml-2 h-4 w-4 text-secondary" strokeWidth={2} />
95+
<ChevronDownOutline className="my-auto ml-2 h-4 w-4 text-secondary" />
9696
</div>
9797
}
9898
customButtonClassName="flex flex-center text-secondary text-13"
@@ -121,7 +121,7 @@ export const ProfileIssuesMobileHeader = observer(function ProfileIssuesMobileHe
121121
menuButton={
122122
<div className="flex-center flex text-13 text-secondary">
123123
{t("common.display")}
124-
<ChevronDownIcon className="ml-2 h-4 w-4 text-secondary" strokeWidth={2} />
124+
<ChevronDownOutline className="ml-2 h-4 w-4 text-secondary" />
125125
</div>
126126
}
127127
>

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import { observer } from "mobx-react";
88
import { useParams } from "next/navigation";
9-
import { ArchiveIcon, CycleIcon, ModuleIcon, WorkItemsIcon } from "@plane/propel/icons";
9+
import { ArchiveOutline, CyclesOutline, ModuleOutline, WorkItemsOutline } from "@makeplane/propel/icons";
1010
import { Tooltip } from "@makeplane/propel/components/tooltip";
1111
import { EIssuesStoreType } from "@plane/types";
1212
// ui
@@ -35,17 +35,17 @@ const PROJECT_ARCHIVES_BREADCRUMB_LIST: {
3535
issues: {
3636
label: "Work items",
3737
href: "/issues",
38-
icon: WorkItemsIcon,
38+
icon: WorkItemsOutline,
3939
},
4040
cycles: {
4141
label: "Cycles",
4242
href: "/cycles",
43-
icon: CycleIcon,
43+
icon: CyclesOutline,
4444
},
4545
modules: {
4646
label: "Modules",
4747
href: "/modules",
48-
icon: ModuleIcon,
48+
icon: ModuleOutline,
4949
},
5050
};
5151

@@ -78,7 +78,7 @@ export const ProjectArchivesHeader = observer(function ProjectArchivesHeader(pro
7878
<BreadcrumbLink
7979
href={`/${workspaceSlug}/projects/${projectId}/archives/issues`}
8080
label="Archives"
81-
icon={<ArchiveIcon className="h-4 w-4 text-tertiary" />}
81+
icon={<ArchiveOutline className="h-4 w-4 text-tertiary" />}
8282
/>
8383
}
8484
/>

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import useSWR from "swr";
1010
// ui
1111
import { Banner } from "@plane/propel/banner";
1212
import { Button } from "@plane/propel/button";
13-
import { ArchiveIcon } from "@plane/propel/icons";
13+
import { ArchiveOutline } from "@makeplane/propel/icons";
1414
import { Loader } from "@plane/ui";
1515
// components
1616
import { PageHead } from "@/components/core/page-title";
@@ -70,7 +70,7 @@ function ArchivedIssueDetailsPage({ params }: Route.ComponentProps) {
7070
<Banner
7171
variant="warning"
7272
title="This work item has been archived. Visit the Archives section to restore it."
73-
icon={<ArchiveIcon className="size-4" />}
73+
icon={<ArchiveOutline className="size-4" />}
7474
action={
7575
<Button
7676
variant="secondary"

0 commit comments

Comments
 (0)