-
+
{t("common.labels")}
diff --git a/apps/web/core/components/issues/issue-layouts/layout-icon.tsx b/apps/web/core/components/issues/issue-layouts/layout-icon.tsx
index e4f7f00044..c55669c68d 100644
--- a/apps/web/core/components/issues/issue-layouts/layout-icon.tsx
+++ b/apps/web/core/components/issues/issue-layouts/layout-icon.tsx
@@ -1,19 +1,34 @@
-import type { LucideProps } from "lucide-react";
-import { List, Kanban, Calendar, Sheet, GanttChartSquare } from "lucide-react";
+import {
+ ListLayoutIcon,
+ BoardLayoutIcon,
+ CalendarLayoutIcon,
+ SheetLayoutIcon,
+ TimelineLayoutIcon,
+} from "@plane/propel/icons";
+import type { ISvgIcons } from "@plane/propel/icons";
import { EIssueLayoutTypes } from "@plane/types";
-export const IssueLayoutIcon = ({ layout, ...props }: { layout: EIssueLayoutTypes } & LucideProps) => {
+export const IssueLayoutIcon = ({
+ layout,
+ size,
+ ...props
+}: { layout: EIssueLayoutTypes; size?: number } & Omit) => {
+ const iconProps = {
+ ...props,
+ ...(size && { width: size, height: size }),
+ };
+
switch (layout) {
case EIssueLayoutTypes.LIST:
- return
;
+ return ;
case EIssueLayoutTypes.KANBAN:
- return ;
+ return ;
case EIssueLayoutTypes.CALENDAR:
- return ;
+ return ;
case EIssueLayoutTypes.SPREADSHEET:
- return ;
+ return ;
case EIssueLayoutTypes.GANTT:
- return ;
+ return ;
default:
return null;
}
diff --git a/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx b/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx
index 0a5f0a392f..a61d6ccf42 100644
--- a/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx
+++ b/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx
@@ -6,12 +6,12 @@ import { xor } from "lodash-es";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// icons
-import { CalendarCheck2, CalendarClock, Link, Paperclip } from "lucide-react";
+import { Link, Paperclip } from "lucide-react";
// types
import { WORK_ITEM_TRACKER_EVENTS } from "@plane/constants";
// i18n
import { useTranslation } from "@plane/i18n";
-import { ViewsIcon } from "@plane/propel/icons";
+import { StartDatePropertyIcon, ViewsIcon, DueDatePropertyIcon } from "@plane/propel/icons";
import { Tooltip } from "@plane/propel/tooltip";
import type { TIssue, IIssueDisplayProperties, TIssuePriorities } from "@plane/types";
// ui
@@ -324,7 +324,7 @@ export const IssueProperties: React.FC = observer((props) => {
onChange={handleStartDate}
maxDate={maxDate}
placeholder={t("common.order_by.start_date")}
- icon={}
+ icon={}
buttonVariant={issue.start_date ? "border-with-text" : "border-without-text"}
optionsClassName="z-10"
disabled={isReadOnly}
@@ -346,7 +346,7 @@ export const IssueProperties: React.FC = observer((props) => {
onChange={handleTargetDate}
minDate={minDate}
placeholder={t("common.order_by.due_date")}
- icon={}
+ icon={}
buttonVariant={issue.target_date ? "border-with-text" : "border-without-text"}
buttonClassName={shouldHighlightIssueDueDate(issue.target_date, stateDetails?.group) ? "text-red-500" : ""}
clearIconClassName="!text-custom-text-100"
diff --git a/apps/web/core/components/issues/issue-layouts/properties/labels.tsx b/apps/web/core/components/issues/issue-layouts/properties/labels.tsx
index eb02435e09..ecb856a0cd 100644
--- a/apps/web/core/components/issues/issue-layouts/properties/labels.tsx
+++ b/apps/web/core/components/issues/issue-layouts/properties/labels.tsx
@@ -3,11 +3,11 @@
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import type { Placement } from "@popperjs/core";
import { observer } from "mobx-react";
-import { Tags } from "lucide-react";
// plane helpers
import { useOutsideClickDetector } from "@plane/hooks";
// i18n
import { useTranslation } from "@plane/i18n";
+import { LabelPropertyIcon } from "@plane/propel/icons";
// types
import { Tooltip } from "@plane/propel/tooltip";
import type { IIssueLabel } from "@plane/types";
@@ -101,7 +101,7 @@ export const IssuePropertyLabels: React.FC = observer((pro
fullWidth && "w-full"
)}
>
-
+
{placeholderText}
diff --git a/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx
index 1d793c3209..087e349b6b 100644
--- a/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx
+++ b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx
@@ -1,6 +1,6 @@
import React from "react";
import { observer } from "mobx-react";
-import { CalendarCheck2 } from "lucide-react";
+import { DueDatePropertyIcon } from "@plane/propel/icons";
// types
import type { TIssue } from "@plane/types";
import { cn, getDate, renderFormattedPayloadDate, shouldHighlightIssueDueDate } from "@plane/utils";
@@ -42,7 +42,7 @@ export const SpreadsheetDueDateColumn: React.FC
= observer((props: Props)
}}
disabled={disabled}
placeholder="Due date"
- icon={}
+ icon={}
buttonVariant="transparent-with-text"
buttonContainerClassName="w-full"
buttonClassName={cn(
diff --git a/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx
index f1c35a4b57..bcdc01a1df 100644
--- a/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx
+++ b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx
@@ -1,6 +1,6 @@
import React from "react";
import { observer } from "mobx-react";
-import { CalendarClock } from "lucide-react";
+import { StartDatePropertyIcon } from "@plane/propel/icons";
// types
import type { TIssue } from "@plane/types";
// components
@@ -36,7 +36,7 @@ export const SpreadsheetStartDateColumn: React.FC = observer((props: Prop
}}
disabled={disabled}
placeholder="Start date"
- icon={}
+ icon={}
buttonVariant="transparent-with-text"
buttonClassName="text-left rounded-none group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10 px-page-x"
buttonContainerClassName="w-full"
diff --git a/apps/web/core/components/issues/issue-modal/components/default-properties.tsx b/apps/web/core/components/issues/issue-modal/components/default-properties.tsx
index f7bba82d30..e9def41c6f 100644
--- a/apps/web/core/components/issues/issue-modal/components/default-properties.tsx
+++ b/apps/web/core/components/issues/issue-modal/components/default-properties.tsx
@@ -4,10 +4,9 @@ import React, { useState } from "react";
import { observer } from "mobx-react";
import type { Control } from "react-hook-form";
import { Controller } from "react-hook-form";
-import { LayoutPanelTop } from "lucide-react";
-// plane imports
import { ETabIndices, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
+import { ParentPropertyIcon } from "@plane/propel/icons";
// types
import type { ISearchIssueResponse, TIssue } from "@plane/types";
// ui
@@ -313,7 +312,7 @@ export const IssueDefaultProperties: React.FC = ob
className="flex cursor-pointer items-center justify-between gap-1 h-full rounded border-[0.5px] border-custom-border-300 px-2 py-0.5 text-xs hover:bg-custom-background-80"
onClick={() => setParentIssueListModalOpen(true)}
>
-
+
{t("add_parent")}
)}
diff --git a/apps/web/core/components/issues/peek-overview/properties.tsx b/apps/web/core/components/issues/peek-overview/properties.tsx
index bd6a727ea0..34f5265dc2 100644
--- a/apps/web/core/components/issues/peek-overview/properties.tsx
+++ b/apps/web/core/components/issues/peek-overview/properties.tsx
@@ -2,11 +2,22 @@
import type { FC } from "react";
import { observer } from "mobx-react";
-import { Signal, Tag, Triangle, LayoutPanelTop, CalendarClock, CalendarCheck2, Users, UserCircle2 } from "lucide-react";
// i18n
import { useTranslation } from "@plane/i18n";
// ui icons
-import { CycleIcon, DoubleCircleIcon, ModuleIcon } from "@plane/propel/icons";
+import {
+ CycleIcon,
+ StatePropertyIcon,
+ ModuleIcon,
+ MembersPropertyIcon,
+ PriorityPropertyIcon,
+ StartDatePropertyIcon,
+ DueDatePropertyIcon,
+ LabelPropertyIcon,
+ UserCirclePropertyIcon,
+ EstimatePropertyIcon,
+ ParentPropertyIcon,
+} from "@plane/propel/icons";
import { cn, getDate, renderFormattedPayloadDate, shouldHighlightIssueDueDate } from "@plane/utils";
// components
import { DateDropdown } from "@/components/dropdowns/date";
@@ -69,7 +80,7 @@ export const PeekOverviewProperties: FC = observer((pro
{/* state */}
-
+
{t("common.state")}
= observer((pro
{/* assignee */}
-
+
{t("common.assignees")}
= observer((pro
{/* priority */}
-
+
{t("common.priority")}
= observer((pro
{createdByDetails && (
-
+
{t("common.created_by")}
@@ -148,7 +159,7 @@ export const PeekOverviewProperties: FC
= observer((pro
{/* start date */}
-
+
{t("common.order_by.start_date")}
= observer((pro
{/* due date */}
-
+
{t("common.order_by.due_date")}
= observer((pro
{isEstimateEnabled && (
-
+
{t("common.estimate")}
= observer((pro
{/* parent */}
= observer((pro
{/* label */}
-
+
{t("common.labels")}
diff --git a/apps/web/core/components/issues/select/base.tsx b/apps/web/core/components/issues/select/base.tsx
index eb0bb02c78..a81eebcd91 100644
--- a/apps/web/core/components/issues/select/base.tsx
+++ b/apps/web/core/components/issues/select/base.tsx
@@ -2,12 +2,13 @@ import React, { useEffect, useRef, useState } from "react";
import type { Placement } from "@popperjs/core";
import { observer } from "mobx-react";
import { usePopper } from "react-popper";
-import { Check, Component, Loader, Search, Tag } from "lucide-react";
+import { Check, Component, Loader, Search } from "lucide-react";
import { Combobox } from "@headlessui/react";
import { getRandomLabelColor } from "@plane/constants";
// plane imports
import { useOutsideClickDetector } from "@plane/hooks";
import { useTranslation } from "@plane/i18n";
+import { LabelPropertyIcon } from "@plane/propel/icons";
import type { IIssueLabel } from "@plane/types";
import { cn } from "@plane/utils";
// components
@@ -181,7 +182,7 @@ export const WorkItemLabelSelectBase: React.FC =
buttonClassName
)}
>
-
+
{t("labels")}
)}
diff --git a/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx b/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx
index 04ca1b82d4..e931bd25c6 100644
--- a/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx
+++ b/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx
@@ -4,7 +4,7 @@ import { useCallback, useMemo } from "react";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// icons
-import { CalendarCheck2, CalendarClock } from "lucide-react";
+import { DueDatePropertyIcon, StartDatePropertyIcon } from "@plane/propel/icons";
// types
import type { TIssuePriorities, TWorkspaceDraftIssue } from "@plane/types";
import { getDate, renderFormattedPayloadDate, shouldHighlightIssueDueDate } from "@plane/utils";
@@ -177,7 +177,7 @@ export const DraftIssueProperties: React.FC
= observer((props)
onChange={handleStartDate}
maxDate={maxDate}
placeholder="Start date"
- icon={}
+ icon={}
buttonVariant={issue.start_date ? "border-with-text" : "border-without-text"}
optionsClassName="z-10"
renderByDefault={isMobile}
@@ -192,7 +192,7 @@ export const DraftIssueProperties: React.FC = observer((props)
onChange={handleTargetDate}
minDate={minDate}
placeholder="Due date"
- icon={}
+ icon={}
buttonVariant={issue.target_date ? "border-with-text" : "border-without-text"}
buttonClassName={
shouldHighlightIssueDueDate(issue?.target_date || null, stateDetails?.group) ? "text-red-500" : ""
diff --git a/apps/web/core/components/modules/analytics-sidebar/root.tsx b/apps/web/core/components/modules/analytics-sidebar/root.tsx
index fa47aa146c..5e33b6e438 100644
--- a/apps/web/core/components/modules/analytics-sidebar/root.tsx
+++ b/apps/web/core/components/modules/analytics-sidebar/root.tsx
@@ -4,7 +4,7 @@ import React, { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
import { Controller, useForm } from "react-hook-form";
-import { CalendarClock, ChevronDown, ChevronRight, Info, Plus, SquareUser, Users } from "lucide-react";
+import { ChevronDown, ChevronRight, Info, Plus, SquareUser } from "lucide-react";
import { Disclosure, Transition } from "@headlessui/react";
import {
MODULE_STATUS,
@@ -16,7 +16,7 @@ import {
} from "@plane/constants";
// plane types
import { useTranslation } from "@plane/i18n";
-import { ModuleStatusIcon, WorkItemsIcon } from "@plane/propel/icons";
+import { MembersPropertyIcon, ModuleStatusIcon, WorkItemsIcon, StartDatePropertyIcon } from "@plane/propel/icons";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
import type { ILinkDetails, IModule, ModuleLink } from "@plane/types";
// plane ui
@@ -303,7 +303,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => {
-
+
{t("date_range")}
@@ -371,7 +371,7 @@ export const ModuleAnalyticsSidebar: React.FC
= observer((props) => {
-
+
{t("members")}
= (props) => {
// get Layout icon
const icons = {
- list: List,
- board: LayoutGrid,
- gantt: GanttChartSquare,
+ list: ListLayoutIcon,
+ board: GridLayoutIcon,
+ gantt: TimelineLayoutIcon,
};
const Icon = icons[layoutType ?? "list"];
@@ -28,10 +28,10 @@ export const ModuleLayoutIcon: React.FC = (props) => {
<>
{withContainer ? (
-
+
) : (
-
+
)}
>
);
diff --git a/apps/web/core/components/modules/select/status.tsx b/apps/web/core/components/modules/select/status.tsx
index e93f557b7a..e89fe2f7be 100644
--- a/apps/web/core/components/modules/select/status.tsx
+++ b/apps/web/core/components/modules/select/status.tsx
@@ -7,7 +7,7 @@ import type { FieldError, Control } from "react-hook-form";
import { Controller } from "react-hook-form";
import { MODULE_STATUS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { DoubleCircleIcon, ModuleStatusIcon } from "@plane/propel/icons";
+import { StatePropertyIcon, ModuleStatusIcon } from "@plane/propel/icons";
import type { IModule } from "@plane/types";
// ui
import { CustomSelect } from "@plane/ui";
@@ -37,7 +37,7 @@ export const ModuleStatusSelect: React.FC = ({ control, error, tabIndex }
{value ? (
) : (
-
+
)}
{(selectedValue && t(selectedValue?.i18n_label)) ?? (
Status
diff --git a/apps/web/core/components/modules/sidebar-select/select-status.tsx b/apps/web/core/components/modules/sidebar-select/select-status.tsx
index 90d18409b6..83e6cf6dd8 100644
--- a/apps/web/core/components/modules/sidebar-select/select-status.tsx
+++ b/apps/web/core/components/modules/sidebar-select/select-status.tsx
@@ -7,7 +7,7 @@ import type { Control, UseFormWatch } from "react-hook-form";
import { Controller } from "react-hook-form";
import { MODULE_STATUS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { DoubleCircleIcon } from "@plane/propel/icons";
+import { StatePropertyIcon } from "@plane/propel/icons";
import type { IModule } from "@plane/types";
// ui
import { CustomSelect } from "@plane/ui";
@@ -26,7 +26,7 @@ export const SidebarStatusSelect: React.FC = ({ control, submitChanges, w
return (
diff --git a/apps/web/core/components/profile/overview/stats.tsx b/apps/web/core/components/profile/overview/stats.tsx
index 5998b9a7a4..13bb3c8d85 100644
--- a/apps/web/core/components/profile/overview/stats.tsx
+++ b/apps/web/core/components/profile/overview/stats.tsx
@@ -4,9 +4,8 @@ import Link from "next/link";
import { useParams } from "next/navigation";
// ui
-import { UserCircle2 } from "lucide-react";
import { useTranslation } from "@plane/i18n";
-import { CreateIcon, LayerStackIcon } from "@plane/propel/icons";
+import { UserCirclePropertyIcon, CreateIcon, LayerStackIcon } from "@plane/propel/icons";
import type { IUserProfileData } from "@plane/types";
import { Loader, Card, ECardSpacing, ECardDirection } from "@plane/ui";
// types
@@ -28,7 +27,7 @@ export const ProfileStats: React.FC
= ({ userProfile }) => {
value: userProfile?.created_issues ?? "...",
},
{
- icon: UserCircle2,
+ icon: UserCirclePropertyIcon,
route: "assigned",
i18n_title: "profile.stats.assigned",
value: userProfile?.assigned_issues ?? "...",
diff --git a/apps/web/core/components/readonly/estimate.tsx b/apps/web/core/components/readonly/estimate.tsx
index ea71ce3d59..e67ee74088 100644
--- a/apps/web/core/components/readonly/estimate.tsx
+++ b/apps/web/core/components/readonly/estimate.tsx
@@ -2,9 +2,8 @@
import { useEffect } from "react";
import { observer } from "mobx-react";
-import { Triangle } from "lucide-react";
-// plane imports
import { useTranslation } from "@plane/i18n";
+import { EstimatePropertyIcon } from "@plane/propel/icons";
import { EEstimateSystem } from "@plane/types";
import { cn, convertMinutesToHoursMinutesString } from "@plane/utils";
// hooks
@@ -46,7 +45,7 @@ export const ReadonlyEstimate: React.FC = observer((prop
return (
- {!hideIcon && }
+ {!hideIcon && }
{displayValue ?? placeholder ?? t("common.none")}
);
diff --git a/packages/constants/src/issue/common.ts b/packages/constants/src/issue/common.ts
index 665fa930ad..e19a752b2f 100644
--- a/packages/constants/src/issue/common.ts
+++ b/packages/constants/src/issue/common.ts
@@ -241,7 +241,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "A",
descendingOrderKey: "-assignees__first_name",
descendingOrderTitle: "Z",
- icon: "Users",
+ icon: "MembersPropertyIcon",
},
created_on: {
i18n_title: "common.sort.created_on",
@@ -257,7 +257,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "New",
descendingOrderKey: "target_date",
descendingOrderTitle: "Old",
- icon: "CalendarCheck2",
+ icon: "DueDatePropertyIcon",
},
estimate: {
i18n_title: "common.estimate",
@@ -265,7 +265,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "Low",
descendingOrderKey: "-estimate_point__key",
descendingOrderTitle: "High",
- icon: "Triangle",
+ icon: "EstimatePropertyIcon",
},
labels: {
i18n_title: "common.labels",
@@ -273,7 +273,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "A",
descendingOrderKey: "-labels__name",
descendingOrderTitle: "Z",
- icon: "Tag",
+ icon: "LabelPropertyIcon",
},
modules: {
i18n_title: "common.modules",
@@ -297,7 +297,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "None",
descendingOrderKey: "-priority",
descendingOrderTitle: "Urgent",
- icon: "Signal",
+ icon: "PriorityPropertyIcon",
},
start_date: {
i18n_title: "common.order_by.start_date",
@@ -305,7 +305,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "New",
descendingOrderKey: "start_date",
descendingOrderTitle: "Old",
- icon: "CalendarClock",
+ icon: "StartDatePropertyIcon",
},
state: {
i18n_title: "common.state",
@@ -313,7 +313,7 @@ export const SPREADSHEET_PROPERTY_DETAILS: {
ascendingOrderTitle: "A",
descendingOrderKey: "-state__name",
descendingOrderTitle: "Z",
- icon: "DoubleCircleIcon",
+ icon: "StatePropertyIcon",
},
updated_on: {
i18n_title: "common.sort.updated_on",
diff --git a/packages/propel/src/icons/add-icon.tsx b/packages/propel/src/icons/actions/add-icon.tsx
similarity index 62%
rename from packages/propel/src/icons/add-icon.tsx
rename to packages/propel/src/icons/actions/add-icon.tsx
index 13d87f3d38..c7e0a1c0fb 100644
--- a/packages/propel/src/icons/add-icon.tsx
+++ b/packages/propel/src/icons/actions/add-icon.tsx
@@ -1,33 +1,17 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const AddIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/actions/index.ts b/packages/propel/src/icons/actions/index.ts
new file mode 100644
index 0000000000..0ef51f7211
--- /dev/null
+++ b/packages/propel/src/icons/actions/index.ts
@@ -0,0 +1 @@
+export * from "./add-icon";
diff --git a/packages/propel/src/icons/constants.tsx b/packages/propel/src/icons/constants.tsx
new file mode 100644
index 0000000000..4dc86d08d0
--- /dev/null
+++ b/packages/propel/src/icons/constants.tsx
@@ -0,0 +1,62 @@
+import { Icon } from "./icon";
+export const ActionsIconsMap = [{ icon: , title: "AddIcon" }];
+
+export const WorkspaceIconsMap = [
+ { icon: , title: "AnalyticsIcon" },
+ { icon: , title: "ArchiveIcon" },
+ { icon: , title: "DashboardIcon" },
+ { icon: , title: "DraftIcon" },
+ { icon: , title: "HomeIcon" },
+ { icon: , title: "InboxIcon" },
+ { icon: , title: "ProjectIcon" },
+ { icon: , title: "YourWorkIcon" },
+];
+
+export const ProjectIconsMap = [
+ { icon: , title: "CycleIcon" },
+ { icon: , title: "EpicIcon" },
+ { icon: , title: "IntakeIcon" },
+ { icon: , title: "ModuleIcon" },
+ { icon: , title: "PageIcon" },
+ { icon: , title: "ViewIcon" },
+ { icon: , title: "WorkItemsIcon" },
+];
+
+export const SubBrandIconsMap = [
+ { icon: , title: "PiChatLogo" },
+ { icon: , title: "PlaneIcon" },
+ { icon: , title: "WikiIcon" },
+];
+
+export const LayoutIconsMap = [
+ { icon: , title: "CalendarLayoutIcon" },
+ { icon: , title: "CardLayoutIcon" },
+ { icon: , title: "TimelineLayoutIcon" },
+ { icon: , title: "GridLayoutIcon" },
+ { icon: , title: "BoardLayoutIcon" },
+ { icon: , title: "ListLayoutIcon" },
+ { icon: , title: "SheetLayoutIcon" },
+];
+
+export const PropertyIconsMap = [
+ { icon: , title: "BooleanPropertyIcon" },
+ { icon: , title: "DropdownPropertyIcon" },
+ { icon: , title: "DueDatePropertyIcon" },
+ { icon: , title: "DuplicatePropertyIcon" },
+ { icon: , title: "EstimatePropertyIcon" },
+ { icon: , title: "HashPropertyIcon" },
+ { icon: , title: "LabelPropertyIcon" },
+ { icon: , title: "MembersPropertyIcon" },
+ { icon: , title: "OverdueDatePropertyIcon" },
+ { icon: , title: "ParentPropertyIcon" },
+ { icon: , title: "PriorityPropertyIcon" },
+ { icon: , title: "RelatesToPropertyIcon" },
+ { icon: , title: "RelationPropertyIcon" },
+ { icon: , title: "ScopePropertyIcon" },
+ { icon: , title: "StartDatePropertyIcon" },
+ { icon: , title: "StatePropertyIcon" },
+ { icon: , title: "UserCirclePropertyIcon" },
+ { icon: , title: "UserPropertyIcon" },
+ { icon: , title: "UserSquarePropertyIcon" },
+ { icon: , title: "WorkflowsPropertyIcon" },
+];
diff --git a/packages/propel/src/icons/cycle/cycle-group-icon.tsx b/packages/propel/src/icons/cycle/cycle-group-icon.tsx
index 6062ac36ea..6e095d6f0a 100644
--- a/packages/propel/src/icons/cycle/cycle-group-icon.tsx
+++ b/packages/propel/src/icons/cycle/cycle-group-icon.tsx
@@ -1,7 +1,7 @@
import * as React from "react";
import { CircleDotDashed, Circle } from "lucide-react";
-import { CycleIcon } from "../cycle-icon";
+import { CycleIcon } from "../project/cycle-icon";
import { CircleDotFullIcon } from "./circle-dot-full-icon";
import { CYCLE_GROUP_COLORS, ICycleGroupIcon } from "./helper";
diff --git a/packages/propel/src/icons/default-icon.tsx b/packages/propel/src/icons/default-icon.tsx
new file mode 100644
index 0000000000..cf1fbed943
--- /dev/null
+++ b/packages/propel/src/icons/default-icon.tsx
@@ -0,0 +1,10 @@
+import * as React from "react";
+
+import { IconWrapper } from "./icon-wrapper";
+import { ISvgIcons } from "./type";
+
+export const DefaultIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/epic-icon.tsx b/packages/propel/src/icons/epic-icon.tsx
deleted file mode 100644
index c78a98261b..0000000000
--- a/packages/propel/src/icons/epic-icon.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import * as React from "react";
-
-export type Props = {
- className?: string;
- width?: string | number;
- height?: string | number;
- color?: string;
-};
-
-export const EpicIcon: React.FC = ({ width = "16", height = "16", className }) => (
-
-);
diff --git a/packages/propel/src/icons/helpers.ts b/packages/propel/src/icons/helpers.ts
new file mode 100644
index 0000000000..0cf0bf64b3
--- /dev/null
+++ b/packages/propel/src/icons/helpers.ts
@@ -0,0 +1,29 @@
+import { ICON_REGISTRY, IconName } from "./registry";
+
+/**
+ * Get the icon component by name
+ * @param name - The icon name from the registry
+ * @returns The icon component or default icon if not found
+ */
+export const getIconComponent = (name: IconName) => ICON_REGISTRY[name] || ICON_REGISTRY.default;
+
+/**
+ * Check if the icon name exists in the registry
+ * @param name - The icon name to check
+ * @returns True if the icon exists in the registry
+ */
+export const isValidIconName = (name: string): name is IconName => name in ICON_REGISTRY;
+
+/**
+ * Get all available icon names
+ * @returns Array of all icon names in the registry
+ */
+export const getIconNames = (): IconName[] => Object.keys(ICON_REGISTRY) as IconName[];
+
+/**
+ * Get icons by category
+ * @param category - The category prefix (e.g., 'workspace', 'project')
+ * @returns Array of icon names matching the category
+ */
+export const getIconsByCategory = (category: string): IconName[] =>
+ getIconNames().filter((name) => name.startsWith(`${category}.`));
diff --git a/packages/propel/src/icons/icon-wrapper.tsx b/packages/propel/src/icons/icon-wrapper.tsx
new file mode 100644
index 0000000000..fb6123353b
--- /dev/null
+++ b/packages/propel/src/icons/icon-wrapper.tsx
@@ -0,0 +1,42 @@
+import * as React from "react";
+
+import { ISvgIcons } from "./type";
+
+interface IIconWrapper extends ISvgIcons {
+ children: React.ReactNode;
+ clipPathId?: string;
+ viewBox?: string;
+}
+
+export const IconWrapper: React.FC = ({
+ width = "16",
+ height = "16",
+ className = "text-current",
+ children,
+ clipPathId,
+ viewBox = "0 0 16 16",
+ ...rest
+}) => (
+
+);
diff --git a/packages/propel/src/icons/icon.tsx b/packages/propel/src/icons/icon.tsx
new file mode 100644
index 0000000000..68bc0e3494
--- /dev/null
+++ b/packages/propel/src/icons/icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { ICON_REGISTRY, IconName } from "./registry";
+import { ISvgIcons } from "./type";
+
+export interface IconProps extends Omit {
+ name: IconName;
+}
+
+export const Icon: React.FC = ({ name, ...props }) => {
+ const IconComponent = ICON_REGISTRY[name] || ICON_REGISTRY.default;
+ return ;
+};
diff --git a/packages/propel/src/icons/icons.stories.tsx b/packages/propel/src/icons/icons.stories.tsx
new file mode 100644
index 0000000000..4bab5581c7
--- /dev/null
+++ b/packages/propel/src/icons/icons.stories.tsx
@@ -0,0 +1,196 @@
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import {
+ ActionsIconsMap,
+ LayoutIconsMap,
+ ProjectIconsMap,
+ PropertyIconsMap,
+ SubBrandIconsMap,
+ WorkspaceIconsMap,
+} from "./constants";
+import { Icon } from "./icon";
+import { CycleIcon } from "./project/cycle-icon";
+import { HomeIcon } from "./workspace/home-icon";
+import { ProjectIcon } from "./workspace/project-icon";
+
+const meta: Meta = {
+ title: "Icons",
+ parameters: {
+ layout: "padded",
+ docs: {
+ description: {
+ component:
+ "A comprehensive collection of all icons used throughout the application. Supports both direct imports and registry-based usage.",
+ },
+ },
+ },
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const AllIcons: Story = {
+ render: () => (
+
+
+
Sub-Brand Icons
+
+ {SubBrandIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+
+
Workspace Icons
+
+ {WorkspaceIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+
+
Project Icons
+
+ {ProjectIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+
+
Layout Icons
+
+ {LayoutIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+
+
Property Icons
+
+ {PropertyIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+
+
Actions Icons
+
+ {ActionsIconsMap.map((item) => (
+
+
{item.icon}
+
{item.title}
+
+ ))}
+
+
+
+ ),
+};
+
+export const RegistryUsage: Story = {
+ render: () => (
+
+
+
Registry-Based Usage
+
+ Use the Icon component with{" "}
+ name prop for dynamic icon selection.
+
+
+
+
+
+
Direct Import Usage
+
+ Import icon components directly for better tree-shaking and type safety.
+
+
+
+
+ ),
+};
+
+export const IconSizes: Story = {
+ render: () => (
+
+
+
Icon Sizes
+
+ Icons can be rendered in different sizes using width and height props.
+
+
+
+
+
+ ),
+};
diff --git a/packages/propel/src/icons/index.ts b/packages/propel/src/icons/index.ts
index 0c0529a224..ace2a42257 100644
--- a/packages/propel/src/icons/index.ts
+++ b/packages/propel/src/icons/index.ts
@@ -1,9 +1,10 @@
export type { ISvgIcons } from "./type";
+export type { IconName } from "./registry";
+export type { IconProps } from "./icon";
+export { ICON_REGISTRY } from "./registry";
+export * from "./actions";
export * from "./activity-icon";
-export * from "./add-icon";
export * from "./ai-icon";
-export * from "./analytics-icon";
-export * from "./archive-icon";
export * from "./at-risk-icon";
export * from "./bar-icon";
export * from "./blocked-icon";
@@ -15,58 +16,51 @@ export * from "./center-panel-icon";
export * from "./comment-fill-icon";
export * from "./create-icon";
export * from "./cycle";
-export * from "./cycle-icon";
-export * from "./dashboard-icon";
+export * from "./default-icon";
export * from "./dice-icon";
export * from "./discord-icon";
export * from "./display-properties";
export * from "./done-icon";
-export * from "./draft-icon";
export * from "./dropdown-icon";
-export * from "./epic-icon";
export * from "./favorite-folder-icon";
export * from "./full-screen-panel-icon";
export * from "./github-icon";
export * from "./gitlab-icon";
-export * from "./home-icon";
-export * from "./inbox-icon";
+export * from "./helpers";
+export * from "./icon";
+export * from "./icon-wrapper";
export * from "./info-fill-icon";
export * from "./info-icon";
export * from "./in-progress-icon";
export * from "./intake";
-export * from "./intake-icon";
export * from "./layer-stack";
export * from "./layers-icon";
+export * from "./layouts";
export * from "./lead-icon";
export * from "./module";
-export * from "./module-icon";
export * from "./monospace-icon";
export * from "./multiple-sticky";
export * from "./off-track-icon";
export * from "./on-track-icon";
export * from "./overview-icon";
-export * from "./page-icon";
export * from "./pending-icon";
export * from "./photo-filter-icon";
-export * from "./pi-chat";
export * from "./planned-icon";
-export * from "./plane-icon";
export * from "./priority-icon";
-export * from "./project-icon";
+export * from "./project";
+export * from "./properties";
export * from "./related-icon";
export * from "./sans-serif-icon";
export * from "./serif-icon";
export * from "./side-panel-icon";
export * from "./state";
export * from "./sticky-note-icon";
+export * from "./sub-brand";
export * from "./suspended-user";
export * from "./teams";
export * from "./transfer-icon";
export * from "./tree-map-icon";
export * from "./updates-icon";
export * from "./user-activity-icon";
-export * from "./view-icon";
-export * from "./wiki-icon";
-export * from "./work-items-icon";
+export * from "./workspace";
export * from "./workspace-icon";
-export * from "./your-work-icon";
diff --git a/packages/propel/src/icons/layouts/board-icon.tsx b/packages/propel/src/icons/layouts/board-icon.tsx
new file mode 100644
index 0000000000..aac682c632
--- /dev/null
+++ b/packages/propel/src/icons/layouts/board-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const BoardLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/calendar-icon.tsx b/packages/propel/src/icons/layouts/calendar-icon.tsx
new file mode 100644
index 0000000000..803d4a60a4
--- /dev/null
+++ b/packages/propel/src/icons/layouts/calendar-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const CalendarLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/card-icon.tsx b/packages/propel/src/icons/layouts/card-icon.tsx
new file mode 100644
index 0000000000..64be0629cd
--- /dev/null
+++ b/packages/propel/src/icons/layouts/card-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const CardLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/grid-icon.tsx b/packages/propel/src/icons/layouts/grid-icon.tsx
new file mode 100644
index 0000000000..91cb6b7171
--- /dev/null
+++ b/packages/propel/src/icons/layouts/grid-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const GridLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/index.ts b/packages/propel/src/icons/layouts/index.ts
new file mode 100644
index 0000000000..649d93d3b0
--- /dev/null
+++ b/packages/propel/src/icons/layouts/index.ts
@@ -0,0 +1,7 @@
+export * from "./calendar-icon";
+export * from "./card-icon";
+export * from "./timeline-icon";
+export * from "./grid-icon";
+export * from "./board-icon";
+export * from "./list-icon";
+export * from "./sheet-icon";
diff --git a/packages/propel/src/icons/layouts/list-icon.tsx b/packages/propel/src/icons/layouts/list-icon.tsx
new file mode 100644
index 0000000000..7d993c218f
--- /dev/null
+++ b/packages/propel/src/icons/layouts/list-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const ListLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/sheet-icon.tsx b/packages/propel/src/icons/layouts/sheet-icon.tsx
new file mode 100644
index 0000000000..eea1b9fe1c
--- /dev/null
+++ b/packages/propel/src/icons/layouts/sheet-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const SheetLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/layouts/timeline-icon.tsx b/packages/propel/src/icons/layouts/timeline-icon.tsx
new file mode 100644
index 0000000000..36950de1c3
--- /dev/null
+++ b/packages/propel/src/icons/layouts/timeline-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const TimelineLayoutIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/cycle-icon.tsx b/packages/propel/src/icons/project/cycle-icon.tsx
similarity index 52%
rename from packages/propel/src/icons/cycle-icon.tsx
rename to packages/propel/src/icons/project/cycle-icon.tsx
index 181a7dd743..7eee10ca48 100644
--- a/packages/propel/src/icons/cycle-icon.tsx
+++ b/packages/propel/src/icons/project/cycle-icon.tsx
@@ -1,24 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const CycleIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/project/epic-icon.tsx b/packages/propel/src/icons/project/epic-icon.tsx
new file mode 100644
index 0000000000..35bebaafcb
--- /dev/null
+++ b/packages/propel/src/icons/project/epic-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const EpicIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/project/index.ts b/packages/propel/src/icons/project/index.ts
new file mode 100644
index 0000000000..0ace8ff740
--- /dev/null
+++ b/packages/propel/src/icons/project/index.ts
@@ -0,0 +1,7 @@
+export * from "./cycle-icon";
+export * from "./epic-icon";
+export * from "./intake-icon";
+export * from "./module-icon";
+export * from "./page-icon";
+export * from "./view-icon";
+export * from "./work-items-icon";
diff --git a/packages/propel/src/icons/intake-icon.tsx b/packages/propel/src/icons/project/intake-icon.tsx
similarity index 72%
rename from packages/propel/src/icons/intake-icon.tsx
rename to packages/propel/src/icons/project/intake-icon.tsx
index 38daabf48e..6bee44333a 100644
--- a/packages/propel/src/icons/intake-icon.tsx
+++ b/packages/propel/src/icons/project/intake-icon.tsx
@@ -1,33 +1,17 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const IntakeIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/module-icon.tsx b/packages/propel/src/icons/project/module-icon.tsx
similarity index 91%
rename from packages/propel/src/icons/module-icon.tsx
rename to packages/propel/src/icons/project/module-icon.tsx
index 188b570fac..6c4341a8da 100644
--- a/packages/propel/src/icons/module-icon.tsx
+++ b/packages/propel/src/icons/project/module-icon.tsx
@@ -1,23 +1,10 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const ModuleIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/page-icon.tsx b/packages/propel/src/icons/project/page-icon.tsx
similarity index 89%
rename from packages/propel/src/icons/page-icon.tsx
rename to packages/propel/src/icons/project/page-icon.tsx
index c9eeb486e2..a98a740d82 100644
--- a/packages/propel/src/icons/page-icon.tsx
+++ b/packages/propel/src/icons/project/page-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const PageIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/view-icon.tsx b/packages/propel/src/icons/project/view-icon.tsx
similarity index 74%
rename from packages/propel/src/icons/view-icon.tsx
rename to packages/propel/src/icons/project/view-icon.tsx
index e51a7044f9..1b6f6a38bf 100644
--- a/packages/propel/src/icons/view-icon.tsx
+++ b/packages/propel/src/icons/project/view-icon.tsx
@@ -1,33 +1,17 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const ViewsIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/project/work-items-icon.tsx b/packages/propel/src/icons/project/work-items-icon.tsx
new file mode 100644
index 0000000000..d48c8e58c5
--- /dev/null
+++ b/packages/propel/src/icons/project/work-items-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const WorkItemsIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/boolean-icon.tsx b/packages/propel/src/icons/properties/boolean-icon.tsx
new file mode 100644
index 0000000000..5c9588c90d
--- /dev/null
+++ b/packages/propel/src/icons/properties/boolean-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const BooleanPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/dropdown-icon.tsx b/packages/propel/src/icons/properties/dropdown-icon.tsx
new file mode 100644
index 0000000000..b0215524db
--- /dev/null
+++ b/packages/propel/src/icons/properties/dropdown-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const DropdownPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/due-date-icon.tsx b/packages/propel/src/icons/properties/due-date-icon.tsx
new file mode 100644
index 0000000000..d8f73c04a0
--- /dev/null
+++ b/packages/propel/src/icons/properties/due-date-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const DueDatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/duplicate-icon.tsx b/packages/propel/src/icons/properties/duplicate-icon.tsx
new file mode 100644
index 0000000000..8384fc8c13
--- /dev/null
+++ b/packages/propel/src/icons/properties/duplicate-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const DuplicatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/estimate-icon.tsx b/packages/propel/src/icons/properties/estimate-icon.tsx
new file mode 100644
index 0000000000..ad59eb02bd
--- /dev/null
+++ b/packages/propel/src/icons/properties/estimate-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const EstimatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/hash-icon.tsx b/packages/propel/src/icons/properties/hash-icon.tsx
new file mode 100644
index 0000000000..c218a79718
--- /dev/null
+++ b/packages/propel/src/icons/properties/hash-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const HashPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/index.ts b/packages/propel/src/icons/properties/index.ts
new file mode 100644
index 0000000000..52e36a7f47
--- /dev/null
+++ b/packages/propel/src/icons/properties/index.ts
@@ -0,0 +1,20 @@
+export * from "./boolean-icon";
+export * from "./dropdown-icon";
+export * from "./due-date-icon";
+export * from "./duplicate-icon";
+export * from "./estimate-icon";
+export * from "./hash-icon";
+export * from "./label-icon";
+export * from "./members-icon";
+export * from "./overdue-date-icon";
+export * from "./parent-icon";
+export * from "./priority-icon";
+export * from "./relates-to-icon";
+export * from "./relation-icon";
+export * from "./scope-icon";
+export * from "./start-date-icon";
+export * from "./state-icon";
+export * from "./user-circle-icon";
+export * from "./user-icon";
+export * from "./user-square-icon";
+export * from "./workflows-icon";
diff --git a/packages/propel/src/icons/properties/label-icon.tsx b/packages/propel/src/icons/properties/label-icon.tsx
new file mode 100644
index 0000000000..97bd7f5b73
--- /dev/null
+++ b/packages/propel/src/icons/properties/label-icon.tsx
@@ -0,0 +1,21 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const LabelPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/members-icon.tsx b/packages/propel/src/icons/properties/members-icon.tsx
new file mode 100644
index 0000000000..3627ec3a18
--- /dev/null
+++ b/packages/propel/src/icons/properties/members-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const MembersPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/overdue-date-icon.tsx b/packages/propel/src/icons/properties/overdue-date-icon.tsx
new file mode 100644
index 0000000000..1c4152c63e
--- /dev/null
+++ b/packages/propel/src/icons/properties/overdue-date-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const OverdueDatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/parent-icon.tsx b/packages/propel/src/icons/properties/parent-icon.tsx
new file mode 100644
index 0000000000..1104f24817
--- /dev/null
+++ b/packages/propel/src/icons/properties/parent-icon.tsx
@@ -0,0 +1,21 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const ParentPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/priority-icon.tsx b/packages/propel/src/icons/properties/priority-icon.tsx
new file mode 100644
index 0000000000..904235557d
--- /dev/null
+++ b/packages/propel/src/icons/properties/priority-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const PriorityPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/relates-to-icon.tsx b/packages/propel/src/icons/properties/relates-to-icon.tsx
new file mode 100644
index 0000000000..625999e6da
--- /dev/null
+++ b/packages/propel/src/icons/properties/relates-to-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const RelatesToPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/relation-icon.tsx b/packages/propel/src/icons/properties/relation-icon.tsx
new file mode 100644
index 0000000000..82326b2d04
--- /dev/null
+++ b/packages/propel/src/icons/properties/relation-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const RelationPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/scope-icon.tsx b/packages/propel/src/icons/properties/scope-icon.tsx
new file mode 100644
index 0000000000..0f66ee10a5
--- /dev/null
+++ b/packages/propel/src/icons/properties/scope-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const ScopePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/start-date-icon.tsx b/packages/propel/src/icons/properties/start-date-icon.tsx
new file mode 100644
index 0000000000..28741aecf1
--- /dev/null
+++ b/packages/propel/src/icons/properties/start-date-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const StartDatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/state-icon.tsx b/packages/propel/src/icons/properties/state-icon.tsx
new file mode 100644
index 0000000000..fc69eace62
--- /dev/null
+++ b/packages/propel/src/icons/properties/state-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const StatePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/user-circle-icon.tsx b/packages/propel/src/icons/properties/user-circle-icon.tsx
new file mode 100644
index 0000000000..06fd6f3eb1
--- /dev/null
+++ b/packages/propel/src/icons/properties/user-circle-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const UserCirclePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/user-icon.tsx b/packages/propel/src/icons/properties/user-icon.tsx
new file mode 100644
index 0000000000..d1dd3ca83c
--- /dev/null
+++ b/packages/propel/src/icons/properties/user-icon.tsx
@@ -0,0 +1,13 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const UserPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+);
diff --git a/packages/propel/src/icons/properties/user-square-icon.tsx b/packages/propel/src/icons/properties/user-square-icon.tsx
new file mode 100644
index 0000000000..3e7521f281
--- /dev/null
+++ b/packages/propel/src/icons/properties/user-square-icon.tsx
@@ -0,0 +1,17 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const UserSquarePropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => {
+ const clipPathId = React.useId();
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/propel/src/icons/properties/workflows-icon.tsx b/packages/propel/src/icons/properties/workflows-icon.tsx
new file mode 100644
index 0000000000..ed3a2b6bdb
--- /dev/null
+++ b/packages/propel/src/icons/properties/workflows-icon.tsx
@@ -0,0 +1,21 @@
+import * as React from "react";
+
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
+
+export const WorkflowsPropertyIcon: React.FC = ({ color = "currentColor", ...rest }) => (
+
+
+
+
+
+);
diff --git a/packages/propel/src/icons/registry.ts b/packages/propel/src/icons/registry.ts
new file mode 100644
index 0000000000..5bff858505
--- /dev/null
+++ b/packages/propel/src/icons/registry.ts
@@ -0,0 +1,115 @@
+import { AddIcon } from "./actions/add-icon";
+import { DefaultIcon } from "./default-icon";
+import { BoardLayoutIcon } from "./layouts/board-icon";
+import { CalendarLayoutIcon } from "./layouts/calendar-icon";
+import { CardLayoutIcon } from "./layouts/card-icon";
+import { GridLayoutIcon } from "./layouts/grid-icon";
+import { ListLayoutIcon } from "./layouts/list-icon";
+import { SheetLayoutIcon } from "./layouts/sheet-icon";
+import { TimelineLayoutIcon } from "./layouts/timeline-icon";
+import { CycleIcon } from "./project/cycle-icon";
+import { EpicIcon } from "./project/epic-icon";
+import { IntakeIcon } from "./project/intake-icon";
+import { ModuleIcon } from "./project/module-icon";
+import { PageIcon } from "./project/page-icon";
+import { ViewsIcon } from "./project/view-icon";
+import { WorkItemsIcon } from "./project/work-items-icon";
+import { BooleanPropertyIcon } from "./properties/boolean-icon";
+import { DropdownPropertyIcon } from "./properties/dropdown-icon";
+import { DueDatePropertyIcon } from "./properties/due-date-icon";
+import { DuplicatePropertyIcon } from "./properties/duplicate-icon";
+import { EstimatePropertyIcon } from "./properties/estimate-icon";
+import { HashPropertyIcon } from "./properties/hash-icon";
+import { LabelPropertyIcon } from "./properties/label-icon";
+import { MembersPropertyIcon } from "./properties/members-icon";
+import { OverdueDatePropertyIcon } from "./properties/overdue-date-icon";
+import { ParentPropertyIcon } from "./properties/parent-icon";
+import { PriorityPropertyIcon } from "./properties/priority-icon";
+import { RelatesToPropertyIcon } from "./properties/relates-to-icon";
+import { RelationPropertyIcon } from "./properties/relation-icon";
+import { ScopePropertyIcon } from "./properties/scope-icon";
+import { StartDatePropertyIcon } from "./properties/start-date-icon";
+import { StatePropertyIcon } from "./properties/state-icon";
+import { UserCirclePropertyIcon } from "./properties/user-circle-icon";
+import { UserPropertyIcon } from "./properties/user-icon";
+import { UserSquarePropertyIcon } from "./properties/user-square-icon";
+import { WorkflowsPropertyIcon } from "./properties/workflows-icon";
+import { PiChatLogo } from "./sub-brand/pi-chat";
+import { PlaneNewIcon } from "./sub-brand/plane-icon";
+import { WikiIcon } from "./sub-brand/wiki-icon";
+import { AnalyticsIcon } from "./workspace/analytics-icon";
+import { ArchiveIcon } from "./workspace/archive-icon";
+import { DashboardIcon } from "./workspace/dashboard-icon";
+import { DraftIcon } from "./workspace/draft-icon";
+import { HomeIcon } from "./workspace/home-icon";
+import { InboxIcon } from "./workspace/inbox-icon";
+import { ProjectIcon } from "./workspace/project-icon";
+import { YourWorkIcon } from "./workspace/your-work-icon";
+
+export const ICON_REGISTRY = {
+ // Sub-brand icons
+ "sub-brand.plane": PlaneNewIcon,
+ "sub-brand.wiki": WikiIcon,
+ "sub-brand.pi-chat": PiChatLogo,
+
+ // Workspace icons
+ "workspace.analytics": AnalyticsIcon,
+ "workspace.archive": ArchiveIcon,
+ "workspace.cycle": CycleIcon,
+ "workspace.dashboard": DashboardIcon,
+ "workspace.draft": DraftIcon,
+ "workspace.home": HomeIcon,
+ "workspace.inbox": InboxIcon,
+ "workspace.page": PageIcon,
+ "workspace.project": ProjectIcon,
+ "workspace.views": ViewsIcon,
+ "workspace.your-work": YourWorkIcon,
+
+ // Project icons
+ "project.cycle": CycleIcon,
+ "project.epic": EpicIcon,
+ "project.intake": IntakeIcon,
+ "project.module": ModuleIcon,
+ "project.page": PageIcon,
+ "project.view": ViewsIcon,
+ "project.work-items": WorkItemsIcon,
+
+ // Layout icons
+ "layout.calendar": CalendarLayoutIcon,
+ "layout.card": CardLayoutIcon,
+ "layout.timeline": TimelineLayoutIcon,
+ "layout.grid": GridLayoutIcon,
+ "layout.board": BoardLayoutIcon,
+ "layout.list": ListLayoutIcon,
+ "layout.sheet": SheetLayoutIcon,
+
+ // Property icons
+ "property.boolean": BooleanPropertyIcon,
+ "property.dropdown": DropdownPropertyIcon,
+ "property.due-date": DueDatePropertyIcon,
+ "property.duplicate": DuplicatePropertyIcon,
+ "property.estimate": EstimatePropertyIcon,
+ "property.hash": HashPropertyIcon,
+ "property.label": LabelPropertyIcon,
+ "property.members": MembersPropertyIcon,
+ "property.overdue-date": OverdueDatePropertyIcon,
+ "property.parent": ParentPropertyIcon,
+ "property.priority": PriorityPropertyIcon,
+ "property.relates-to": RelatesToPropertyIcon,
+ "property.relation": RelationPropertyIcon,
+ "property.scope": ScopePropertyIcon,
+ "property.start-date": StartDatePropertyIcon,
+ "property.state": StatePropertyIcon,
+ "property.user-circle": UserCirclePropertyIcon,
+ "property.user": UserPropertyIcon,
+ "property.user-square": UserSquarePropertyIcon,
+ "property.workflows": WorkflowsPropertyIcon,
+
+ // Action icons
+ "action.add": AddIcon,
+
+ // Default fallback
+ default: DefaultIcon,
+} as const;
+
+export type IconName = keyof typeof ICON_REGISTRY;
diff --git a/packages/propel/src/icons/sub-brand/index.ts b/packages/propel/src/icons/sub-brand/index.ts
new file mode 100644
index 0000000000..7a0d0cefb0
--- /dev/null
+++ b/packages/propel/src/icons/sub-brand/index.ts
@@ -0,0 +1,3 @@
+export * from "./pi-chat";
+export * from "./plane-icon";
+export * from "./wiki-icon";
diff --git a/packages/propel/src/icons/pi-chat.tsx b/packages/propel/src/icons/sub-brand/pi-chat.tsx
similarity index 82%
rename from packages/propel/src/icons/pi-chat.tsx
rename to packages/propel/src/icons/sub-brand/pi-chat.tsx
index e2e49a28f3..1f94770664 100644
--- a/packages/propel/src/icons/pi-chat.tsx
+++ b/packages/propel/src/icons/sub-brand/pi-chat.tsx
@@ -1,21 +1,15 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const PiChatLogo: React.FC = ({ width = "16", height = "16", className, color = "currentColor" }) => (
-
+
);
diff --git a/packages/propel/src/icons/plane-icon.tsx b/packages/propel/src/icons/sub-brand/plane-icon.tsx
similarity index 54%
rename from packages/propel/src/icons/plane-icon.tsx
rename to packages/propel/src/icons/sub-brand/plane-icon.tsx
index 113d2dfd04..e645dedf7a 100644
--- a/packages/propel/src/icons/plane-icon.tsx
+++ b/packages/propel/src/icons/sub-brand/plane-icon.tsx
@@ -1,22 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const PlaneNewIcon: React.FC = ({
- width = "16",
- height = "16",
- className,
- color = "currentColor",
-}) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/wiki-icon.tsx b/packages/propel/src/icons/sub-brand/wiki-icon.tsx
similarity index 54%
rename from packages/propel/src/icons/wiki-icon.tsx
rename to packages/propel/src/icons/sub-brand/wiki-icon.tsx
index 5a3b992c7f..8d534dc0d8 100644
--- a/packages/propel/src/icons/wiki-icon.tsx
+++ b/packages/propel/src/icons/sub-brand/wiki-icon.tsx
@@ -1,26 +1,17 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const WikiIcon: React.FC = ({ width = "16", height = "16", className, color = "currentColor" }) => (
-
-);
+
+ );
+};
diff --git a/packages/propel/src/icons/work-items-icon.tsx b/packages/propel/src/icons/work-items-icon.tsx
deleted file mode 100644
index f07145b335..0000000000
--- a/packages/propel/src/icons/work-items-icon.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as React from "react";
-
-import { ISvgIcons } from "./type";
-
-export const WorkItemsIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
-);
diff --git a/packages/propel/src/icons/analytics-icon.tsx b/packages/propel/src/icons/workspace/analytics-icon.tsx
similarity index 87%
rename from packages/propel/src/icons/analytics-icon.tsx
rename to packages/propel/src/icons/workspace/analytics-icon.tsx
index 4e1f650232..d0be0ebb3d 100644
--- a/packages/propel/src/icons/analytics-icon.tsx
+++ b/packages/propel/src/icons/workspace/analytics-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const AnalyticsIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/archive-icon.tsx b/packages/propel/src/icons/workspace/archive-icon.tsx
similarity index 89%
rename from packages/propel/src/icons/archive-icon.tsx
rename to packages/propel/src/icons/workspace/archive-icon.tsx
index b83ce69a85..1d359d3601 100644
--- a/packages/propel/src/icons/archive-icon.tsx
+++ b/packages/propel/src/icons/workspace/archive-icon.tsx
@@ -1,12 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const ArchiveIcon: React.FC = ({ className = "text-current", color = "currentColor", ...rest }) => (
-
+
);
diff --git a/packages/propel/src/icons/dashboard-icon.tsx b/packages/propel/src/icons/workspace/dashboard-icon.tsx
similarity index 86%
rename from packages/propel/src/icons/dashboard-icon.tsx
rename to packages/propel/src/icons/workspace/dashboard-icon.tsx
index a451d79840..fab6d145b3 100644
--- a/packages/propel/src/icons/dashboard-icon.tsx
+++ b/packages/propel/src/icons/workspace/dashboard-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const DashboardIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/draft-icon.tsx b/packages/propel/src/icons/workspace/draft-icon.tsx
similarity index 82%
rename from packages/propel/src/icons/draft-icon.tsx
rename to packages/propel/src/icons/workspace/draft-icon.tsx
index d821fa358c..bec049e6ba 100644
--- a/packages/propel/src/icons/draft-icon.tsx
+++ b/packages/propel/src/icons/workspace/draft-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const DraftIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/home-icon.tsx b/packages/propel/src/icons/workspace/home-icon.tsx
similarity index 91%
rename from packages/propel/src/icons/home-icon.tsx
rename to packages/propel/src/icons/workspace/home-icon.tsx
index dfcd1a1821..cfc3c06f57 100644
--- a/packages/propel/src/icons/home-icon.tsx
+++ b/packages/propel/src/icons/workspace/home-icon.tsx
@@ -1,19 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const HomeIcon: React.FC = ({ width = "16", height = "16", className, color = "currentColor" }) => (
-
+
);
diff --git a/packages/propel/src/icons/inbox-icon.tsx b/packages/propel/src/icons/workspace/inbox-icon.tsx
similarity index 88%
rename from packages/propel/src/icons/inbox-icon.tsx
rename to packages/propel/src/icons/workspace/inbox-icon.tsx
index e6a1c20eb9..c4a6151b43 100644
--- a/packages/propel/src/icons/inbox-icon.tsx
+++ b/packages/propel/src/icons/workspace/inbox-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const InboxIcon: React.FC = ({
- width = "16",
- height = "16",
- className,
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/workspace/index.ts b/packages/propel/src/icons/workspace/index.ts
new file mode 100644
index 0000000000..dd1b8a0599
--- /dev/null
+++ b/packages/propel/src/icons/workspace/index.ts
@@ -0,0 +1,8 @@
+export * from "./analytics-icon";
+export * from "./archive-icon";
+export * from "./dashboard-icon";
+export * from "./draft-icon";
+export * from "./home-icon";
+export * from "./inbox-icon";
+export * from "./project-icon";
+export * from "./your-work-icon";
diff --git a/packages/propel/src/icons/project-icon.tsx b/packages/propel/src/icons/workspace/project-icon.tsx
similarity index 91%
rename from packages/propel/src/icons/project-icon.tsx
rename to packages/propel/src/icons/workspace/project-icon.tsx
index 8a9ad6280d..357f033393 100644
--- a/packages/propel/src/icons/project-icon.tsx
+++ b/packages/propel/src/icons/workspace/project-icon.tsx
@@ -1,26 +1,13 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const ProjectIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);
diff --git a/packages/propel/src/icons/your-work-icon.tsx b/packages/propel/src/icons/workspace/your-work-icon.tsx
similarity index 81%
rename from packages/propel/src/icons/your-work-icon.tsx
rename to packages/propel/src/icons/workspace/your-work-icon.tsx
index 2f003a2396..75a2ea79ec 100644
--- a/packages/propel/src/icons/your-work-icon.tsx
+++ b/packages/propel/src/icons/workspace/your-work-icon.tsx
@@ -1,23 +1,10 @@
import * as React from "react";
-import { ISvgIcons } from "./type";
+import { IconWrapper } from "../icon-wrapper";
+import { ISvgIcons } from "../type";
-export const YourWorkIcon: React.FC = ({
- width = "16",
- height = "16",
- className = "text-current",
- color = "currentColor",
- ...rest
-}) => (
-
+
);