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 f75edf89e5c..9a4b4122f7b 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx
@@ -6,7 +6,8 @@ import { useRouter } from "next/navigation";
// plane package imports
import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
-import { type TabItem, Tabs } from "@plane/ui";
+import { Tabs } from "@plane/propel/tabs";
+import { TAnalyticsTabsBase } from "@plane/types";
// components
import AnalyticsFilterActions from "@/components/analytics/analytics-filter-actions";
import { PageHead } from "@/components/core/page-title";
@@ -59,20 +60,11 @@ const AnalyticsPage = observer((props: Props) => {
? t(`workspace_analytics.page_label`, { workspace: currentWorkspace?.name })
: undefined;
const ANALYTICS_TABS = useMemo(() => getAnalyticsTabs(t), [t]);
- const tabs: TabItem[] = useMemo(
- () =>
- ANALYTICS_TABS.map((tab) => ({
- key: tab.key,
- label: tab.label,
- content: ,
- onClick: () => {
- router.push(`/${currentWorkspace?.slug}/analytics/${tab.key}`);
- },
- disabled: tab.isDisabled,
- })),
- [ANALYTICS_TABS, router, currentWorkspace?.slug]
- );
- const defaultTab = tabId || ANALYTICS_TABS[0].key;
+ const defaultTab = (tabId as TAnalyticsTabsBase) || ANALYTICS_TABS[0].key;
+
+ const handleTabChange = (value: TAnalyticsTabsBase) => {
+ router.push(`/${currentWorkspace?.slug}/analytics/${value}`);
+ };
return (
<>
@@ -80,19 +72,25 @@ const AnalyticsPage = observer((props: Props) => {
{workspaceProjectIds && (
<>
{workspaceProjectIds.length > 0 || loader === "init-loader" ? (
-
-
}
- />
+
+
+
+
+ {ANALYTICS_TABS.map((tab) => (
+
+ {tab.label}
+
+ ))}
+
+
+
+
+ {ANALYTICS_TABS.map((tab) => (
+
+
+
+ ))}
+
) : (
= observer((props) => {
);
return (
-
-
-
-
-
-
-
-
+
+
+
+
+
+
);
});
diff --git a/apps/web/core/components/core/image-picker-popover.tsx b/apps/web/core/components/core/image-picker-popover.tsx
index 925e24b895d..7521a37da4d 100644
--- a/apps/web/core/components/core/image-picker-popover.tsx
+++ b/apps/web/core/components/core/image-picker-popover.tsx
@@ -7,13 +7,13 @@ import { useParams } from "next/navigation";
import { useDropzone } from "react-dropzone";
import { Control, Controller } from "react-hook-form";
import useSWR from "swr";
-import { Tab, Popover } from "@headlessui/react";
+import { Popover } from "@headlessui/react";
// plane imports
import { ACCEPTED_COVER_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants";
import { useOutsideClickDetector } from "@plane/hooks";
+import { Tabs } from "@plane/propel/tabs";
import { EFileAssetType } from "@plane/types";
import { Button, Input, Loader, TOAST_TYPE, setToast } from "@plane/ui";
-// helpers
import { getFileURL } from "@plane/utils";
// hooks
import { useDropdownKeyDown } from "@/hooks/use-dropdown-key-down";
@@ -179,206 +179,203 @@ export const ImagePickerPopover: React.FC = observer((props) => {
>
-
-
+
+
{tabOptions.map((tab) => {
if (!unsplashImages && unsplashError && tab.key === "unsplash") return null;
if (projectCoverImages && projectCoverImages.length === 0 && tab.key === "images") return null;
return (
-
- `rounded px-4 py-1 text-center text-sm outline-none transition-colors ${
- selected ? "bg-custom-primary text-white" : "text-custom-text-100"
- }`
- }
- >
+
{tab.title}
-
+
);
})}
-
-
- {(unsplashImages || !unsplashError) && (
-
-
-
(
- {
- if (e.key === "Enter") {
- e.preventDefault();
- setSearchParams(formData.search);
- }
+
+
+
+
+
+ (
+ {
+ if (e.key === "Enter") {
+ e.preventDefault();
+ setSearchParams(value);
+ }
+ }}
+ value={value}
+ onChange={(e) => {
+ onChange(e.target.value);
+ setFormData({ ...formData, search: e.target.value });
+ }}
+ ref={ref}
+ placeholder="Search for images"
+ className="w-full text-sm"
+ />
+ )}
+ />
+
+
+ {unsplashImages ? (
+ unsplashImages.length > 0 ? (
+
+ {unsplashImages.map((image) => (
+
{
+ setIsOpen(false);
+ onChange(image.urls.regular);
}}
- value={value}
- onChange={(e) => setFormData({ ...formData, search: e.target.value })}
- ref={ref}
- placeholder="Search for images"
- className="w-full text-sm"
- />
- )}
- />
-
-
- {unsplashImages ? (
- unsplashImages.length > 0 ? (
-
- {unsplashImages.map((image) => (
-
{
- setIsOpen(false);
- onChange(image.urls.regular);
- }}
- >
-

-
- ))}
-
- ) : (
-
No images found.
- )
- ) : (
-
-
-
-
-
-
-
-
-
-
- )}
-
- )}
- {(!projectCoverImages || projectCoverImages.length !== 0) && (
-
- {projectCoverImages ? (
- projectCoverImages.length > 0 ? (
-
- {projectCoverImages.map((image, index) => (
-
{
- setIsOpen(false);
- onChange(image);
- }}
- >
-

-
- ))}
-
- ) : (
- No images found.
- )
- ) : (
-
-
-
-
-
-
-
-
-
-
- )}
-
- )}
-
-
-
-
-
- {image !== null || (value && value !== "") ? (
- <>
-
+
- >
- ) : (
-
-
- {isDragActive ? "Drop image here to upload" : "Drag & drop image here"}
-
- )}
-
-
+ ))}
-
- {fileRejections.length > 0 && (
-
- {fileRejections[0].errors[0].code === "file-too-large"
- ? "The image size cannot exceed 5 MB."
- : "Please upload a file in a valid format."}
-
- )}
+ ) : (
+
No images found.
+ )
+ ) : (
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
- File formats supported- .jpeg, .jpg, .png, .webp
+ {(!projectCoverImages || projectCoverImages.length !== 0) && (
+
+ {projectCoverImages ? (
+ projectCoverImages.length > 0 ? (
+
+ {projectCoverImages.map((image, index) => (
+
{
+ setIsOpen(false);
+ onChange(image);
+ }}
+ >
+

+
+ ))}
+
+ ) : (
+ No images found.
+ )
+ ) : (
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ )}
-
-
-
)}
diff --git a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
index 0a8bfa3ff9a..3d3c32c506e 100644
--- a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
+++ b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
@@ -4,17 +4,16 @@ import { FC, Fragment, useCallback, useRef, useState } from "react";
import isEmpty from "lodash/isEmpty";
import { observer } from "mobx-react";
import { CalendarCheck } from "lucide-react";
-// headless ui
-import { Tab } from "@headlessui/react";
// plane imports
import { useTranslation } from "@plane/i18n";
import { PriorityIcon } from "@plane/propel/icons";
+import { Tabs } from "@plane/propel/tabs";
import { Tooltip } from "@plane/propel/tooltip";
import { TWorkItemFilterCondition } from "@plane/shared-state";
import { EIssuesStoreType, ICycle } from "@plane/types";
// ui
import { Loader, Avatar } from "@plane/ui";
-import { cn, renderFormattedDate, renderFormattedDateWithoutYear, getFileURL } from "@plane/utils";
+import { renderFormattedDate, renderFormattedDateWithoutYear, getFileURL } from "@plane/utils";
// components
import { SingleProgressStats } from "@/components/core/sidebar/single-progress-stats";
import { StateDropdown } from "@/components/dropdowns/state/dropdown";
@@ -40,10 +39,12 @@ export type ActiveCycleStatsProps = {
cycleIssueDetails: ActiveCycleIssueDetails;
};
+export type TActiveCycleStatsTab = "Priority-Issues" | "Assignees" | "Labels";
+
export const ActiveCycleStats: FC = observer((props) => {
const { workspaceSlug, projectId, cycle, cycleId, handleFiltersUpdate, cycleIssueDetails } = props;
// local storage
- const { storedValue: tab, setValue: setTab } = useLocalStorage("activeCycleTab", "Assignees");
+ const { storedValue: tab, setValue: setTab } = useLocalStorage("activeCycleTab", "Assignees");
// refs
const issuesContainerRef = useRef(null);
// states
@@ -55,18 +56,6 @@ export const ActiveCycleStats: FC = observer((props) => {
const assigneesResolvedPath = useResolvedAssetPath({ basePath: "/empty-state/active-cycle/assignee" });
const labelsResolvedPath = useResolvedAssetPath({ basePath: "/empty-state/active-cycle/label" });
- const currentValue = (tab: string | null) => {
- switch (tab) {
- case "Priority-Issues":
- return 0;
- case "Assignees":
- return 1;
- case "Labels":
- return 2;
- default:
- return 0;
- }
- };
const {
issues: { fetchNextActiveCycleIssues },
} = useIssues(EIssuesStoreType.CYCLE);
@@ -74,6 +63,7 @@ export const ActiveCycleStats: FC = observer((props) => {
issue: { getIssueById },
setPeekIssue,
} = useIssueDetail();
+
const loadMoreIssues = useCallback(() => {
if (!cycleId) return;
fetchNextActiveCycleIssues(workspaceSlug, projectId, cycleId);
@@ -90,78 +80,27 @@ export const ActiveCycleStats: FC = observer((props) => {
);
+ const handleTabChange = (value: TActiveCycleStatsTab) => {
+ setTab(value);
+ };
+
return cycleId ? (
-
{
- switch (i) {
- case 0:
- return setTab("Priority-Issues");
- case 1:
- return setTab("Assignees");
- case 2:
- return setTab("Labels");
-
- default:
- return setTab("Priority-Issues");
- }
- }}
- >
-
-
- cn(
- "relative z-[1] font-semibold text-xs rounded-[3px] py-1.5 text-custom-text-400 focus:outline-none transition duration-500",
- {
- "text-custom-text-300 bg-custom-background-100": selected,
- "hover:text-custom-text-300": !selected,
- }
- )
- }
- >
+
+
+
{t("project_cycles.active_cycle.priority_issue")}
-
-
- cn(
- "relative z-[1] font-semibold text-xs rounded-[3px] py-1.5 text-custom-text-400 focus:outline-none transition duration-500",
- {
- "text-custom-text-300 bg-custom-background-100": selected,
- "hover:text-custom-text-300": !selected,
- }
- )
- }
- >
+
+
{t("project_cycles.active_cycle.assignees")}
-
-
- cn(
- "relative z-[1] font-semibold text-xs rounded-[3px] py-1.5 text-custom-text-400 focus:outline-none transition duration-500",
- {
- "text-custom-text-300 bg-custom-background-100": selected,
- "hover:text-custom-text-300": !selected,
- }
- )
- }
- >
+
+
{t("project_cycles.active_cycle.labels")}
-
-
+
+
-
-
+
+
= observer((props) => {
loaders
)}
-
+
+
-
+
+
{cycle && !isEmpty(cycle.distribution) ? (
cycle?.distribution?.assignees && cycle.distribution.assignees.length > 0 ? (
cycle.distribution?.assignees?.map((assignee, index) => {
@@ -313,12 +251,11 @@ export const ActiveCycleStats: FC
= observer((props) => {
) : (
loaders
)}
-
+
+
-
+
+
{cycle && !isEmpty(cycle.distribution) ? (
cycle?.distribution?.labels && cycle.distribution.labels.length > 0 ? (
cycle.distribution.labels?.map((label, index) => (
@@ -356,9 +293,9 @@ export const ActiveCycleStats: FC
= observer((props) => {
) : (
loaders
)}
-
-
-
+
+
+
) : (
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 fbea2e7be31..f2735b2dfcd 100644
--- a/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx
+++ b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx
@@ -145,9 +145,7 @@ export const CycleAnalyticsProgress: FC = observer((pro
cycleId
)}
isEditable={Boolean(!peekCycle) && cycleFilter !== undefined}
- noBackground={false}
plotType={plotType}
- roundedTab={false}
selectedFilters={{
assignees: selectedAssignees,
labels: selectedLabels,
diff --git a/apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx b/apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx
index eaa60b6bd4b..0f64dd51c87 100644
--- a/apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx
+++ b/apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx
@@ -2,12 +2,12 @@
import { FC } from "react";
import { observer } from "mobx-react";
-import { Tab } from "@headlessui/react";
// plane imports
import { useTranslation } from "@plane/i18n";
+import { Tabs } from "@plane/propel/tabs";
import { TWorkItemFilterCondition } from "@plane/shared-state";
import { TCycleDistribution, TCycleEstimateDistribution, TCyclePlotType } from "@plane/types";
-import { cn, toFilterArray } from "@plane/utils";
+import { toFilterArray } from "@plane/utils";
// components
import { AssigneeStatComponent, TAssigneeData } from "@/components/core/sidebar/progress-stats/assignee";
import { LabelStatComponent, TLabelData } from "@/components/core/sidebar/progress-stats/label";
@@ -27,9 +27,7 @@ type TCycleProgressStats = {
groupedIssues: Record;
handleFiltersUpdate: (condition: TWorkItemFilterCondition) => void;
isEditable?: boolean;
- noBackground?: boolean;
plotType: TCyclePlotType;
- roundedTab?: boolean;
selectedFilters: TSelectedFilterProgressStats;
size?: "xs" | "sm";
totalIssuesCount: number;
@@ -42,9 +40,7 @@ export const CycleProgressStats: FC = observer((props) => {
groupedIssues,
handleFiltersUpdate,
isEditable = false,
- noBackground = false,
plotType,
- roundedTab = false,
selectedFilters,
size = "sm",
totalIssuesCount,
@@ -57,7 +53,6 @@ export const CycleProgressStats: FC = observer((props) => {
"stat-assignees"
);
// derived values
- const currentTabIndex = (tab: string): number => PROGRESS_STATS.findIndex((stat) => stat.key === tab);
const currentDistribution = distribution as TCycleDistribution;
const currentEstimateDistribution = distribution as TCycleEstimateDistribution;
const selectedAssigneeIds = toFilterArray(selectedFilters?.assignees?.value || []) as string[];
@@ -118,60 +113,43 @@ export const CycleProgressStats: FC = observer((props) => {
return (
-
-
+
+
{PROGRESS_STATS.map((stat) => (
- setCycleTab(stat.key)}
- >
+
{t(stat.i18n_title)}
-
+
))}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
});
diff --git a/apps/web/core/components/license/modal/card/base-paid-plan-card.tsx b/apps/web/core/components/license/modal/card/base-paid-plan-card.tsx
index 340042427b6..f96f2091e60 100644
--- a/apps/web/core/components/license/modal/card/base-paid-plan-card.tsx
+++ b/apps/web/core/components/license/modal/card/base-paid-plan-card.tsx
@@ -3,8 +3,8 @@
import { FC, useState } from "react";
import { observer } from "mobx-react";
import { CheckCircle } from "lucide-react";
-import { Tab } from "@headlessui/react";
// plane imports
+import { Tabs } from "@plane/propel/tabs";
// helpers
import { EProductSubscriptionEnum, TBillingFrequency, TSubscriptionPrice } from "@plane/types";
import { getSubscriptionBackgroundColor, getUpgradeCardVariantStyle } from "@plane/ui";
@@ -40,59 +40,46 @@ export const BasePaidPlanCard: FC = observer((props) =>
return (
-
-
-
+
+
+
{prices.map((price: TSubscriptionPrice) => (
-
- cn(
- "w-full rounded py-1 text-sm font-medium leading-5",
- selected
- ? "bg-custom-background-100 text-custom-text-100 shadow"
- : "text-custom-text-300 hover:text-custom-text-200"
- )
- }
- onClick={() => setSelectedPlan(price.recurring)}
- >
+
{renderPriceContent(price)}
-
+
))}
-
-
-
+
+
{prices.map((price: TSubscriptionPrice) => (
-
-
+
+
Plane {planeName}
{renderActionButton(price)}
-
-
{`Everything in ${basePlan} +`}
-
- {features.map((feature) => (
- -
-
-
- {feature}
-
-
- ))}
-
- {extraFeatures &&
{extraFeatures}
}
-
-
+
+ ))}
+
+
+
+
+
{`Everything in ${basePlan} +`}
+
+ {features.map((feature) => (
+ -
+
+
+ {feature}
+
+
))}
-
-
+
+ {extraFeatures &&
{extraFeatures}
}
+
);
});
diff --git a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
index 7854298c28a..0292c9bc11c 100644
--- a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
+++ b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
@@ -207,9 +207,7 @@ export const ModuleAnalyticsProgress: FC = observer((p
)}
isEditable={Boolean(!peekModule) && moduleFilter !== undefined}
moduleId={moduleId}
- noBackground={false}
plotType={plotType}
- roundedTab={false}
selectedFilters={{
assignees: selectedAssignees,
labels: selectedLabels,
diff --git a/apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx b/apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx
index ceb11e3ea1c..2e26b776f27 100644
--- a/apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx
+++ b/apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx
@@ -2,8 +2,8 @@
import { FC } from "react";
import { observer } from "mobx-react";
-import { Tab } from "@headlessui/react";
import { useTranslation } from "@plane/i18n";
+import { Tabs } from "@plane/propel/tabs";
import { TWorkItemFilterCondition } from "@plane/shared-state";
import { TModuleDistribution, TModuleEstimateDistribution, TModulePlotType } from "@plane/types";
import { cn, toFilterArray } from "@plane/utils";
@@ -40,9 +40,7 @@ export const ModuleProgressStats: FC = observer((props) =>
handleFiltersUpdate,
isEditable = false,
moduleId,
- noBackground = false,
plotType,
- roundedTab = false,
selectedFilters,
size = "sm",
totalIssuesCount,
@@ -55,7 +53,6 @@ export const ModuleProgressStats: FC = observer((props) =>
"stat-assignees"
);
// derived values
- const currentTabIndex = (tab: string): number => PROGRESS_STATS.findIndex((stat) => stat.key === tab);
const currentDistribution = distribution as TModuleDistribution;
const currentEstimateDistribution = distribution as TModuleEstimateDistribution;
const selectedAssigneeIds = toFilterArray(selectedFilters?.assignees?.value || []) as string[];
@@ -116,60 +113,42 @@ export const ModuleProgressStats: FC = observer((props) =>
return (
-
-
+
+
{PROGRESS_STATS.map((stat) => (
- setModuleTab(stat.key)}
- >
+
{t(stat.i18n_title)}
-
+
))}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
);
});
diff --git a/apps/web/core/components/pages/navigation-pane/root.tsx b/apps/web/core/components/pages/navigation-pane/root.tsx
index 9a0884b8bc6..a4daa6832d4 100644
--- a/apps/web/core/components/pages/navigation-pane/root.tsx
+++ b/apps/web/core/components/pages/navigation-pane/root.tsx
@@ -2,9 +2,9 @@ import React, { useCallback } from "react";
import { observer } from "mobx-react";
import { useRouter, useSearchParams } from "next/navigation";
import { ArrowRightCircle } from "lucide-react";
-import { Tab } from "@headlessui/react";
-// plane imports
import { useTranslation } from "@plane/i18n";
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "@plane/propel/tabs";
+// plane imports
import { Tooltip } from "@plane/propel/tooltip";
// hooks
import { useQueryParams } from "@/hooks/use-query-params";
@@ -49,7 +49,6 @@ export const PageNavigationPaneRoot: React.FC = observer((props) => {
PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM
) as TPageNavigationPaneTab | null;
const activeTab: TPageNavigationPaneTab = navigationPaneQueryParam || "outline";
- const selectedIndex = PAGE_NAVIGATION_PANE_TAB_KEYS.indexOf(activeTab);
// Check if any extension is currently active based on query parameters
const ActiveExtension = extensions.find((extension) => {
@@ -69,8 +68,8 @@ export const PageNavigationPaneRoot: React.FC = observer((props) => {
const { t } = useTranslation();
const handleTabChange = useCallback(
- (index: number) => {
- const updatedTab = PAGE_NAVIGATION_PANE_TAB_KEYS[index];
+ (value: TPageNavigationPaneTab) => {
+ const updatedTab = value;
const isUpdatedTabInfo = updatedTab === "info";
const updatedRoute = updateQueryParams({
paramsToAdd: { [PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM]: updatedTab },
@@ -106,10 +105,14 @@ export const PageNavigationPaneRoot: React.FC = observer((props) => {
{ActiveExtension ? (
) : showNavigationTabs ? (
-
+
-
+
) : null}
diff --git a/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx
index f551f07c613..2da1bed8ed1 100644
--- a/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx
+++ b/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx
@@ -107,13 +107,13 @@ export const PageNavigationPaneAssetsTabPanel: React.FC = observer((props
editor: { assetsList },
} = page;
- if (assetsList.length === 0) return ;
-
return (
-
- {assetsList?.map((asset) => (
-
- ))}
+
+ {assetsList?.length === 0 ? (
+
+ ) : (
+ assetsList?.map((asset) =>
)
+ )}
);
});
diff --git a/apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx
index 6c4b4f28c14..f88c31bdde7 100644
--- a/apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx
+++ b/apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import { Tab } from "@headlessui/react";
+import { Tabs } from "@plane/propel/tabs";
// components
import type { TPageRootHandlers } from "@/components/pages/editor/page-root";
// plane web imports
@@ -21,19 +21,15 @@ export const PageNavigationPaneTabPanelsRoot: React.FC
= (props) => {
const { page, versionHistory } = props;
return (
-
+ <>
{ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => (
-
+
{tab.key === "outline" && }
{tab.key === "info" && }
{tab.key === "assets" && }
-
+
))}
-
+ >
);
};
diff --git a/apps/web/core/components/pages/navigation-pane/tabs-list.tsx b/apps/web/core/components/pages/navigation-pane/tabs-list.tsx
index bf438321683..c4e201e9f47 100644
--- a/apps/web/core/components/pages/navigation-pane/tabs-list.tsx
+++ b/apps/web/core/components/pages/navigation-pane/tabs-list.tsx
@@ -1,6 +1,6 @@
-import { Tab } from "@headlessui/react";
-// plane imports
import { useTranslation } from "@plane/i18n";
+import { Tabs } from "@plane/propel/tabs";
+// plane imports
// plane web components
import { ORDERED_PAGE_NAVIGATION_TABS_LIST } from "@/plane-web/components/pages/navigation-pane";
@@ -9,29 +9,12 @@ export const PageNavigationPaneTabsList = () => {
const { t } = useTranslation();
return (
-
- {({ selectedIndex }) => (
- <>
- {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => (
-
- {t(tab.i18n_label)}
-
- ))}
- {/* active tab indicator */}
-
- >
- )}
-
+
+ {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => (
+
+ {t(tab.i18n_label)}
+
+ ))}
+
);
};
diff --git a/apps/web/core/components/pages/version/editor.tsx b/apps/web/core/components/pages/version/editor.tsx
index d001072dbbe..c484a4ee5cb 100644
--- a/apps/web/core/components/pages/version/editor.tsx
+++ b/apps/web/core/components/pages/version/editor.tsx
@@ -3,8 +3,8 @@ import { useParams } from "next/navigation";
// plane imports
import type { TDisplayConfig } from "@plane/editor";
import type { JSONContent, TPageVersion } from "@plane/types";
-import { isJSONContentEmpty } from "@plane/utils";
import { Loader } from "@plane/ui";
+import { isJSONContentEmpty } from "@plane/utils";
// components
import { DocumentEditor } from "@/components/editor/document/editor";
// hooks
diff --git a/packages/propel/package.json b/packages/propel/package.json
index 6650905bb26..a4155131eee 100644
--- a/packages/propel/package.json
+++ b/packages/propel/package.json
@@ -79,4 +79,4 @@
"tsdown": "catalog:",
"typescript": "catalog:"
}
-}
+}
\ No newline at end of file