diff --git a/packages/tailwind-config-custom/tailwind.config.js b/packages/tailwind-config-custom/tailwind.config.js index a708a6221..7a821c76a 100644 --- a/packages/tailwind-config-custom/tailwind.config.js +++ b/packages/tailwind-config-custom/tailwind.config.js @@ -440,8 +440,8 @@ module.exports = { const newUtilities = { // Mobile screens '.px-page-x': { - paddingLeft: '0.675rem', - paddingRight: '0.675rem', + paddingLeft: '1.25rem', + paddingRight: '1.25rem', }, // Medium screens (768px and up) '@media (min-width: 768px)': { diff --git a/packages/ui/src/card/card.tsx b/packages/ui/src/card/card.tsx new file mode 100644 index 000000000..6030e65bb --- /dev/null +++ b/packages/ui/src/card/card.tsx @@ -0,0 +1,41 @@ +import * as React from "react"; +import { cn } from "../../helpers"; +import { + ECardDirection, + ECardSpacing, + ECardVariant, + getCardStyle, + TCardDirection, + TCardSpacing, + TCardVariant, +} from "./helper"; + +export interface CardProps { + variant?: TCardVariant; + spacing?: TCardSpacing; + direction?: TCardDirection; + className?: string; + children: React.ReactNode; +} + +const Card = React.forwardRef((props, ref) => { + const { + variant = ECardVariant.WITH_SHADOW, + direction = ECardDirection.COLUMN, + className = "", + spacing = ECardSpacing.LG, + children, + ...rest + } = props; + + const style = getCardStyle(variant, spacing, direction); + return ( +
+ {children} +
+ ); +}); + +Card.displayName = "plane-ui-card"; + +export { Card, ECardVariant, ECardSpacing, ECardDirection }; diff --git a/packages/ui/src/card/helper.tsx b/packages/ui/src/card/helper.tsx new file mode 100644 index 000000000..8b80d0d93 --- /dev/null +++ b/packages/ui/src/card/helper.tsx @@ -0,0 +1,36 @@ +export enum ECardVariant { + WITHOUT_SHADOW = "without-shadow", + WITH_SHADOW = "with-shadow", +} +export enum ECardDirection { + ROW = "row", + COLUMN = "column", +} +export enum ECardSpacing { + SM = "sm", + LG = "lg", +} +export type TCardVariant = ECardVariant.WITHOUT_SHADOW | ECardVariant.WITH_SHADOW; +export type TCardDirection = ECardDirection.ROW | ECardDirection.COLUMN; +export type TCardSpacing = ECardSpacing.SM | ECardSpacing.LG; + +export interface ICardProperties { + [key: string]: string; +} + +const DEFAULT_STYLE = + "bg-custom-background-100 rounded-lg border-[0.5px] border-custom-border-200 w-full flex flex-col"; +export const containerStyle: ICardProperties = { + [ECardVariant.WITHOUT_SHADOW]: "", + [ECardVariant.WITH_SHADOW]: "hover:shadow-custom-shadow-4xl duration-300", +}; +export const spacings = { + [ECardSpacing.SM]: "p-4", + [ECardSpacing.LG]: "p-6", +}; +export const directions = { + [ECardDirection.ROW]: "flex-row space-x-3", + [ECardDirection.COLUMN]: "flex-col space-y-3", +}; +export const getCardStyle = (variant: TCardVariant, spacing: TCardSpacing, direction: TCardDirection) => + DEFAULT_STYLE + " " + directions[direction] + " " + containerStyle[variant] + " " + spacings[spacing]; diff --git a/packages/ui/src/card/index.ts b/packages/ui/src/card/index.ts new file mode 100644 index 000000000..1d243e763 --- /dev/null +++ b/packages/ui/src/card/index.ts @@ -0,0 +1 @@ +export * from "./card"; diff --git a/packages/ui/src/content-wrapper/content-wrapper.tsx b/packages/ui/src/content-wrapper/content-wrapper.tsx new file mode 100644 index 000000000..e081dcc50 --- /dev/null +++ b/packages/ui/src/content-wrapper/content-wrapper.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { cn } from "../../helpers"; +import { Row } from "../row"; +import { ERowVariant, TRowVariant } from "../row/helper"; + +export interface ContentWrapperProps extends React.HTMLAttributes { + variant?: TRowVariant; + className?: string; + children: React.ReactNode; +} +const DEFAULT_STYLE = "flex flex-col vertical-scrollbar scrollbar-lg h-full w-full overflow-y-auto"; + +const ContentWrapper = React.forwardRef((props, ref) => { + const { variant = ERowVariant.REGULAR, className = "", children, ...rest } = props; + + return ( + + {children} + + ); +}); + +ContentWrapper.displayName = "plane-ui-wrapper"; + +export { ContentWrapper }; diff --git a/packages/ui/src/content-wrapper/index.ts b/packages/ui/src/content-wrapper/index.ts new file mode 100644 index 000000000..14eaf12a4 --- /dev/null +++ b/packages/ui/src/content-wrapper/index.ts @@ -0,0 +1 @@ +export * from "./content-wrapper"; diff --git a/packages/ui/src/header/header.tsx b/packages/ui/src/header/header.tsx index 97b7ed2eb..ac2bd2746 100644 --- a/packages/ui/src/header/header.tsx +++ b/packages/ui/src/header/header.tsx @@ -1,39 +1,51 @@ import * as React from "react"; import { cn } from "../../helpers"; import { EHeaderVariant, getHeaderStyle, THeaderVariant } from "./helper"; -import { ERowVariant, CustomRow } from "../row"; +import { ERowVariant, Row } from "../row"; -export interface CustomHeaderProps { +export interface HeaderProps { variant?: THeaderVariant; setHeight?: boolean; className?: string; children: React.ReactNode; + showOnMobile?: boolean; } -const CustomHeader = (props: CustomHeaderProps) => { - const { variant = EHeaderVariant.PRIMARY, className = "", setHeight = true, children, ...rest } = props; +const Header = (props: HeaderProps) => { + const { + variant = EHeaderVariant.PRIMARY, + className = "", + showOnMobile = true, + setHeight = true, + children, + ...rest + } = props; - const style = getHeaderStyle(variant, setHeight); + const style = getHeaderStyle(variant, setHeight, showOnMobile); return ( - {children} - + ); }; -const LeftItem = (props: CustomHeaderProps) => ( -
{props.children}
+const LeftItem = (props: HeaderProps) => ( +
+ {props.children} +
); -const RightItem = (props: CustomHeaderProps) => ( -
{props.children}
+const RightItem = (props: HeaderProps) => ( +
{props.children}
); -CustomHeader.LeftItem = LeftItem; -CustomHeader.RightItem = RightItem; -CustomHeader.displayName = "plane-ui-header"; +Header.LeftItem = LeftItem; +Header.RightItem = RightItem; +Header.displayName = "plane-ui-header"; -export { CustomHeader, EHeaderVariant }; +export { Header, EHeaderVariant }; diff --git a/packages/ui/src/header/helper.tsx b/packages/ui/src/header/helper.tsx index 22adc646b..b833f899f 100644 --- a/packages/ui/src/header/helper.tsx +++ b/packages/ui/src/header/helper.tsx @@ -11,15 +11,16 @@ export interface IHeaderProperties { export const headerStyle: IHeaderProperties = { [EHeaderVariant.PRIMARY]: "relative flex w-full flex-shrink-0 flex-row items-center justify-between gap-x-2 gap-y-4 bg-custom-sidebar-background-100", - [EHeaderVariant.SECONDARY]: "block !py-0 overflow-y-hidden border-b border-custom-border-200", - [EHeaderVariant.TERNARY]: "flex justify-between py-2 border-b border-custom-border-200", + [EHeaderVariant.SECONDARY]: "!py-0 overflow-y-hidden border-b border-custom-border-200 justify-between", + [EHeaderVariant.TERNARY]: "flex flex-wrap justify-between py-2 border-b border-custom-border-200 gap-2", }; export const minHeights: IHeaderProperties = { [EHeaderVariant.PRIMARY]: "", [EHeaderVariant.SECONDARY]: "min-h-[52px]", [EHeaderVariant.TERNARY]: "", }; -export const getHeaderStyle = (variant: THeaderVariant, setMinHeight: boolean) => { +export const getHeaderStyle = (variant: THeaderVariant, setMinHeight: boolean, showOnMobile: boolean) => { const height = setMinHeight ? minHeights[variant] : ""; - return headerStyle[variant] + " " + height; + const display = variant === EHeaderVariant.SECONDARY ? (showOnMobile ? "flex" : "hidden md:flex") : ""; + return " " + headerStyle[variant] + " " + height + " " + display; }; diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 929f99a5f..0af3b0469 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -25,3 +25,6 @@ export * from "./popovers"; export * from "./tables"; export * from "./header"; export * from "./row"; +export * from "./content-wrapper"; +export * from "./card"; +export * from "./tag"; diff --git a/packages/ui/src/row/row.tsx b/packages/ui/src/row/row.tsx index c16fd9354..309aa5f57 100644 --- a/packages/ui/src/row/row.tsx +++ b/packages/ui/src/row/row.tsx @@ -2,13 +2,13 @@ import * as React from "react"; import { cn } from "../../helpers"; import { ERowVariant, rowStyle, TRowVariant } from "./helper"; -export interface CustomRowProps extends React.HTMLAttributes { +export interface RowProps extends React.HTMLAttributes { variant?: TRowVariant; className?: string; children: React.ReactNode; } -const CustomRow = React.forwardRef((props, ref) => { +const Row = React.forwardRef((props, ref) => { const { variant = ERowVariant.REGULAR, className = "", children, ...rest } = props; const style = rowStyle[variant]; @@ -20,6 +20,6 @@ const CustomRow = React.forwardRef((props, ref) ); }); -CustomRow.displayName = "plane-ui-row"; +Row.displayName = "plane-ui-row"; -export { CustomRow, ERowVariant }; +export { Row, ERowVariant }; diff --git a/packages/ui/src/tag/helper.tsx b/packages/ui/src/tag/helper.tsx new file mode 100644 index 000000000..064da5c23 --- /dev/null +++ b/packages/ui/src/tag/helper.tsx @@ -0,0 +1,24 @@ +export enum ETagVariant { + OUTLINED = "outlined", +} +export enum ETagSize { + SM = "sm", + LG = "lg", +} +export type TTagVariant = ETagVariant.OUTLINED; + +export type TTagSize = ETagSize.SM | ETagSize.LG; +export interface ITagProperties { + [key: string]: string; +} + +export const containerStyle: ITagProperties = { + [ETagVariant.OUTLINED]: + "flex items-center rounded-md border border-custom-border-200 text-xs text-custom-text-300 hover:text-custom-text-200 min-h-[36px] my-auto capitalize flex-wrap cursor-pointer gap-1.5", +}; +export const sizes = { + [ETagSize.SM]: "p-1.5", + [ETagSize.LG]: "p-6", +}; + +export const getTagStyle = (variant: TTagVariant, size: TTagSize) => containerStyle[variant] + " " + sizes[size]; diff --git a/packages/ui/src/tag/index.ts b/packages/ui/src/tag/index.ts new file mode 100644 index 000000000..219d72b8c --- /dev/null +++ b/packages/ui/src/tag/index.ts @@ -0,0 +1 @@ +export * from "./tag"; diff --git a/packages/ui/src/tag/tag.tsx b/packages/ui/src/tag/tag.tsx new file mode 100644 index 000000000..deb3d1b0f --- /dev/null +++ b/packages/ui/src/tag/tag.tsx @@ -0,0 +1,25 @@ +import * as React from "react"; +import { cn } from "../../helpers"; +import { ETagSize, ETagVariant, getTagStyle, TTagSize, TTagVariant } from "./helper"; + +export interface TagProps extends React.ComponentProps<"div"> { + variant?: TTagVariant; + size?: TTagSize; + className?: string; + children: React.ReactNode; +} + +const Tag = React.forwardRef((props, ref) => { + const { variant = ETagVariant.OUTLINED, className = "", size = ETagSize.SM, children, ...rest } = props; + + const style = getTagStyle(variant, size); + return ( +
+ {children} +
+ ); +}); + +Tag.displayName = "plane-ui-container"; + +export { Tag, ETagVariant, ETagSize }; diff --git a/web/app/[workspaceSlug]/(projects)/active-cycles/header.tsx b/web/app/[workspaceSlug]/(projects)/active-cycles/header.tsx index 5dfbf976f..72dae40b1 100644 --- a/web/app/[workspaceSlug]/(projects)/active-cycles/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/active-cycles/header.tsx @@ -2,15 +2,15 @@ import { observer } from "mobx-react"; // ui -import { Breadcrumbs, ContrastIcon, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, ContrastIcon, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; // plane web components import { UpgradeBadge } from "@/plane-web/components/workspace"; export const WorkspaceActiveCycleHeader = observer(() => ( - - +
+ ( /> - - + +
)); diff --git a/web/app/[workspaceSlug]/(projects)/analytics/header.tsx b/web/app/[workspaceSlug]/(projects)/analytics/header.tsx index d7f3d3e9a..4aa66e2a4 100644 --- a/web/app/[workspaceSlug]/(projects)/analytics/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/analytics/header.tsx @@ -6,7 +6,7 @@ import { useSearchParams } from "next/navigation"; // icons import { BarChart2, PanelRight } from "lucide-react"; // ui -import { Breadcrumbs, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; // helpers @@ -36,8 +36,8 @@ export const WorkspaceAnalyticsHeader = observer(() => { }, [toggleWorkspaceAnalyticsSidebar, workspaceAnalyticsSidebarCollapsed]); return ( - - +
+ { ) : ( <> )} - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/analytics/page.tsx b/web/app/[workspaceSlug]/(projects)/analytics/page.tsx index d18249275..f9fd5dcf5 100644 --- a/web/app/[workspaceSlug]/(projects)/analytics/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/analytics/page.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import { useSearchParams } from "next/navigation"; import { Tab } from "@headlessui/react"; // components -import { CustomHeader, EHeaderVariant } from "@plane/ui"; +import { Header, EHeaderVariant } from "@plane/ui"; import { CustomAnalytics, ScopeAndDemand } from "@/components/analytics"; import { PageHead } from "@/components/core"; import { EmptyState } from "@/components/empty-state"; @@ -35,7 +35,7 @@ const AnalyticsPage = observer(() => { {workspaceProjectIds.length > 0 || loader ? (
- +
{ANALYTICS_TABS.map((tab) => ( @@ -54,7 +54,7 @@ const AnalyticsPage = observer(() => { ))} - +
diff --git a/web/app/[workspaceSlug]/(projects)/header.tsx b/web/app/[workspaceSlug]/(projects)/header.tsx index bbd92bf0a..a7a19afe6 100644 --- a/web/app/[workspaceSlug]/(projects)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/header.tsx @@ -7,7 +7,7 @@ import { Home } from "lucide-react"; import githubBlackImage from "/public/logos/github-black.png"; import githubWhiteImage from "/public/logos/github-white.png"; // ui -import { Breadcrumbs, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; // constants @@ -22,8 +22,8 @@ export const WorkspaceDashboardHeader = () => { return ( <> - - +
+
{ />
- - +
+ captureEvent(GITHUB_REDIRECTED, { @@ -53,8 +53,8 @@ export const WorkspaceDashboardHeader = () => { /> Star us on GitHub - - + +
); }; diff --git a/web/app/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/web/app/[workspaceSlug]/(projects)/profile/[userId]/header.tsx index 0414d303c..03d020d5f 100644 --- a/web/app/[workspaceSlug]/(projects)/profile/[userId]/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/profile/[userId]/header.tsx @@ -7,7 +7,7 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import { ChevronDown, PanelRight } from "lucide-react"; import { IUserProfileProjectSegregation } from "@plane/types"; -import { Breadcrumbs, CustomHeader, CustomMenu, UserActivityIcon } from "@plane/ui"; +import { Breadcrumbs, Header, CustomMenu, UserActivityIcon } from "@plane/ui"; import { BreadcrumbLink } from "@/components/common"; // components import { ProfileIssuesFilter } from "@/components/profile"; @@ -46,8 +46,8 @@ export const UserProfileHeader: FC = observer((props) => { const breadcrumbLabel = `${isCurrentUser ? "Your" : userName} Work`; return ( - - +
+
= observer((props) => { className="flex flex-grow justify-center text-sm text-custom-text-200" placement="bottom-start" customButton={ -
+
{type}
@@ -104,7 +104,7 @@ export const UserProfileHeader: FC = observer((props) => {
- - +
+
); }); diff --git a/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx index f29e6ff28..4d6141934 100644 --- a/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx @@ -8,7 +8,7 @@ import { ChevronDown } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; // ui -import { CustomMenu } from "@plane/ui"; +import { CustomMenu, Row } from "@plane/ui"; // components import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/components/issues"; // constants @@ -109,13 +109,18 @@ export const ProfileIssuesMobileHeader = observer(() => { ); return ( -
+
Layout} - customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" + customButton={ + + Layout + + + } + customButtonClassName="flex flex-start text-custom-text-200 text-sm" closeOnSelect > {ISSUE_LAYOUTS.map((layout, index) => { @@ -134,15 +139,15 @@ export const ProfileIssuesMobileHeader = observer(() => { ); })} -
+
+ Filters - - + + } isFiltersApplied={isIssueFilterActive(issueFilters)} > @@ -160,15 +165,15 @@ export const ProfileIssuesMobileHeader = observer(() => { />
-
+
+ Display - - + + } > = (props) => { const tabsList = isAuthorized ? [...PROFILE_VIEWER_TAB, ...PROFILE_ADMINS_TAB] : PROFILE_VIEWER_TAB; return ( - +
{tabsList.map((tab) => ( @@ -37,6 +37,6 @@ export const ProfileNavbar: React.FC = (props) => { ))}
- +
); }; diff --git a/web/app/[workspaceSlug]/(projects)/profile/[userId]/page.tsx b/web/app/[workspaceSlug]/(projects)/profile/[userId]/page.tsx index b6c93ec8f..480e30aed 100644 --- a/web/app/[workspaceSlug]/(projects)/profile/[userId]/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/profile/[userId]/page.tsx @@ -5,6 +5,7 @@ import useSWR from "swr"; // types import { IUserStateDistribution, TStateGroups } from "@plane/types"; // components +import { ContentWrapper } from "@plane/ui"; import { PageHead } from "@/components/core"; import { ProfileActivity, @@ -40,7 +41,7 @@ export default function ProfileOverviewPage() { return ( <> -
+
@@ -48,7 +49,7 @@ export default function ProfileOverviewPage() {
-
+ ); } diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx index ce7a07278..6da6d7749 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // ui -import { ArchiveIcon, Breadcrumbs, Tooltip, CustomHeader } from "@plane/ui"; +import { ArchiveIcon, Breadcrumbs, Tooltip, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; // constants @@ -38,8 +38,8 @@ export const ProjectArchivesHeader: FC = observer((props: TProps) => { PROJECT_ARCHIVES_BREADCRUMB_LIST[activeTab as keyof typeof PROJECT_ARCHIVES_BREADCRUMB_LIST]; return ( - - +
+
= observer((props: TProps) => { ) : null}
- - +
+
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx index d4bdf3535..bb0c63d70 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx @@ -4,7 +4,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // ui -import { ArchiveIcon, Breadcrumbs, LayersIcon, CustomHeader } from "@plane/ui"; +import { ArchiveIcon, Breadcrumbs, LayersIcon, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { IssueDetailQuickActions } from "@/components/issues"; @@ -36,8 +36,8 @@ export const ProjectArchivedIssueDetailsHeader = observer(() => { ); return ( - - +
+ { } /> - - + + - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx index ed39b5181..e5b035452 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx @@ -9,7 +9,7 @@ import { ArrowRight, PanelRight } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui -import { Breadcrumbs, Button, ContrastIcon, CustomMenu, Tooltip, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, ContrastIcon, CustomMenu, Tooltip, Header } from "@plane/ui"; // components import { ProjectAnalyticsModal } from "@/components/analytics"; import { BreadcrumbLink, Logo } from "@/components/common"; @@ -161,8 +161,8 @@ export const CycleIssuesHeader: React.FC = observer(() => { onClose={() => setAnalyticsModal(false)} cycleDetails={cycleDetails ?? undefined} /> - - +
+
{ />
- - +
+
{ > - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx index acaf935bb..7997131c6 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // ui -import { Breadcrumbs, Button, ContrastIcon, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, ContrastIcon, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { CyclesViewHeader } from "@/components/cycles"; @@ -30,8 +30,8 @@ export const CyclesListHeader: FC = observer(() => { currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); return ( - - +
+ { link={} />} /> - - + + {canUserCreateCycle && currentProjectDetails ? (
@@ -73,7 +73,7 @@ export const CyclesListHeader: FC = observer(() => { ) : ( <> )} - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx index 5dd82c7e1..5b1793d5d 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx @@ -6,7 +6,7 @@ import { useParams } from "next/navigation"; // types import { TCycleFilters } from "@plane/types"; // components -import { CustomHeader, EHeaderVariant } from "@plane/ui"; +import { Header, EHeaderVariant } from "@plane/ui"; import { PageHead } from "@/components/core"; import { CyclesView, CycleCreateUpdateModal, CycleAppliedFiltersList } from "@/components/cycles"; import { EmptyState } from "@/components/empty-state"; @@ -82,13 +82,13 @@ const ProjectCyclesPage = observer(() => { ) : ( <> {calculateTotalFilters(currentProjectFilters ?? {}) !== 0 && ( - +
clearAllFilters(projectId.toString())} handleRemoveFilter={handleRemoveFilter} /> - +
)} diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/header.tsx index 6fafde56b..a811ef3f0 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/header.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { RefreshCcw } from "lucide-react"; // ui -import { Breadcrumbs, Button, Intake, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, Intake, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { InboxIssueCreateEditModalRoot } from "@/components/inbox"; @@ -30,8 +30,8 @@ export const ProjectInboxHeader: FC = observer(() => { const isViewer = currentProjectRole === EUserProjectRoles.VIEWER; return ( - - +
+
{
)}
- - + + {currentProjectDetails?.inbox_view && workspaceSlug && projectId && !isViewer ? (
{ ) : ( <> )} - - + + ); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/header.tsx index 067424ffc..a687dc39a 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/header.tsx @@ -4,7 +4,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { PanelRight } from "lucide-react"; // ui -import { Breadcrumbs, LayersIcon, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, LayersIcon, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { IssueDetailQuickActions } from "@/components/issues"; @@ -29,8 +29,8 @@ export const ProjectIssueDetailsHeader = observer(() => { const isSidebarCollapsed = issueDetailSidebarCollapsed; return ( - - +
+
{ />
- - +
+ { className={cn("h-4 w-4 ", !isSidebarCollapsed ? "text-custom-primary-100" : " text-custom-text-200")} /> - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx index 7037e03ad..9e8018e97 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx @@ -5,7 +5,7 @@ import { useParams } from "next/navigation"; // icons import { Briefcase, Circle, ExternalLink } from "lucide-react"; // ui -import { Breadcrumbs, Button, LayersIcon, Tooltip, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, LayersIcon, Tooltip, Header } from "@plane/ui"; // components import { BreadcrumbLink, CountChip, Logo } from "@/components/common"; // constants @@ -46,8 +46,8 @@ export const ProjectIssuesHeader = observer(() => { currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); return ( - - +
+
router.back()} isLoading={loader}> { ) : ( <> )} - - + +
{ ) : ( <> )} - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx index 5d6adcfbe..0a6a52db5 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx @@ -8,7 +8,7 @@ import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui -import { CustomMenu } from "@plane/ui"; +import { CustomMenu, Row } from "@plane/ui"; // components import { ProjectAnalyticsModal } from "@/components/analytics"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/components/issues/issue-layouts"; @@ -106,7 +106,12 @@ export const ProjectIssuesMobileHeader = observer(() => { maxHeight={"md"} className="flex flex-grow justify-center text-sm text-custom-text-200" placement="bottom-start" - customButton={Layout} + customButton={ + + Layout + + + } customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" closeOnSelect > diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx index c5e1970de..c3dc7d81f 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx @@ -9,7 +9,7 @@ import { ArrowRight, PanelRight } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui -import { Breadcrumbs, Button, CustomMenu, DiceIcon, Tooltip, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, CustomMenu, DiceIcon, Tooltip, Header } from "@plane/ui"; // components import { ProjectAnalyticsModal } from "@/components/analytics"; import { BreadcrumbLink, Logo } from "@/components/common"; @@ -161,8 +161,8 @@ export const ModuleIssuesHeader: React.FC = observer(() => { onClose={() => setAnalyticsModal(false)} moduleDetails={moduleDetails ?? undefined} /> - - +
+ { } /> - - + +
{ className={cn("block h-4 w-4 md:hidden", !isSidebarCollapsed ? "text-[#3E63DD]" : "text-custom-text-200")} /> - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx index 57b9ad624..ff268ee97 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx @@ -3,7 +3,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // ui -import { Breadcrumbs, Button, DiceIcon, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, DiceIcon, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { ModuleViewHeader } from "@/components/modules"; @@ -30,8 +30,8 @@ export const ModulesListHeader: React.FC = observer(() => { currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); return ( - - +
+
{ />
- - +
+ {canUserCreateModule ? (
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx index 7a530ea14..0e9bbb878 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx @@ -1,7 +1,8 @@ "use client"; import { observer } from "mobx-react"; -import { CustomMenu } from "@plane/ui"; +import { ChevronDown } from "lucide-react"; +import { CustomMenu, Row } from "@plane/ui"; import { MODULE_VIEW_LAYOUTS } from "@/constants/module"; import { useModuleFilter, useProject } from "@/hooks/store"; @@ -10,12 +11,16 @@ export const ModulesListMobileHeader = observer(() => { const { updateDisplayFilters } = useModuleFilter(); return ( -
+
Layout} + customButton={ + + Layout + + } customButtonClassName="flex flex-grow justify-center items-center text-custom-text-200 text-sm" closeOnSelect > diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx index 0d140e3e1..388fb5681 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx @@ -7,15 +7,7 @@ import { FileText } from "lucide-react"; // types import { TLogoProps } from "@plane/types"; // ui -import { - Breadcrumbs, - EmojiIconPicker, - EmojiIconPickerTypes, - TOAST_TYPE, - Tooltip, - setToast, - CustomHeader, -} from "@plane/ui"; +import { Breadcrumbs, EmojiIconPicker, EmojiIconPickerTypes, TOAST_TYPE, Tooltip, setToast, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { PageEditInformationPopover } from "@/components/pages"; @@ -67,8 +59,8 @@ export const PageDetailsHeader = observer(() => { const pageTitle = getPageName(name); return ( - - +
+
{ />
- - +
+ - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx index 2856a22d1..b7e1a07aa 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx @@ -4,7 +4,7 @@ import { observer } from "mobx-react"; import { useParams, useSearchParams } from "next/navigation"; import { FileText } from "lucide-react"; // ui -import { Breadcrumbs, Button, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, Header } from "@plane/ui"; // helpers import { BreadcrumbLink, Logo } from "@/components/common"; // constants @@ -30,8 +30,8 @@ export const PagesListHeader = observer(() => { currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); return ( - - +
+
{ />
- - +
+ {canUserCreatePage ? (
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/header.tsx index 8f3070f1a..ebf159f6b 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/header.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // ui import { Settings } from "lucide-react"; -import { Breadcrumbs, CustomMenu, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, CustomMenu, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; // constants @@ -29,8 +29,8 @@ export const ProjectSettingHeader: FC = observer(() => { const projectMemberInfo = currentProjectRole || EUserProjectRoles.GUEST; return ( - - +
+
@@ -84,7 +84,7 @@ export const ProjectSettingHeader: FC = observer(() => { ) )} - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/labels/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/labels/page.tsx index 0e88b9c5d..952837446 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/labels/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/labels/page.tsx @@ -42,7 +42,7 @@ const LabelsSettingsPage = observer(() => { return ( <> -
+
diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx index abaff7eb4..5e83cd4dd 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx @@ -8,7 +8,7 @@ import { Layers, Lock } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui -import { Breadcrumbs, Button, CustomMenu, Tooltip, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, CustomMenu, Tooltip, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "@/components/issues"; @@ -136,8 +136,8 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { const publishLink = getPublishViewLink(viewDetails?.anchor); return ( - - +
+ { ) : ( <> )} - - + + {!viewDetails?.is_locked ? ( <> { ) : ( <> )} - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx index bb91ab7ea..2fd2d6524 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx @@ -4,7 +4,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Layers } from "lucide-react"; // ui -import { Breadcrumbs, Button, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, Header } from "@plane/ui"; // components import { BreadcrumbLink, Logo } from "@/components/common"; import { ViewListHeader } from "@/components/views"; @@ -20,8 +20,8 @@ export const ProjectViewsHeader = observer(() => { return ( <> - - +
+ { link={} />} /> - - + +
- - +
+
); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx index f710ee041..1b55e8175 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx @@ -4,6 +4,7 @@ import { observer } from "mobx-react"; // icons import { ChevronDown, ListFilter } from "lucide-react"; // components +import { Row } from "@plane/ui"; import { FiltersDropdown } from "@/components/issues/issue-layouts"; import { ViewFiltersSelection } from "@/components/views/filters/filter-selection"; import { ViewOrderByDropdown } from "@/components/views/filters/order-by"; @@ -20,7 +21,7 @@ export const ViewMobileHeader = observer(() => { return ( <>
-
+ { }} isMobile /> -
-
+ +
} title="Filters" placement="bottom-end" isFiltersApplied={false} menuButton={ - + Filters - - + + } > { <> {isFiltersApplied && ( - +
- +
)} diff --git a/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx index bfc583b78..79e40e388 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx @@ -54,7 +54,7 @@ const ApiTokensPage = observer(() => { <> setIsCreateTokenModalOpen(false)} /> -
+
{tokens.length > 0 ? ( <>
diff --git a/web/app/[workspaceSlug]/(projects)/settings/exports/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/exports/page.tsx index 85b8cd644..d14d9eb1f 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/exports/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/exports/page.tsx @@ -31,11 +31,11 @@ const ExportsPage = observer(() => { <>
-
+

Exports

diff --git a/web/app/[workspaceSlug]/(projects)/settings/header.tsx b/web/app/[workspaceSlug]/(projects)/settings/header.tsx index 3367597cf..d98db1a65 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/header.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Settings } from "lucide-react"; // ui -import { Breadcrumbs, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; // hooks @@ -14,8 +14,8 @@ export const WorkspaceSettingHeader: FC = observer(() => { const { currentWorkspace, loader } = useWorkspace(); return ( - - +
+ { /> } /> - - + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/settings/imports/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/imports/page.tsx index 342313033..a6f73e470 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/imports/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/imports/page.tsx @@ -33,8 +33,8 @@ const ImportsPage = observer(() => { return ( <> -
-
+
+

Imports

diff --git a/web/app/[workspaceSlug]/(projects)/settings/integrations/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/integrations/page.tsx index 7db73cbe6..4c6802e50 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/integrations/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/integrations/page.tsx @@ -1,4 +1,4 @@ -"use client" +"use client"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; @@ -33,7 +33,7 @@ const WorkspaceIntegrationsPage = observer(() => { return ( <> -
+

You are not authorized to access this page.

@@ -46,7 +46,7 @@ const WorkspaceIntegrationsPage = observer(() => { return ( <> -
+
{appIntegrations ? ( @@ -62,4 +62,4 @@ const WorkspaceIntegrationsPage = observer(() => { ); }); -export default WorkspaceIntegrationsPage; \ No newline at end of file +export default WorkspaceIntegrationsPage; diff --git a/web/app/[workspaceSlug]/(projects)/settings/layout.tsx b/web/app/[workspaceSlug]/(projects)/settings/layout.tsx index bd04e2d6e..21ab3d39c 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/layout.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/layout.tsx @@ -2,7 +2,8 @@ import { ReactNode } from "react"; // components -import { AppHeader, ContentWrapper } from "@/components/core"; +import { ContentWrapper } from "@plane/ui"; +import { AppHeader } from "@/components/core"; // local components import { WorkspaceSettingHeader } from "./header"; import { MobileWorkspaceSettingsTabs } from "./mobile-header-tabs"; @@ -18,17 +19,13 @@ export default function WorkspaceSettingLayout(props: IWorkspaceSettingLayout) { return ( <> } /> - -
-
- -
-
- -
- {children} -
-
+ + +
+ +
+
+
{children}
diff --git a/web/app/[workspaceSlug]/(projects)/settings/members/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/members/page.tsx index 0d48bef73..9982f7cee 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/members/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/members/page.tsx @@ -99,11 +99,11 @@ const WorkspaceMembersSettingsPage = observer(() => { onSubmit={handleWorkspaceInvite} />
-
+

Members

diff --git a/web/app/[workspaceSlug]/(projects)/settings/sidebar.tsx b/web/app/[workspaceSlug]/(projects)/settings/sidebar.tsx index 9572d6519..15d13abdc 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/sidebar.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/sidebar.tsx @@ -28,7 +28,7 @@ export const WorkspaceSettingsSidebar = observer(() => { const workspaceMemberInfo = currentWorkspaceRole || EUserWorkspaceRoles.GUEST; return ( -
+
SETTINGS
diff --git a/web/app/[workspaceSlug]/(projects)/settings/webhooks/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/webhooks/page.tsx index a887c4144..203b7286c 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/webhooks/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/webhooks/page.tsx @@ -51,7 +51,7 @@ const WebhooksListPage = observer(() => { return ( <> -
+
{ return ( <> setCreateViewModal(false)} /> - - +
+ } />} /> - + - + {!isLocked ? ( <> { - - + +
); }); diff --git a/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx b/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx index 11d708be0..e602a752e 100644 --- a/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx +++ b/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx @@ -4,7 +4,7 @@ import React from "react"; import { observer } from "mobx-react"; import Image from "next/image"; // ui -import { getButtonStyling } from "@plane/ui"; +import { ContentWrapper, getButtonStyling } from "@plane/ui"; // components import { ProIcon } from "@/components/common"; // constants @@ -24,7 +24,7 @@ export const WorkspaceActiveCyclesUpgrade = observer(() => { const isDarkMode = userProfile?.theme.theme === "dark"; return ( -
+
{
))}
-
+ ); }); diff --git a/web/ce/components/workspace/billing/root.tsx b/web/ce/components/workspace/billing/root.tsx index 1b87bc198..9fe94cc95 100644 --- a/web/ce/components/workspace/billing/root.tsx +++ b/web/ce/components/workspace/billing/root.tsx @@ -6,7 +6,7 @@ import { MARKETING_PRICING_PAGE_LINK } from "@/constants/common"; export const BillingRoot = () => (
-
+

Billing and Plans

diff --git a/web/core/components/analytics/custom-analytics/custom-analytics.tsx b/web/core/components/analytics/custom-analytics/custom-analytics.tsx index 413126c48..bfb5398ec 100644 --- a/web/core/components/analytics/custom-analytics/custom-analytics.tsx +++ b/web/core/components/analytics/custom-analytics/custom-analytics.tsx @@ -5,6 +5,7 @@ import useSWR from "swr"; import { IAnalyticsParams } from "@plane/types"; // services // components +import { ContentWrapper } from "@plane/ui"; import { CustomAnalyticsSelectBar, CustomAnalyticsMainContent, CustomAnalyticsSidebar } from "@/components/analytics"; // types // fetch-keys @@ -53,7 +54,7 @@ export const CustomAnalytics: React.FC = observer((props) => { return (
-
+ = observer((props) => { params={params} fullScreen={fullScreen} /> -
+
= (props) => {
) ) : ( - + diff --git a/web/core/components/analytics/custom-analytics/select-bar.tsx b/web/core/components/analytics/custom-analytics/select-bar.tsx index de4dc97ed..7921e785f 100644 --- a/web/core/components/analytics/custom-analytics/select-bar.tsx +++ b/web/core/components/analytics/custom-analytics/select-bar.tsx @@ -31,13 +31,13 @@ export const CustomAnalyticsSelectBar: React.FC = observer((props) => { return (
{!isProjectLevel && (
-
Project
+
Project
= observer((props) => {
)}
-
Measure (y-axis)
+
Measure (y-axis)
= observer((props) => { />
-
Dimension (x-axis)
+
Dimension (x-axis)
= observer((props) => { />
-
Group
+
Group
= ({ analytics, barGraphData, params, yAxisKey }) => ( -
+
- {params.segment ? ( @@ -31,7 +31,7 @@ export const AnalyticsTable: React.FC = ({ analytics, barGraphData, param )) ) : ( - )} @@ -60,7 +60,7 @@ export const AnalyticsTable: React.FC = ({ analytics, barGraphData, param {barGraphData.data.map((item, index) => ( - {params.segment ? ( barGraphData.xAxisKeys.map((key, index) => ( - )) ) : ( - + )} ))} diff --git a/web/core/components/analytics/scope-and-demand/demand.tsx b/web/core/components/analytics/scope-and-demand/demand.tsx index 0100f8630..39a04cf9b 100644 --- a/web/core/components/analytics/scope-and-demand/demand.tsx +++ b/web/core/components/analytics/scope-and-demand/demand.tsx @@ -1,6 +1,7 @@ // types import { IDefaultAnalyticsResponse, TStateGroups } from "@plane/types"; // constants +import { Card } from "@plane/ui"; import { STATE_GROUPS } from "@/constants/state"; type Props = { @@ -8,7 +9,7 @@ type Props = { }; export const AnalyticsDemand: React.FC = ({ defaultAnalytics }) => ( -
+

Total open tasks

{defaultAnalytics.open_issues}

@@ -47,5 +48,5 @@ export const AnalyticsDemand: React.FC = ({ defaultAnalytics }) => ( ); })}
-
+ ); diff --git a/web/core/components/analytics/scope-and-demand/leaderboard.tsx b/web/core/components/analytics/scope-and-demand/leaderboard.tsx index bb8ef6f1a..61a715513 100644 --- a/web/core/components/analytics/scope-and-demand/leaderboard.tsx +++ b/web/core/components/analytics/scope-and-demand/leaderboard.tsx @@ -1,4 +1,5 @@ // ui +import { Card } from "@plane/ui"; import { ProfileEmptyState } from "@/components/ui"; // image import emptyUsers from "@/public/empty-state/empty_users.svg"; @@ -18,7 +19,7 @@ type Props = { }; export const AnalyticsLeaderBoard: React.FC = ({ users, title, emptyStateMessage, workspaceSlug }) => ( -
+
{title}
{users.length > 0 ? (
@@ -57,5 +58,5 @@ export const AnalyticsLeaderBoard: React.FC = ({ users, title, emptyState
)} -
+ ); diff --git a/web/core/components/analytics/scope-and-demand/scope-and-demand.tsx b/web/core/components/analytics/scope-and-demand/scope-and-demand.tsx index e9ff970fb..3693950b3 100644 --- a/web/core/components/analytics/scope-and-demand/scope-and-demand.tsx +++ b/web/core/components/analytics/scope-and-demand/scope-and-demand.tsx @@ -2,7 +2,7 @@ import { useParams } from "next/navigation"; import useSWR from "swr"; // ui -import { Button, Loader } from "@plane/ui"; +import { Button, ContentWrapper, Loader } from "@plane/ui"; // components import { AnalyticsDemand, AnalyticsLeaderBoard, AnalyticsScope, AnalyticsYearWiseIssues } from "@/components/analytics"; // fetch-keys @@ -50,7 +50,7 @@ export const ScopeAndDemand: React.FC = (props) => { <> {!defaultAnalyticsError ? ( defaultAnalytics ? ( -
+
= (props) => {
- + ) : ( diff --git a/web/core/components/analytics/scope-and-demand/scope.tsx b/web/core/components/analytics/scope-and-demand/scope.tsx index 4b420af61..4bff95cc6 100644 --- a/web/core/components/analytics/scope-and-demand/scope.tsx +++ b/web/core/components/analytics/scope-and-demand/scope.tsx @@ -1,5 +1,6 @@ // ui import { IDefaultAnalyticsUser } from "@plane/types"; +import { Card } from "@plane/ui"; import { BarGraph, ProfileEmptyState } from "@/components/ui"; // image import emptyBarGraph from "@/public/empty-state/empty_bar_graph.svg"; @@ -11,7 +12,7 @@ type Props = { }; export const AnalyticsScope: React.FC = ({ pendingUnAssignedIssuesUser, pendingAssignedIssues }) => ( -
+
@@ -87,5 +88,5 @@ export const AnalyticsScope: React.FC = ({ pendingUnAssignedIssuesUser, p )}
-
+
); diff --git a/web/core/components/analytics/scope-and-demand/year-wise-issues.tsx b/web/core/components/analytics/scope-and-demand/year-wise-issues.tsx index d6c412aba..b2c5805dd 100644 --- a/web/core/components/analytics/scope-and-demand/year-wise-issues.tsx +++ b/web/core/components/analytics/scope-and-demand/year-wise-issues.tsx @@ -1,5 +1,6 @@ // ui import { IDefaultAnalyticsResponse } from "@plane/types"; +import { Card } from "@plane/ui"; import { LineGraph, ProfileEmptyState } from "@/components/ui"; // image import { MONTHS_LIST } from "@/constants/calendar"; @@ -12,8 +13,8 @@ type Props = { }; export const AnalyticsYearWiseIssues: React.FC = ({ defaultAnalytics }) => ( -
-

Issues closed in a year

+ +

Issues closed in a year

{defaultAnalytics.issue_completed_month_wise.length > 0 ? ( = ({ defaultAnalytics }) = />
)} -
+ ); diff --git a/web/core/components/common/applied-filters/date.tsx b/web/core/components/common/applied-filters/date.tsx index 06d182647..0f5680c48 100644 --- a/web/core/components/common/applied-filters/date.tsx +++ b/web/core/components/common/applied-filters/date.tsx @@ -38,7 +38,7 @@ export const AppliedDateFilters: React.FC = observer((props) => { return ( <> {values.map((date) => ( -
+
{getDateLabel(date)} {editable && (
); }; diff --git a/web/core/components/core/list/list-root.tsx b/web/core/components/core/list/list-root.tsx index c9c465f27..bd62efb2e 100644 --- a/web/core/components/core/list/list-root.tsx +++ b/web/core/components/core/list/list-root.tsx @@ -1,4 +1,5 @@ import React, { FC } from "react"; +import { Row, ERowVariant } from "@plane/ui"; interface IListContainer { children: React.ReactNode; @@ -6,5 +7,12 @@ interface IListContainer { export const ListLayout: FC = (props) => { const { children } = props; - return
{children}
; + return ( + + {children} + + ); }; diff --git a/web/core/components/cycles/active-cycle/root.tsx b/web/core/components/cycles/active-cycle/root.tsx index 00be0e34f..4bd8ff297 100644 --- a/web/core/components/cycles/active-cycle/root.tsx +++ b/web/core/components/cycles/active-cycle/root.tsx @@ -2,6 +2,8 @@ import { observer } from "mobx-react"; import { Disclosure } from "@headlessui/react"; +// ui +import { Row } from "@plane/ui"; // components import { ActiveCycleProductivity, @@ -36,14 +38,14 @@ export const ActiveCycleRoot: React.FC = observer((props) = {({ open }) => ( <> - + {!currentProjectActiveCycle ? ( ) : ( -
+
{currentProjectActiveCycleId && ( = observer((props) = className="!border-b-transparent" /> )} -
+
= observer((props) = cycleIssueDetails={cycleIssueDetails as ActiveCycleIssueDetails} />
-
+
)} diff --git a/web/core/components/cycles/applied-filters/date.tsx b/web/core/components/cycles/applied-filters/date.tsx index 9b7aa1373..488eef12c 100644 --- a/web/core/components/cycles/applied-filters/date.tsx +++ b/web/core/components/cycles/applied-filters/date.tsx @@ -37,7 +37,7 @@ export const AppliedDateFilters: React.FC = observer((props) => { return ( <> {values.map((date) => ( -
+
{getDateLabel(date)} {editable && ( )}
-
+ ); })} {isEditingAllowed && ( - )}
diff --git a/web/core/components/cycles/applied-filters/status.tsx b/web/core/components/cycles/applied-filters/status.tsx index bf1075bfa..d46b56503 100644 --- a/web/core/components/cycles/applied-filters/status.tsx +++ b/web/core/components/cycles/applied-filters/status.tsx @@ -20,7 +20,7 @@ export const AppliedStatusFilters: React.FC = observer((props) => {
= observer((props) => { ); return ( - <> - - + ); }); diff --git a/web/core/components/cycles/list/cycle-list-group-header.tsx b/web/core/components/cycles/list/cycle-list-group-header.tsx index 19beaca49..d132cc70d 100644 --- a/web/core/components/cycles/list/cycle-list-group-header.tsx +++ b/web/core/components/cycles/list/cycle-list-group-header.tsx @@ -5,7 +5,7 @@ import { ChevronDown } from "lucide-react"; // types import { TCycleGroups } from "@plane/types"; // icons -import { CycleGroupIcon } from "@plane/ui"; +import { Row, CycleGroupIcon } from "@plane/ui"; // helpers import { cn } from "@/helpers/common.helper"; @@ -20,7 +20,7 @@ type Props = { export const CycleListGroupHeader: FC = (props) => { const { type, title, count, showCount = false, isExpanded = false } = props; return ( -
+
@@ -36,6 +36,6 @@ export const CycleListGroupHeader: FC = (props) => { "rotate-180": isExpanded, })} /> -
+ ); }; diff --git a/web/core/components/cycles/list/root.tsx b/web/core/components/cycles/list/root.tsx index 700ddd099..880ed62c6 100644 --- a/web/core/components/cycles/list/root.tsx +++ b/web/core/components/cycles/list/root.tsx @@ -2,6 +2,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Disclosure } from "@headlessui/react"; // components +import { ContentWrapper, ERowVariant } from "@plane/ui"; import { ListLayout } from "@/components/core/list"; import { ActiveCycleRoot, CycleListGroupHeader, CyclePeekOverview, CyclesListMap } from "@/components/cycles"; @@ -18,7 +19,7 @@ export const CyclesList: FC = observer((props) => { const { completedCycleIds, upcomingCycleIds, cycleIds, workspaceSlug, projectId, isArchived = false } = props; return ( -
+ {isArchived ? ( <> @@ -32,7 +33,7 @@ export const CyclesList: FC = observer((props) => { {({ open }) => ( <> - + = observer((props) => { {({ open }) => ( <> - + = observer((props) => { )} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/assigned-issues.tsx b/web/core/components/dashboard/widgets/assigned-issues.tsx index c8a5cc088..30bfbdad1 100644 --- a/web/core/components/dashboard/widgets/assigned-issues.tsx +++ b/web/core/components/dashboard/widgets/assigned-issues.tsx @@ -4,6 +4,7 @@ import Link from "next/link"; import { Tab } from "@headlessui/react"; import { TAssignedIssuesWidgetFilters, TAssignedIssuesWidgetResponse } from "@plane/types"; // hooks +import { Card } from "@plane/ui"; import { DurationFilterDropdown, IssuesErrorState, @@ -79,7 +80,7 @@ export const AssignedIssuesWidget: React.FC = observer((props) => { if ((!widgetDetails || !widgetStats) && !widgetStatsError) return ; return ( -
+ {widgetStatsError ? ( = observer((props) => { ) : ( widgetStats && ( <> -
+
= observer((props) => { }} className="h-full flex flex-col" > -
- -
+ {tabsList.map((tab) => { if (tab.key !== selectedTab) return null; @@ -161,6 +160,6 @@ export const AssignedIssuesWidget: React.FC = observer((props) => { ) )} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/created-issues.tsx b/web/core/components/dashboard/widgets/created-issues.tsx index 4909fc5da..083318d31 100644 --- a/web/core/components/dashboard/widgets/created-issues.tsx +++ b/web/core/components/dashboard/widgets/created-issues.tsx @@ -4,6 +4,7 @@ import Link from "next/link"; import { Tab } from "@headlessui/react"; import { TCreatedIssuesWidgetFilters, TCreatedIssuesWidgetResponse } from "@plane/types"; // hooks +import { Card } from "@plane/ui"; import { DurationFilterDropdown, IssuesErrorState, @@ -76,7 +77,7 @@ export const CreatedIssuesWidget: React.FC = observer((props) => { if ((!widgetDetails || !widgetStats) && !widgetStatsError) return ; return ( -
+ {widgetStatsError ? ( = observer((props) => { ) : ( widgetStats && ( <> -
+
= observer((props) => { }} className="h-full flex flex-col" > -
- -
+ {tabsList.map((tab) => { if (tab.key !== selectedTab) return null; @@ -158,6 +157,6 @@ export const CreatedIssuesWidget: React.FC = observer((props) => { ) )} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/issue-panels/issues-list.tsx b/web/core/components/dashboard/widgets/issue-panels/issues-list.tsx index dc099167e..014a1e25e 100644 --- a/web/core/components/dashboard/widgets/issue-panels/issues-list.tsx +++ b/web/core/components/dashboard/widgets/issue-panels/issues-list.tsx @@ -66,7 +66,7 @@ export const WidgetIssuesList: React.FC = (props) => { <>
{isLoading ? ( - + @@ -74,7 +74,7 @@ export const WidgetIssuesList: React.FC = (props) => { ) : issuesList.length > 0 ? ( <> -
+
= (props) => { {type === "assigned" && tab !== "completed" &&
Blocked by
} {type === "created" &&
Assigned to
}
-
+
{issuesList.map((issue) => { const IssueListItem = ISSUE_LIST_ITEM[type][tab]; diff --git a/web/core/components/dashboard/widgets/issues-by-priority.tsx b/web/core/components/dashboard/widgets/issues-by-priority.tsx index c49226e06..9da47bc84 100644 --- a/web/core/components/dashboard/widgets/issues-by-priority.tsx +++ b/web/core/components/dashboard/widgets/issues-by-priority.tsx @@ -4,6 +4,7 @@ import Link from "next/link"; // types import { TIssuesByPriorityWidgetFilters, TIssuesByPriorityWidgetResponse } from "@plane/types"; // components +import { Card } from "@plane/ui"; import { DurationFilterDropdown, IssuesByPriorityEmptyState, @@ -69,8 +70,8 @@ export const IssuesByPriorityWidget: React.FC = observer((props) => })); return ( -
-
+ +
= observer((props) =>
)} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/issues-by-state-group.tsx b/web/core/components/dashboard/widgets/issues-by-state-group.tsx index 09204b41d..53437ca11 100644 --- a/web/core/components/dashboard/widgets/issues-by-state-group.tsx +++ b/web/core/components/dashboard/widgets/issues-by-state-group.tsx @@ -4,6 +4,7 @@ import Link from "next/link"; // types import { TIssuesByStateGroupsWidgetFilters, TIssuesByStateGroupsWidgetResponse, TStateGroups } from "@plane/types"; // components +import { Card } from "@plane/ui"; import { DurationFilterDropdown, IssuesByStateGroupEmptyState, @@ -79,14 +80,14 @@ export const IssuesByStateGroupWidget: React.FC = observer((props) startedCount > 0 ? "started" : unStartedCount > 0 - ? "unstarted" - : backlogCount > 0 - ? "backlog" - : completedCount > 0 - ? "completed" - : canceledCount > 0 - ? "cancelled" - : null; + ? "unstarted" + : backlogCount > 0 + ? "backlog" + : completedCount > 0 + ? "completed" + : canceledCount > 0 + ? "cancelled" + : null; setActiveStateGroup(stateGroup); setDefaultStateGroup(stateGroup); @@ -134,8 +135,8 @@ export const IssuesByStateGroupWidget: React.FC = observer((props) }; return ( -
-
+ +
= observer((props) />
{totalCount > 0 ? ( -
+
= observer((props)
)} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/overview-stats.tsx b/web/core/components/dashboard/widgets/overview-stats.tsx index 4be196849..d355da644 100644 --- a/web/core/components/dashboard/widgets/overview-stats.tsx +++ b/web/core/components/dashboard/widgets/overview-stats.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { TOverviewStatsWidgetResponse } from "@plane/types"; // hooks +import { Card, ECardSpacing } from "@plane/ui"; import { WidgetLoader } from "@/components/dashboard/widgets"; import { cn } from "@/helpers/common.helper"; import { renderFormattedPayloadDate } from "@/helpers/date-time.helper"; @@ -63,8 +64,9 @@ export const OverviewStatsWidget: React.FC = observer((props) => { if (!widgetStats) return ; return ( -
div>a>div]:border-r [&>div:last-child>a>div]:border-0 [&>div>a>div]:border-custom-border-200 @@ -93,6 +95,6 @@ export const OverviewStatsWidget: React.FC = observer((props) => {
))} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/recent-activity.tsx b/web/core/components/dashboard/widgets/recent-activity.tsx index 0877f14b5..bc81f57c9 100644 --- a/web/core/components/dashboard/widgets/recent-activity.tsx +++ b/web/core/components/dashboard/widgets/recent-activity.tsx @@ -6,9 +6,8 @@ import Link from "next/link"; import { History } from "lucide-react"; // types import { TRecentActivityWidgetResponse } from "@plane/types"; -// UI -import { Avatar, getButtonStyling } from "@plane/ui"; // components +import { Card, Avatar, getButtonStyling } from "@plane/ui"; import { ActivityIcon, ActivityMessage, IssueLink } from "@/components/core"; import { RecentActivityEmptyState, WidgetLoader, WidgetProps } from "@/components/dashboard/widgets"; // helpers @@ -38,12 +37,12 @@ export const RecentActivityWidget: React.FC = observer((props) => { if (!widgetStats) return ; return ( -
- + + Your issue activities {widgetStats.length > 0 ? ( -
+
{widgetStats.map((activity) => (
@@ -104,6 +103,6 @@ export const RecentActivityWidget: React.FC = observer((props) => {
)} -
+ ); }); diff --git a/web/core/components/dashboard/widgets/recent-collaborators/root.tsx b/web/core/components/dashboard/widgets/recent-collaborators/root.tsx index 0b74fc9ac..65f49a8f4 100644 --- a/web/core/components/dashboard/widgets/recent-collaborators/root.tsx +++ b/web/core/components/dashboard/widgets/recent-collaborators/root.tsx @@ -1,6 +1,7 @@ import { useState } from "react"; import { Search } from "lucide-react"; // types +import { Card } from "@plane/ui"; import { WidgetProps } from "@/components/dashboard/widgets"; // components import { DefaultCollaboratorsList } from "./default-list"; @@ -14,15 +15,15 @@ export const RecentCollaboratorsWidget: React.FC = (props) => { const [searchQuery, setSearchQuery] = useState(""); return ( -
-
+ +

Collaborators

View and find all members you collaborate with across projects

-
+
= (props) => { ) : ( )} -
+ ); }; diff --git a/web/core/components/dashboard/widgets/recent-projects.tsx b/web/core/components/dashboard/widgets/recent-projects.tsx index 847916ce4..d9970e11d 100644 --- a/web/core/components/dashboard/widgets/recent-projects.tsx +++ b/web/core/components/dashboard/widgets/recent-projects.tsx @@ -7,7 +7,8 @@ import { Plus } from "lucide-react"; // types import { TRecentProjectsWidgetResponse } from "@plane/types"; // ui -import { Avatar, AvatarGroup } from "@plane/ui"; +import { Avatar, AvatarGroup, Card } from "@plane/ui"; + // components import { Logo } from "@/components/common"; import { WidgetLoader, WidgetProps } from "@/components/dashboard/widgets"; @@ -82,14 +83,14 @@ export const RecentProjectsWidget: React.FC = observer((props) => { if (!widgetStats) return ; return ( -
+ Recent projects -
+
{canCreateProject && (
-
+
); }); diff --git a/web/core/components/dropdowns/module/index.tsx b/web/core/components/dropdowns/module/index.tsx index a9c435446..9368990d3 100644 --- a/web/core/components/dropdowns/module/index.tsx +++ b/web/core/components/dropdowns/module/index.tsx @@ -93,7 +93,7 @@ const ButtonContent: React.FC = (props) => { return (
{!hideIcon && } {!hideText && ( diff --git a/web/core/components/gantt-chart/chart/header.tsx b/web/core/components/gantt-chart/chart/header.tsx index 4e16436df..9159050ea 100644 --- a/web/core/components/gantt-chart/chart/header.tsx +++ b/web/core/components/gantt-chart/chart/header.tsx @@ -2,6 +2,7 @@ import { observer } from "mobx-react"; import { Expand, Shrink } from "lucide-react"; // hooks // helpers +import { Row } from "@plane/ui"; import { VIEWS_LIST } from "@/components/gantt-chart/data"; import { cn } from "@/helpers/common.helper"; // types @@ -26,7 +27,7 @@ export const GanttChartHeader: React.FC = observer((props) => { const { currentView } = useGanttChart(); return ( -
+
{blockIds ? `${blockIds.length} ${loaderTitle}` : "Loading..."} @@ -65,6 +66,6 @@ export const GanttChartHeader: React.FC = observer((props) => { > {fullScreenMode ? : } -
+ ); }); diff --git a/web/core/components/gantt-chart/sidebar/cycles/block.tsx b/web/core/components/gantt-chart/sidebar/cycles/block.tsx index d4e863af1..814e3aa99 100644 --- a/web/core/components/gantt-chart/sidebar/cycles/block.tsx +++ b/web/core/components/gantt-chart/sidebar/cycles/block.tsx @@ -33,7 +33,7 @@ export const CyclesSidebarBlock: React.FC = observer((props) => { >
{ onMouseEnter={() => updateActiveBlockId(block.id)} onMouseLeave={() => updateActiveBlockId(null)} > -
{ height: `${BLOCK_HEIGHT}px`, }} > -
- {enableSelection && selectionHelpers && ( + {enableSelection && selectionHelpers && ( +
{ id={block.id} selectionHelpers={selectionHelpers} /> - )} -
+
+ )}
@@ -82,7 +83,7 @@ export const IssuesSidebarBlock = observer((props: Props) => {
)}
-
+
); }); diff --git a/web/core/components/gantt-chart/sidebar/modules/block.tsx b/web/core/components/gantt-chart/sidebar/modules/block.tsx index b1489582d..e5a1603ef 100644 --- a/web/core/components/gantt-chart/sidebar/modules/block.tsx +++ b/web/core/components/gantt-chart/sidebar/modules/block.tsx @@ -1,5 +1,6 @@ import { observer } from "mobx-react"; // hooks +import { Row } from "@plane/ui"; import { BLOCK_HEIGHT } from "@/components/gantt-chart/constants"; import { useGanttChart } from "@/components/gantt-chart/hooks"; // components @@ -31,9 +32,9 @@ export const ModulesSidebarBlock: React.FC = observer((props) => { onMouseEnter={() => updateActiveBlockId(block.id)} onMouseLeave={() => updateActiveBlockId(null)} > -
= observer((props) => {
)}
-
+
); }); diff --git a/web/core/components/gantt-chart/sidebar/root.tsx b/web/core/components/gantt-chart/sidebar/root.tsx index 00fe94ac7..70e5e152f 100644 --- a/web/core/components/gantt-chart/sidebar/root.tsx +++ b/web/core/components/gantt-chart/sidebar/root.tsx @@ -1,6 +1,7 @@ import { RefObject } from "react"; import { observer } from "mobx-react"; // components +import { Row, ERowVariant } from "@plane/ui"; import { MultipleSelectGroupAction } from "@/components/core"; import { ChartDataType, IBlockUpdateData, IGanttBlock } from "@/components/gantt-chart"; // helpers @@ -44,27 +45,24 @@ export const GanttChartSidebar: React.FC = observer((props) => { const isGroupSelectionEmpty = selectionHelpers.isGroupSelected(GANTT_SELECT_GROUP) === "empty"; return ( -
-
-
+
{enableSelection && ( -
+
= observer((props) => {
{title}
Duration
-
+ -
+ {sidebarToRender && sidebarToRender({ title, @@ -96,8 +94,8 @@ export const GanttChartSidebar: React.FC = observer((props) => { loadMoreBlocks, selectionHelpers, })} -
+ {quickAdd ? quickAdd : null} -
+ ); }); diff --git a/web/core/components/inbox/content/inbox-issue-header.tsx b/web/core/components/inbox/content/inbox-issue-header.tsx index 114a5134d..25ca47106 100644 --- a/web/core/components/inbox/content/inbox-issue-header.tsx +++ b/web/core/components/inbox/content/inbox-issue-header.tsx @@ -13,9 +13,9 @@ import { Link, Trash2, MoveRight, - Copy + Copy, } from "lucide-react"; -import { Button, ControlLink, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; +import { Button, ControlLink, CustomMenu, Row, TOAST_TYPE, setToast } from "@plane/ui"; // components import { DeclineIssueModal, @@ -245,7 +245,7 @@ export const InboxIssueActionsHeader: FC = observer((p /> -
+
{isNotificationEmbed && (
-
+
= observer((props) = if (!issue || !inboxIssue) return null; return ( - +
{isNotificationEmbed && (
- + ); }); diff --git a/web/core/components/inbox/content/issue-properties.tsx b/web/core/components/inbox/content/issue-properties.tsx index bc3ca759e..db7ad8e41 100644 --- a/web/core/components/inbox/content/issue-properties.tsx +++ b/web/core/components/inbox/content/issue-properties.tsx @@ -35,8 +35,8 @@ export const InboxIssueContentProperties: React.FC = observer((props) => if (!issue || !issue?.id) return <>; return ( -
-
+
+
Properties
diff --git a/web/core/components/inbox/content/issue-root.tsx b/web/core/components/inbox/content/issue-root.tsx index a95be412d..6384696f6 100644 --- a/web/core/components/inbox/content/issue-root.tsx +++ b/web/core/components/inbox/content/issue-root.tsx @@ -100,7 +100,7 @@ export const InboxIssueMainContent: React.FC = observer((props) => { return ( <> -
+
= observer((props) => { )}
-
- -
+ = observer((props) => { duplicateIssueDetails={inboxIssue?.duplicate_issue_detail} /> -
- -
+ ); }); diff --git a/web/core/components/inbox/content/root.tsx b/web/core/components/inbox/content/root.tsx index c87afb9c1..2278a88b0 100644 --- a/web/core/components/inbox/content/root.tsx +++ b/web/core/components/inbox/content/root.tsx @@ -2,6 +2,7 @@ import { FC, useEffect, useState } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // components +import { ContentWrapper } from "@plane/ui"; import { InboxIssueActionsHeader, InboxIssueMainContent } from "@/components/inbox"; // constants import { EUserProjectRoles } from "@/constants/project"; @@ -83,7 +84,7 @@ export const InboxContentRoot: FC = observer((props) => { embedRemoveCurrentNotification={embedRemoveCurrentNotification} />
-
+ = observer((props) => { isSubmitting={isSubmitting} setIsSubmitting={setIsSubmitting} /> -
+
); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/date.tsx b/web/core/components/inbox/inbox-filter/applied-filters/date.tsx index dcac855b4..b8673f205 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/date.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/date.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; import { X } from "lucide-react"; import { TInboxIssueFilterDateKeys } from "@plane/types"; // helpers +import { Tag } from "@plane/ui"; import { renderFormattedDate } from "@/helpers/date-time.helper"; // constants import { PAST_DURATION_FILTER_OPTIONS } from "@/helpers/inbox.helper"; @@ -37,7 +38,7 @@ export const InboxIssueAppliedFiltersDate: FC = ob if (filteredValues.length === 0) return <>; return ( -
+
{label}
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -61,6 +62,6 @@ export const InboxIssueAppliedFiltersDate: FC = ob >
-
+ ); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/label.tsx b/web/core/components/inbox/inbox-filter/applied-filters/label.tsx index af121718c..d18438caf 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/label.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/label.tsx @@ -2,6 +2,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; // hooks +import { Tag } from "@plane/ui"; import { useLabel, useProjectInbox } from "@/hooks/store"; const LabelIcons = ({ color }: { color: string }) => ( @@ -23,7 +24,7 @@ export const InboxIssueAppliedFiltersLabel: FC = observer(() => { if (filteredValues.length === 0) return <>; return ( -
+
Label
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -50,6 +51,6 @@ export const InboxIssueAppliedFiltersLabel: FC = observer(() => { >
-
+ ); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/member.tsx b/web/core/components/inbox/inbox-filter/applied-filters/member.tsx index eeae2dafd..2bf69b023 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/member.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/member.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; import { TInboxIssueFilterMemberKeys } from "@plane/types"; -import { Avatar } from "@plane/ui"; +import { Avatar, Tag } from "@plane/ui"; // hooks import { useMember, useProjectInbox } from "@/hooks/store"; @@ -29,7 +29,7 @@ export const InboxIssueAppliedFiltersMember: FC if (filteredValues.length === 0) return <>; return ( -
+
{label}
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -56,6 +56,6 @@ export const InboxIssueAppliedFiltersMember: FC >
-
+ ); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx b/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx index 8fabeee7f..080250904 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; import { TIssuePriorities } from "@plane/types"; -import { PriorityIcon } from "@plane/ui"; +import { PriorityIcon, Tag } from "@plane/ui"; // constants import { ISSUE_PRIORITIES } from "@/constants/issue"; // hooks @@ -25,7 +25,7 @@ export const InboxIssueAppliedFiltersPriority: FC = observer(() => { if (filteredValues.length === 0) return <>; return ( -
+
Priority
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -52,6 +52,6 @@ export const InboxIssueAppliedFiltersPriority: FC = observer(() => { >
-
+ ); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/root.tsx b/web/core/components/inbox/inbox-filter/applied-filters/root.tsx index 8896a3608..a0ddd674a 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/root.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/root.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; // components -import { CustomHeader, EHeaderVariant } from "@plane/ui"; +import { Header, EHeaderVariant } from "@plane/ui"; import { InboxIssueAppliedFiltersStatus, InboxIssueAppliedFiltersPriority, @@ -18,7 +18,7 @@ export const InboxIssueAppliedFilters: FC = observer(() => { if (getAppliedFiltersCount === 0) return <>; return ( - +
{/* status */} {/* state */} @@ -35,6 +35,6 @@ export const InboxIssueAppliedFilters: FC = observer(() => { {/* updated_at */} - +
); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/state.tsx b/web/core/components/inbox/inbox-filter/applied-filters/state.tsx index 94e8aaac1..8a1f0d0ad 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/state.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/state.tsx @@ -3,7 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; -import { StateGroupIcon } from "@plane/ui"; +import { StateGroupIcon, Tag } from "@plane/ui"; // hooks import { useProjectInbox, useProjectState } from "@/hooks/store"; @@ -22,7 +22,7 @@ export const InboxIssueAppliedFiltersState: FC = observer(() => { if (filteredValues.length === 0) return <>; return ( -
+
State
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -49,6 +49,6 @@ export const InboxIssueAppliedFiltersState: FC = observer(() => { >
-
+ ); }); diff --git a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx index 23351352d..3232e4a5a 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; import { X } from "lucide-react"; import { TInboxIssueStatus } from "@plane/types"; // constants +import { Tag } from "@plane/ui"; import { INBOX_STATUS } from "@/constants/inbox"; // hooks import { useProjectInbox } from "@/hooks/store"; @@ -19,7 +20,7 @@ export const InboxIssueAppliedFiltersStatus: FC = observer(() => { if (filteredValues.length === 0) return <>; return ( -
+
Status
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); @@ -41,6 +42,6 @@ export const InboxIssueAppliedFiltersStatus: FC = observer(() => {
); })} -
+ ); }); diff --git a/web/core/components/inbox/sidebar/inbox-list-item.tsx b/web/core/components/inbox/sidebar/inbox-list-item.tsx index 2b69f92c9..c1574fe29 100644 --- a/web/core/components/inbox/sidebar/inbox-list-item.tsx +++ b/web/core/components/inbox/sidebar/inbox-list-item.tsx @@ -4,7 +4,7 @@ import { FC, MouseEvent } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; -import { Tooltip, PriorityIcon } from "@plane/ui"; +import { Tooltip, PriorityIcon, Row } from "@plane/ui"; // components import { ButtonAvatars } from "@/components/dropdowns/member/avatar"; import { InboxIssueStatus } from "@/components/inbox"; @@ -53,9 +53,9 @@ export const InboxIssueListItem: FC = observer((props) href={`/${workspaceSlug}/projects/${projectId}/inbox?currentTab=${currentTab}&inboxIssueId=${issue.id}`} onClick={(e) => handleIssueRedirection(e, issue.id)} > -
@@ -118,7 +118,7 @@ export const InboxIssueListItem: FC = observer((props) {/* created by */} {createdByDetails && }
-
+ ); diff --git a/web/core/components/inbox/sidebar/root.tsx b/web/core/components/inbox/sidebar/root.tsx index 79d271933..c83ec5816 100644 --- a/web/core/components/inbox/sidebar/root.tsx +++ b/web/core/components/inbox/sidebar/root.tsx @@ -3,7 +3,7 @@ import { FC, useCallback, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; import { TInboxIssueCurrentTab } from "@plane/types"; -import { CustomHeader, Loader, EHeaderVariant } from "@plane/ui"; +import { Header, Loader, EHeaderVariant } from "@plane/ui"; // components import { EmptyState } from "@/components/empty-state"; import { FiltersRoot, InboxIssueAppliedFilters, InboxIssueList } from "@/components/inbox"; @@ -76,7 +76,7 @@ export const InboxSidebar: FC = observer((props) => { return (
- +
{tabNavigationOptions.map((option) => (
= observer((props) => {
- +
{loader != undefined && loader === "filter-loading" && !inboxIssuePaginationInfo?.next_page_results ? ( diff --git a/web/core/components/issues/issue-layouts/calendar/header.tsx b/web/core/components/issues/issue-layouts/calendar/header.tsx index 69ec56cb4..c7e6232a0 100644 --- a/web/core/components/issues/issue-layouts/calendar/header.tsx +++ b/web/core/components/issues/issue-layouts/calendar/header.tsx @@ -8,6 +8,7 @@ import { IIssueFilterOptions, TIssueKanbanFilters, } from "@plane/types"; +import { Row } from "@plane/ui"; import { CalendarMonthsDropdown, CalendarOptionsDropdown } from "@/components/issues"; // icons import { EIssueFilterType } from "@/constants/issue"; @@ -96,7 +97,7 @@ export const CalendarHeader: React.FC = observer((props) => { }; return ( -
+
-
+ ); }); diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx index 82663a2c4..c7514cf2d 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx @@ -3,6 +3,7 @@ import { X } from "lucide-react"; // types import { IIssueFilterOptions, IIssueLabel, IState } from "@plane/types"; // components +import { Tag } from "@plane/ui"; import { AppliedCycleFilters, AppliedDateFilters, @@ -67,100 +68,90 @@ export const AppliedFiltersList: React.FC = observer((props) => { if (Array.isArray(value) && value.length === 0) return; return ( -
-
- {replaceUnderscoreIfSnakeCase(filterKey)} - {membersFilters.includes(filterKey) && ( - handleRemoveFilter(filterKey, val)} - values={value} - /> - )} - {dateFilters.includes(filterKey) && ( - handleRemoveFilter(filterKey, val)} values={value} /> - )} - {filterKey === "labels" && ( - handleRemoveFilter("labels", val)} - labels={labels} - values={value} - /> - )} - {filterKey === "priority" && ( - handleRemoveFilter("priority", val)} - values={value} - /> - )} - {filterKey === "state" && states && ( - handleRemoveFilter("state", val)} - states={states} - values={value} - /> - )} - {filterKey === "state_group" && ( - handleRemoveFilter("state_group", val)} - values={value} - /> - )} - {filterKey === "project" && ( - handleRemoveFilter("project", val)} - values={value} - /> - )} - {filterKey === "cycle" && ( - handleRemoveFilter("cycle", val)} - values={value} - /> - )} - {filterKey === "module" && ( - handleRemoveFilter("module", val)} - values={value} - /> - )} - {filterKey === "issue_type" && ( - handleRemoveFilter("issue_type", val)} - values={value} - /> - )} - {isEditingAllowed && ( - - )} -
-
+ + {replaceUnderscoreIfSnakeCase(filterKey)} + {membersFilters.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={value} + /> + )} + {dateFilters.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} values={value} /> + )} + {filterKey === "labels" && ( + handleRemoveFilter("labels", val)} + labels={labels} + values={value} + /> + )} + {filterKey === "priority" && ( + handleRemoveFilter("priority", val)} + values={value} + /> + )} + {filterKey === "state" && states && ( + handleRemoveFilter("state", val)} + states={states} + values={value} + /> + )} + {filterKey === "state_group" && ( + handleRemoveFilter("state_group", val)} values={value} /> + )} + {filterKey === "project" && ( + handleRemoveFilter("project", val)} + values={value} + /> + )} + {filterKey === "cycle" && ( + handleRemoveFilter("cycle", val)} + values={value} + /> + )} + {filterKey === "module" && ( + handleRemoveFilter("module", val)} + values={value} + /> + )} + {filterKey === "issue_type" && ( + handleRemoveFilter("issue_type", val)} + values={value} + /> + )} + {isEditingAllowed && ( + + )} + ); })} {isEditingAllowed && ( - )}
diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx index 8a41df5f2..7f71abe7d 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx @@ -29,7 +29,7 @@ export const AppliedMembersFilters: React.FC = observer((props) => { return (
- + {memberDetails.display_name} {editable && ( ); }); diff --git a/web/core/components/issues/issue-layouts/quick-add/button/list.tsx b/web/core/components/issues/issue-layouts/quick-add/button/list.tsx index c5b77e1f0..09b90dbf4 100644 --- a/web/core/components/issues/issue-layouts/quick-add/button/list.tsx +++ b/web/core/components/issues/issue-layouts/quick-add/button/list.tsx @@ -1,18 +1,19 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { PlusIcon } from "lucide-react"; +import { Row } from "@plane/ui"; import { TQuickAddIssueButton } from "../root"; export const ListQuickAddIssueButton: FC = observer((props) => { const { onClick } = props; return ( -
New Issue -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx index f61d06a66..70d7dce43 100644 --- a/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx @@ -1,9 +1,10 @@ -import React from "react" +import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // mobx store // components +import { Row, ERowVariant } from "@plane/ui"; import { IssuePeekOverview, ModuleAppliedFiltersRoot, @@ -62,9 +63,9 @@ export const ModuleLayoutRoot: React.FC = observer(() => {
-
+ -
+ {/* peek overview */}
diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx index cf71f2436..548a46970 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx @@ -36,7 +36,7 @@ export const SpreadsheetAssigneeColumn: React.FC = observer((props: Props buttonVariant={ issue?.assignee_ids && issue.assignee_ids.length > 1 ? "transparent-without-text" : "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" + 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" onClose={onClose} /> diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx index 40866767c..d88563191 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx @@ -2,6 +2,7 @@ import React from "react"; import { observer } from "mobx-react"; // types import { TIssue } from "@plane/types"; +import { Row } from "@plane/ui"; type Props = { issue: TIssue; @@ -11,8 +12,8 @@ export const SpreadsheetAttachmentColumn: React.FC = observer((props) => const { issue } = props; return ( -
+ {issue?.attachment_count} {issue?.attachment_count === 1 ? "attachment" : "attachments"} -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx index 8b2a20a51..79ac6e924 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; // types import { TIssue } from "@plane/types"; // helpers +import { Row } from "@plane/ui"; import { renderFormattedDate } from "@/helpers/date-time.helper"; type Props = { @@ -13,8 +14,8 @@ export const SpreadsheetCreatedOnColumn: React.FC = observer((props: Prop const { issue } = props; return ( -
+ {renderFormattedDate(issue.created_at)} -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx index 8e18c2d5c..d4a7886a0 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx @@ -54,8 +54,8 @@ export const SpreadsheetCycleColumn: React.FC = observer((props) => { disabled={disabled} placeholder="Select cycle" buttonVariant="transparent-with-text" - buttonContainerClassName="w-full relative flex items-center p-2 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10" - buttonClassName="relative leading-4 h-4.5 bg-transparent hover:bg-transparent" + buttonContainerClassName="w-full relative flex items-center p-2 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10 px-page-x" + buttonClassName="relative leading-4 h-4.5 bg-transparent hover:bg-transparent px-0" onClose={onClose} />
diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx index f0c43a457..9e120bb7a 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx @@ -48,7 +48,7 @@ export const SpreadsheetDueDateColumn: React.FC = observer((props: Props) buttonVariant="transparent-with-text" buttonContainerClassName="w-full" buttonClassName={cn( - "rounded-none text-left group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10", + "rounded-none text-left group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10 px-page-x", { "text-red-500": shouldHighlightIssueDueDate(issue.target_date, stateDetails?.group), } diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx index 6373a6dc6..d63b49da3 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx @@ -25,7 +25,7 @@ export const SpreadsheetEstimateColumn: React.FC = observer((props: Props projectId={issue.project_id ?? undefined} disabled={disabled} 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" + 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" onClose={onClose} /> diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx index 8f50d6c1e..f7d9e9f0e 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx @@ -11,7 +11,7 @@ import { MoveRight, } from "lucide-react"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties, TIssueOrderByOptions } from "@plane/types"; -import { CustomMenu } from "@plane/ui"; +import { CustomMenu, Row } from "@plane/ui"; //hooks import { SPREADSHEET_PROPERTY_DETAILS } from "@/constants/spreadsheet"; import useLocalStorage from "@/hooks/use-local-storage"; @@ -51,7 +51,7 @@ export const HeaderColumn = (props: Props) => { customButtonTabIndex={-1} className="!w-full" customButton={ -
+
{} {propertyDetails.title} @@ -64,7 +64,7 @@ export const HeaderColumn = (props: Props) => { )}
-
+ } onMenuClose={onClose} placement="bottom-start" diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx index 7320aab9a..5afa6cc55 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx @@ -22,18 +22,22 @@ export const SpreadsheetLabelColumn: React.FC = observer((props: Props) = const defaultLabelOptions = issue?.label_ids?.map((id) => labelMap[id]) || []; return ( - onChange(issue, { label_ids: data }, { changed_property: "labels", change_details: data })} - className="h-11 w-full border-b-[0.5px] border-custom-border-200" - buttonClassName="px-2.5 h-full group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10" - hideDropdownArrow - maxRender={1} - disabled={disabled} - placeholderText="Select labels" - onClose={onClose} - /> +
+ onChange(issue, { label_ids: data }, { changed_property: "labels", change_details: data })} + className="h-full w-full " + buttonClassName="px-page-x w-full h-full group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10 rounded-none" + hideDropdownArrow + maxRender={1} + disabled={disabled} + placeholderText="Select labels" + onClose={onClose} + noLabelBorder + fullWidth + /> +
); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx index fe1ae24d6..fe5e43e93 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx @@ -2,6 +2,7 @@ import React from "react"; import { observer } from "mobx-react"; // types import { TIssue } from "@plane/types"; +import { Row } from "@plane/ui"; type Props = { issue: TIssue; @@ -11,8 +12,8 @@ export const SpreadsheetLinkColumn: React.FC = observer((props: Props) => const { issue } = props; return ( -
+ {issue?.link_count} {issue?.link_count === 1 ? "link" : "links"} -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx index 14fba6140..a20948bf0 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx @@ -64,8 +64,8 @@ export const SpreadsheetModuleColumn: React.FC = observer((props) => { disabled={disabled} placeholder="Select modules" buttonVariant="transparent-with-text" - buttonContainerClassName="w-full relative flex items-center p-2 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10" - buttonClassName="relative leading-4 h-4.5 bg-transparent hover:bg-transparent" + buttonContainerClassName="w-full relative flex items-center p-2 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10 px-page-x" + buttonClassName="relative leading-4 h-4.5 bg-transparent hover:bg-transparent !px-0" onClose={onClose} multiple showCount diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx index 5d531d71c..a23236f48 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx @@ -22,7 +22,7 @@ export const SpreadsheetPriorityColumn: React.FC = observer((props: Props onChange={(data) => onChange(issue, { priority: data }, { changed_property: "priority", change_details: data })} disabled={disabled} 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" + 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" onClose={onClose} /> diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx index 9a17d34d4..8a8c0d268 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx @@ -38,7 +38,7 @@ export const SpreadsheetStartDateColumn: React.FC = observer((props: Prop placeholder="Start date" 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" + 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" onClose={onClose} /> diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx index e98c4cd65..6a2593836 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx @@ -23,7 +23,7 @@ export const SpreadsheetStateColumn: React.FC = observer((props) => { onChange={(data) => onChange(issue, { state_id: data }, { changed_property: "state", change_details: data })} disabled={disabled} 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" + 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" onClose={onClose} showTooltip diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx index 2ca1f3dda..4db6da507 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx @@ -4,6 +4,7 @@ import { useParams } from "next/navigation"; // types import { TIssue } from "@plane/types"; // helpers +import { Row } from "@plane/ui"; import { cn } from "@/helpers/common.helper"; // hooks import { useAppRouter } from "@/hooks/use-app-router"; @@ -22,20 +23,22 @@ export const SpreadsheetSubIssueColumn: React.FC = observer((props: Props const subIssueCount = issue?.sub_issues_count ?? 0; const redirectToIssueDetail = () => { - router.push(`/${workspaceSlug?.toString()}/projects/${issue.project_id}/${issue.archived_at ? "archives/" : ""}issues/${issue.id}#sub-issues`); + router.push( + `/${workspaceSlug?.toString()}/projects/${issue.project_id}/${issue.archived_at ? "archives/" : ""}issues/${issue.id}#sub-issues` + ); }; return ( -
{}} className={cn( - "flex h-11 w-full items-center border-b-[0.5px] border-custom-border-200 px-2.5 py-1 text-xs hover:bg-custom-background-80 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10", + "flex h-11 w-full items-center border-b-[0.5px] border-custom-border-200 py-1 text-xs hover:bg-custom-background-80 group-[.selected-issue-row]:bg-custom-primary-100/5 group-[.selected-issue-row]:hover:bg-custom-primary-100/10", { "cursor-pointer": subIssueCount, } )} > {subIssueCount} {subIssueCount === 1 ? "sub-issue" : "sub-issues"} -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx index b0d916b2a..a93c01700 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; // types import { TIssue } from "@plane/types"; // helpers +import { Row } from "@plane/ui"; import { renderFormattedDate } from "@/helpers/date-time.helper"; type Props = { @@ -13,8 +14,8 @@ export const SpreadsheetUpdatedOnColumn: React.FC = observer((props: Prop const { issue } = props; return ( -
+ {renderFormattedDate(issue.updated_at)} -
+ ); }); diff --git a/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx index 764021abd..bcfd65f8c 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx @@ -7,7 +7,7 @@ import { ChevronRight, MoreHorizontal } from "lucide-react"; // types import { IIssueDisplayProperties, TIssue } from "@plane/types"; // ui -import { ControlLink, Tooltip } from "@plane/ui"; +import { ControlLink, Row, Tooltip } from "@plane/ui"; // components import { MultipleSelectEntityAction } from "@/components/core"; import RenderIfVisible from "@/components/core/render-if-visible-HOC"; @@ -237,7 +237,7 @@ const IssueRowDetails = observer((props: IssueRowDetailsProps) => { id={`issue-${issueId}`} ref={cellRef} tabIndex={0} - className="sticky left-0 z-10 group/list-block bg-custom-background-100" + className="relative md:sticky left-0 z-10 group/list-block bg-custom-background-100" > { )} disabled={!!issueDetail?.tempId} > -
- {/* select checkbox */} - {projectId && canSelectIssues && ( - - Only issues within the current -
- project can be selected. - - } - disabled={issueDetail.project_id === projectId} - > -
- -
-
- )} - - {/* sub issues indentation */} -
- - -
-

- {issueDetail.project_id && ( - - )} -

-
-
- - {/* sub-issues chevron */} -
- {subIssuesCount > 0 && ( - - )} -
-
- -
-
-
- -
- {issueDetail.name} +
+
+ )} + + {/* sub issues indentation */} + {nestingLevel !== 0 &&
} + + +
+

+ {issueDetail.project_id && ( + + )} +

+
+
+ + {/* sub-issues chevron */} +
+ {subIssuesCount > 0 && ( + + )}
-
e.stopPropagation()} - > - {quickActions({ - issue: issueDetail, - parentRef: cellRef, - customActionButton, - portalElement: portalElement.current, - })} + +
+
+
+ +
+ {issueDetail.name} +
+
+
+
+
e.stopPropagation()} + > + {quickActions({ + issue: issueDetail, + parentRef: cellRef, + customActionButton, + portalElement: portalElement.current, + })} +
-
+ {/* Rest of the columns */} diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx b/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx index 9e14bfef9..e66fe74df 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx @@ -28,7 +28,7 @@ export const SpreadsheetHeaderColumn = observer((props: Props) => { shouldRenderProperty={() => shouldRenderProperty} >
{spreadsheetColumnsList.map((property) => ( diff --git a/web/core/components/issues/issue-modal/base.tsx b/web/core/components/issues/issue-modal/base.tsx index 4640e136a..88ca5ad0c 100644 --- a/web/core/components/issues/issue-modal/base.tsx +++ b/web/core/components/issues/issue-modal/base.tsx @@ -275,14 +275,14 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( let response: TIssue | undefined = undefined; - try{ + try { if (!data?.id) response = await handleCreateIssue(payload, is_draft_issue); else response = await handleUpdateIssue(payload); - }catch(error){ + } catch (error) { throw error; - }finally{ - if (response != undefined && onSubmit) await onSubmit(response) - } + } finally { + if (response != undefined && onSubmit) await onSubmit(response); + } }; const handleFormChange = (formData: Partial | null) => setChangesMade(formData); diff --git a/web/core/components/issues/issue-modal/form.tsx b/web/core/components/issues/issue-modal/form.tsx index e62d914e4..b060f271a 100644 --- a/web/core/components/issues/issue-modal/form.tsx +++ b/web/core/components/issues/issue-modal/form.tsx @@ -158,7 +158,6 @@ export const IssueFormRoot: FC = observer((props) => { }, [data, projectId]); const handleFormSubmit = async (formData: Partial, is_draft_issue = false) => { - // Check if the editor is ready to discard if (!editorRef.current?.isEditorReadyToDiscard()) { setToast({ @@ -190,9 +189,9 @@ export const IssueFormRoot: FC = observer((props) => { // this condition helps to move the issues from draft to project issues if (formData.hasOwnProperty("is_draft")) submitData.is_draft = formData.is_draft; - + await onSubmit(submitData, is_draft_issue) - .then(() =>{ + .then(() => { setGptAssistantModal(false); reset({ ...defaultValues, @@ -203,8 +202,9 @@ export const IssueFormRoot: FC = observer((props) => { }); editorRef?.current?.clearEditor(); }) - .catch((error) => {}) - + .catch((error) => { + console.error(error); + }); }; const condition = diff --git a/web/core/components/modules/applied-filters/members.tsx b/web/core/components/modules/applied-filters/members.tsx index 7c8bde6b0..69f7d0004 100644 --- a/web/core/components/modules/applied-filters/members.tsx +++ b/web/core/components/modules/applied-filters/members.tsx @@ -29,7 +29,7 @@ export const AppliedMembersFilters: React.FC = observer((props) => { return (
- + {memberDetails.display_name} {editable && ( )}
- + ); })} {!isArchived && isFavoriteFilterApplied && ( @@ -114,16 +111,14 @@ export const ModuleAppliedFiltersList: React.FC = (props) => { )} {isEditingAllowed && ( - )} - - + + ); }; diff --git a/web/core/components/modules/gantt-chart/modules-list-layout.tsx b/web/core/components/modules/gantt-chart/modules-list-layout.tsx index 1c4c88dcb..73f07bbef 100644 --- a/web/core/components/modules/gantt-chart/modules-list-layout.tsx +++ b/web/core/components/modules/gantt-chart/modules-list-layout.tsx @@ -57,22 +57,20 @@ export const ModulesListGanttChartView: React.FC = observer(() => { if (!filteredModuleIds) return null; return ( -
- } - blockUpdateHandler={(block, payload) => handleModuleUpdate(block, payload)} - blockToRender={(data: IModule) => } - enableBlockLeftResize={isAllowed} - enableBlockRightResize={isAllowed} - enableBlockMove={isAllowed} - enableReorder={isAllowed && displayFilters?.order_by === "sort_order"} - enableAddBlock={isAllowed} - showAllBlocks - /> -
+ } + blockUpdateHandler={(block, payload) => handleModuleUpdate(block, payload)} + blockToRender={(data: IModule) => } + enableBlockLeftResize={isAllowed} + enableBlockRightResize={isAllowed} + enableBlockMove={isAllowed} + enableReorder={isAllowed && displayFilters?.order_by === "sort_order"} + enableAddBlock={isAllowed} + showAllBlocks + /> ); }); diff --git a/web/core/components/modules/module-card-item.tsx b/web/core/components/modules/module-card-item.tsx index 5bae53d76..031941553 100644 --- a/web/core/components/modules/module-card-item.tsx +++ b/web/core/components/modules/module-card-item.tsx @@ -7,7 +7,7 @@ import { useParams, usePathname, useSearchParams } from "next/navigation"; import { CalendarCheck2, CalendarClock, Info, MoveRight, SquareUser } from "lucide-react"; // ui import { IModule } from "@plane/types"; -import { FavoriteStar, LayersIcon, LinearProgressIndicator, Tooltip, setPromiseToast } from "@plane/ui"; +import { Card, FavoriteStar, LayersIcon, LinearProgressIndicator, Tooltip, setPromiseToast } from "@plane/ui"; // components import { ButtonAvatars } from "@/components/dropdowns/member/avatar"; import { ModuleQuickActions } from "@/components/modules"; @@ -176,7 +176,7 @@ export const ModuleCardItem: React.FC = observer((props) => { return (
-
+
@@ -200,7 +200,6 @@ export const ModuleCardItem: React.FC = observer((props) => {
-
@@ -232,7 +231,7 @@ export const ModuleCardItem: React.FC = observer((props) => { )}
-
+
{isEditingAllowed && ( diff --git a/web/core/components/modules/modules-list-view.tsx b/web/core/components/modules/modules-list-view.tsx index 77f634fb7..4b45879f7 100644 --- a/web/core/components/modules/modules-list-view.tsx +++ b/web/core/components/modules/modules-list-view.tsx @@ -2,6 +2,7 @@ import { observer } from "mobx-react"; import Image from "next/image"; import { useParams, useSearchParams } from "next/navigation"; // components +import { ContentWrapper, Row, ERowVariant } from "@plane/ui"; import { ListLayout } from "@/components/core/list"; import { EmptyState } from "@/components/empty-state"; import { ModuleCardItem, ModuleListItem, ModulePeekOverview, ModulesListGanttChartView } from "@/components/modules"; @@ -67,44 +68,34 @@ export const ModulesListView: React.FC = observer(() => { ); return ( - <> + {displayFilters?.layout === "list" && ( -
-
- - {filteredModuleIds.map((moduleId) => ( - - ))} - - -
+
+ + {filteredModuleIds.map((moduleId) => ( + + ))} + +
)} {displayFilters?.layout === "board" && ( -
-
-
- {filteredModuleIds.map((moduleId) => ( - - ))} -
- + +
+ {filteredModuleIds.map((moduleId) => ( + + ))}
-
+ + )} {displayFilters?.layout === "gantt" && } - + ); }); diff --git a/web/core/components/page-views/workspace-dashboard.tsx b/web/core/components/page-views/workspace-dashboard.tsx index d986d1914..a6affa4ae 100644 --- a/web/core/components/page-views/workspace-dashboard.tsx +++ b/web/core/components/page-views/workspace-dashboard.tsx @@ -2,6 +2,7 @@ import { useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components +import { ContentWrapper } from "@plane/ui"; import { DashboardWidgets } from "@/components/dashboard"; import { EmptyState } from "@/components/empty-state"; import { IssuePeekOverview } from "@/components/issues"; @@ -64,19 +65,16 @@ export const WorkspaceDashboardView = observer(() => { <> {joinedProjectIds.length > 0 || loader ? ( <> - -
= 768, - } - )} + + = 768, + })} > {currentUser && } -
+ ) : ( = observer((props) => { project: { getProjectMemberIds }, } = useMember(); // derived values - const workspaceId = workspaceSlug ? getWorkspaceBySlug(workspaceSlug.toString())?.id ?? "" : ""; + const workspaceId = workspaceSlug ? (getWorkspaceBySlug(workspaceSlug.toString())?.id ?? "") : ""; const pageId = page?.id; const pageTitle = page?.name ?? ""; const pageDescription = page?.description_html; @@ -135,8 +136,8 @@ export const PageEditorBody: React.FC = observer((props) => { return (
- +
= observer((props) => { return ( <> - +
= observer((props) => { page={page} readOnlyEditorRef={readOnlyEditorRef} /> - - +
+
{(editorReady || readOnlyEditorReady) && isContentEditable && editorRef.current && ( )} - +
); }); diff --git a/web/core/components/pages/editor/header/root.tsx b/web/core/components/pages/editor/header/root.tsx index 2428448d8..8fe504065 100644 --- a/web/core/components/pages/editor/header/root.tsx +++ b/web/core/components/pages/editor/header/root.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { EditorReadOnlyRefApi, EditorRefApi, IMarking } from "@plane/editor"; // components -import { CustomHeader, EHeaderVariant } from "@plane/ui"; +import { Header, EHeaderVariant } from "@plane/ui"; import { PageEditorMobileHeaderRoot, PageExtraOptions, PageSummaryPopover, PageToolbar } from "@/components/pages"; // helpers import { cn } from "@/helpers/common.helper"; @@ -45,19 +45,26 @@ export const PageEditorHeaderRoot: React.FC = observer((props) => { return ( <> - -
- -
- {(editorReady || readOnlyEditorReady) && isContentEditable && editorRef.current && ( - - )} +
+ +
+ +
+ {(editorReady || readOnlyEditorReady) && isContentEditable && editorRef.current && ( + + )} +
= observer((props) => { page={page} readOnlyEditorRef={readOnlyEditorRef} /> - +
= observer((props) => { return ( <> - - +
+ - - + + updateFilters("searchQuery", val)} @@ -79,17 +79,17 @@ export const PagesListHeaderRoot: React.FC = observer((props) => { memberIds={workspaceMemberIds ?? undefined} /> - - + +
{calculateTotalFilters(filters?.filters ?? {}) !== 0 && ( - +
- +
)} ); diff --git a/web/core/components/pages/list/applied-filters/root.tsx b/web/core/components/pages/list/applied-filters/root.tsx index 5ae9d7bb1..48e79f958 100644 --- a/web/core/components/pages/list/applied-filters/root.tsx +++ b/web/core/components/pages/list/applied-filters/root.tsx @@ -1,6 +1,7 @@ import { X } from "lucide-react"; import { TPageFilterProps } from "@plane/types"; // components +import { Tag } from "@plane/ui"; import { AppliedDateFilters, AppliedMembersFilters } from "@/components/common/applied-filters"; // helpers import { replaceUnderscoreIfSnakeCase } from "@/helpers/string.helper"; @@ -33,10 +34,7 @@ export const PageAppliedFiltersList: React.FC = (props) => { if (Array.isArray(value) && value.length === 0) return; return ( -
+
{replaceUnderscoreIfSnakeCase(filterKey)} {DATE_FILTERS.includes(filterKey) && ( @@ -63,17 +61,15 @@ export const PageAppliedFiltersList: React.FC = (props) => { )}
-
+ ); })} {isEditingAllowed && ( - )}
diff --git a/web/core/components/profile/overview/activity.tsx b/web/core/components/profile/overview/activity.tsx index 5beeeb65e..c2e8b896b 100644 --- a/web/core/components/profile/overview/activity.tsx +++ b/web/core/components/profile/overview/activity.tsx @@ -4,7 +4,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // ui -import { Loader } from "@plane/ui"; +import { Loader, Card } from "@plane/ui"; // components import { ActivityMessage, IssueLink } from "@/components/core"; import { ProfileEmptyState } from "@/components/ui"; @@ -39,7 +39,7 @@ export const ProfileActivity = observer(() => { return (

Recent activity

-
+ {userProfileActivity ? ( userProfileActivity.results.length > 0 ? (
@@ -94,7 +94,7 @@ export const ProfileActivity = observer(() => { )} -
+
); }); diff --git a/web/core/components/profile/overview/priority-distribution.tsx b/web/core/components/profile/overview/priority-distribution.tsx index b12de7ef3..66f0e02e7 100644 --- a/web/core/components/profile/overview/priority-distribution.tsx +++ b/web/core/components/profile/overview/priority-distribution.tsx @@ -2,7 +2,7 @@ // ui import { IUserProfileData } from "@plane/types"; -import { Loader } from "@plane/ui"; +import { Loader, Card } from "@plane/ui"; import { BarGraph, ProfileEmptyState } from "@/components/ui"; // image import { capitalizeFirstLetter } from "@/helpers/string.helper"; @@ -18,7 +18,7 @@ export const ProfilePriorityDistribution: React.FC = ({ userProfile }) =>

Issues by Priority

{userProfile ? ( -
+ {userProfile.priority_distribution.length > 0 ? ( ({ @@ -74,7 +74,7 @@ export const ProfilePriorityDistribution: React.FC = ({ userProfile }) => />
)} -
+ ) : (
diff --git a/web/core/components/profile/overview/state-distribution.tsx b/web/core/components/profile/overview/state-distribution.tsx index e595973b8..1ab74a7ef 100644 --- a/web/core/components/profile/overview/state-distribution.tsx +++ b/web/core/components/profile/overview/state-distribution.tsx @@ -1,6 +1,8 @@ // ui import { IUserProfileData, IUserStateDistribution } from "@plane/types"; +import { Card } from "@plane/ui"; import { ProfileEmptyState, PieGraph } from "@/components/ui"; + // image import { STATE_GROUPS } from "@/constants/state"; import stateGraph from "@/public/empty-state/state_graph.svg"; @@ -18,7 +20,7 @@ export const ProfileStateDistribution: React.FC = ({ stateDistribution, u return (

Issues by state

-
+ {userProfile.state_distribution.length > 0 ? (
@@ -80,7 +82,7 @@ export const ProfileStateDistribution: React.FC = ({ stateDistribution, u image={stateGraph} /> )} -
+
); }; diff --git a/web/core/components/profile/overview/stats.tsx b/web/core/components/profile/overview/stats.tsx index a54053f51..50f6b0ae0 100644 --- a/web/core/components/profile/overview/stats.tsx +++ b/web/core/components/profile/overview/stats.tsx @@ -6,7 +6,7 @@ import { useParams } from "next/navigation"; // ui import { UserCircle2 } from "lucide-react"; import { IUserProfileData } from "@plane/types"; -import { CreateIcon, LayerStackIcon, Loader } from "@plane/ui"; +import { CreateIcon, LayerStackIcon, Loader, Card, ECardSpacing, ECardDirection } from "@plane/ui"; // types type Props = { @@ -44,7 +44,7 @@ export const ProfileStats: React.FC = ({ userProfile }) => {
{overviewCards.map((card) => ( - +
@@ -52,7 +52,7 @@ export const ProfileStats: React.FC = ({ userProfile }) => {

{card.title}

{card.value}

- +
))}
diff --git a/web/core/components/profile/overview/workload.tsx b/web/core/components/profile/overview/workload.tsx index f2fdd3582..94ebc2fe6 100644 --- a/web/core/components/profile/overview/workload.tsx +++ b/web/core/components/profile/overview/workload.tsx @@ -1,5 +1,6 @@ // types import { IUserStateDistribution } from "@plane/types"; +import { Card, ECardDirection, ECardSpacing } from "@plane/ui"; import { STATE_GROUPS } from "@/constants/state"; // constants @@ -13,23 +14,25 @@ export const ProfileWorkload: React.FC = ({ stateDistribution }) => (
{stateDistribution.map((group) => (
- -
-
-

- {group.state_group === "unstarted" - ? "Not started" - : group.state_group === "started" - ? "Working on" - : STATE_GROUPS[group.state_group].label} -

-

{group.state_count}

-
+
+ + ))} diff --git a/web/core/components/project/applied-filters/access.tsx b/web/core/components/project/applied-filters/access.tsx index 625c4d997..9b5f10cfc 100644 --- a/web/core/components/project/applied-filters/access.tsx +++ b/web/core/components/project/applied-filters/access.tsx @@ -17,7 +17,7 @@ export const AppliedAccessFilters: React.FC = observer((props) => { {values.map((status) => { const accessDetails = NETWORK_CHOICES.find((s) => `${s.key}` === status); return ( -
+
{accessDetails?.label} {editable && ( - )} -
-
+ + {replaceUnderscoreIfSnakeCase(filterKey)} + {filterKey === "access" && ( + handleRemoveFilter("access", val)} + values={value} + /> + )} + {DATE_FILTERS.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={value} + /> + )} + {MEMBERS_FILTERS.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={value} + /> + )} + {isEditingAllowed && ( + + )} + ); })} {/* Applied display filters */} {appliedDisplayFilters.length > 0 && ( -
-
- Projects - handleRemoveDisplayFilter(key)} - /> -
-
+ + Projects + handleRemoveDisplayFilter(key)} + /> + )} {isEditingAllowed && ( - )} -
- - {filteredProjects} of{" "} - {totalProjects} projects match the applied filters. -

- } - > - - {filteredProjects}/{totalProjects} - -
-
+ + + + {filteredProjects} of{" "} + {totalProjects} projects match the applied filters. +

+ } + > + + {filteredProjects}/{totalProjects} + +
+
+ ); }; diff --git a/web/core/components/project/card-list.tsx b/web/core/components/project/card-list.tsx index d307dd930..2578be727 100644 --- a/web/core/components/project/card-list.tsx +++ b/web/core/components/project/card-list.tsx @@ -1,6 +1,7 @@ import { observer } from "mobx-react"; import Image from "next/image"; // components +import { ContentWrapper } from "@plane/ui"; import { EmptyState } from "@/components/empty-state"; import { ProjectCard } from "@/components/project"; import { ProjectsLoader } from "@/components/ui"; @@ -52,7 +53,7 @@ export const ProjectCardList = observer(() => { ); return ( -
+
{filteredProjectIds.map((projectId) => { const projectDetails = getProjectById(projectId); @@ -60,6 +61,6 @@ export const ProjectCardList = observer(() => { return ; })}
-
+ ); }); diff --git a/web/core/components/project/header.tsx b/web/core/components/project/header.tsx index 9ef75b7a8..e885a937f 100644 --- a/web/core/components/project/header.tsx +++ b/web/core/components/project/header.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; import { Search, Briefcase, X } from "lucide-react"; // ui -import { Breadcrumbs, Button, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Button, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; // constants @@ -52,8 +52,8 @@ export const ProjectsBaseHeader = observer(() => { }, [searchQuery]); return ( - - +
+ { /> {isArchived && } />} - - + +
{!isSearchOpen && ( ) : ( <> )} - - + +
); }); diff --git a/web/core/components/project/root.tsx b/web/core/components/project/root.tsx index 87e9a0357..0d0315547 100644 --- a/web/core/components/project/root.tsx +++ b/web/core/components/project/root.tsx @@ -6,7 +6,6 @@ import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; import { TProjectAppliedDisplayFilterKeys, TProjectFilters } from "@plane/types"; // components -import { CustomHeader, EHeaderVariant } from "@plane/ui"; import { PageHead } from "@/components/core"; import { ProjectAppliedFiltersList, ProjectCardList } from "@/components/project"; // helpers @@ -75,18 +74,16 @@ const Root = observer(() => {
{(calculateTotalFilters(currentWorkspaceFilters ?? {}) !== 0 || allowedDisplayFilters.length > 0) && ( - - - + )}
diff --git a/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx b/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx index 1e2e13bd4..dfd18a389 100644 --- a/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx @@ -17,7 +17,7 @@ const CalendarDay = () => { }; export const CalendarLayoutLoader = () => ( -
+
{[...Array(5)].map((_, index) => ( diff --git a/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx b/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx index fd50638f6..9a4aa7774 100644 --- a/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx @@ -1,3 +1,4 @@ +import { Row } from "@plane/ui"; import { getRandomLength } from "../utils"; export const GanttLayoutLoader = () => ( @@ -7,24 +8,24 @@ export const GanttLayoutLoader = () => (
-
-
+ +
-
-
+ + {[...Array(6)].map((_, index) => ( -
+
))} -
+
-
+
diff --git a/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx b/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx index 817a70876..efb284171 100644 --- a/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx @@ -1,4 +1,5 @@ import { forwardRef } from "react"; +import { ContentWrapper } from "@plane/ui"; export const KanbanIssueBlockLoader = forwardRef((props, ref) => ( @@ -7,11 +8,11 @@ export const KanbanIssueBlockLoader = forwardRef((props, ref) = KanbanIssueBlockLoader.displayName = "KanbanIssueBlockLoader"; export const KanbanLayoutLoader = ({ cardsInEachColumn = [2, 3, 2, 4, 3] }: { cardsInEachColumn?: number[] }) => ( -
+ {cardsInEachColumn.map((cardsInColumn, columnIndex) => (
-
+
@@ -21,5 +22,5 @@ export const KanbanLayoutLoader = ({ cardsInEachColumn = [2, 3, 2, 4, 3] }: { ca ))}
))} -
+ ); diff --git a/web/core/components/ui/loader/layouts/list-layout-loader.tsx b/web/core/components/ui/loader/layouts/list-layout-loader.tsx index 8c471ef47..02bcf60d8 100644 --- a/web/core/components/ui/loader/layouts/list-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/list-layout-loader.tsx @@ -1,8 +1,9 @@ import { Fragment, forwardRef } from "react"; +import { Row } from "@plane/ui"; import { getRandomInt, getRandomLength } from "../utils"; export const ListLoaderItemRow = forwardRef((props, ref) => ( -
+
@@ -18,19 +19,19 @@ export const ListLoaderItemRow = forwardRef((props, ref) => ( ))}
-
+ )); ListLoaderItemRow.displayName = "ListLoaderItemRow"; const ListSection = ({ itemCount }: { itemCount: number }) => (
-
+
-
+
{[...Array(itemCount)].map((_, index) => ( diff --git a/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx b/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx index 93de3d023..370f731ed 100644 --- a/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx @@ -1,14 +1,15 @@ +import { Row } from "@plane/ui"; import { getRandomLength } from "../utils"; export const SpreadsheetIssueRowLoader = (props: { columnCount: number }) => (
{[...Array(props.columnCount)].map((_, colIndex) => (
+ {ANALYTICS_X_AXIS_VALUES.find((v) => v.value === params.x_axis)?.label} @@ -51,7 +51,7 @@ export const AnalyticsTable: React.FC = ({ analytics, barGraphData, param + {ANALYTICS_Y_AXIS_VALUES.find((v) => v.value === params.y_axis)?.label}
+
{params.x_axis === "priority" ? ( @@ -90,12 +90,12 @@ export const AnalyticsTable: React.FC = ({ analytics, barGraphData, param
+ {item[key] ?? 0} {item[yAxisKey]}{item[yAxisKey]}
diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx b/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx index ca84e6c23..ca4ea948e 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx @@ -3,6 +3,7 @@ import { useParams } from "next/navigation"; // ui import { IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types"; // components +import { Row } from "@plane/ui"; import { MultipleSelectGroupAction } from "@/components/core"; import { SpreadsheetHeaderColumn } from "@/components/issues/issue-layouts"; // constants @@ -43,24 +44,26 @@ export const SpreadsheetHeader = observer((props: Props) => {
- {canSelectIssues && ( -
- -
- )} - Issues + + {canSelectIssues && ( +
+ +
+ )} + Issues +
-
+ -
+
diff --git a/web/core/components/views/applied-filters/access.tsx b/web/core/components/views/applied-filters/access.tsx index 6587e76f5..8e418daec 100644 --- a/web/core/components/views/applied-filters/access.tsx +++ b/web/core/components/views/applied-filters/access.tsx @@ -27,7 +27,7 @@ export const AppliedAccessFilters: React.FC = observer((props) => { if (!label) return null; return ( -
+
{label} {editable && ( - )} -
-
+ + {replaceUnderscoreIfSnakeCase(filterKey)} + {VIEW_ACCESS_FILTERS.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={Array.isArray(value) ? (value as EViewAccess[]) : []} + /> + )} + {DATE_FILTERS.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={Array.isArray(value) ? (value as string[]) : []} + /> + )} + {MEMBERS_FILTERS.includes(filterKey) && ( + handleRemoveFilter(filterKey, val)} + values={Array.isArray(value) ? (value as string[]) : []} + /> + )} + {isEditingAllowed && ( + + )} + ); })} {isEditingAllowed && ( - )} diff --git a/web/core/components/views/filters/order-by.tsx b/web/core/components/views/filters/order-by.tsx index e00c18ca1..644794595 100644 --- a/web/core/components/views/filters/order-by.tsx +++ b/web/core/components/views/filters/order-by.tsx @@ -27,7 +27,7 @@ export const ViewOrderByDropdown: React.FC = (props) => { ]; const buttonClassName = isMobile - ? "flex items-center text-sm text-custom-text-200" + ? "flex items-center text-sm text-custom-text-200 gap-2" : `${getButtonStyling("neutral-primary", "sm")} px-2 text-custom-text-300`; const chevronClassName = isMobile ? "h-4 w-4 text-custom-text-200" : "h-3 w-3"; @@ -38,10 +38,11 @@ export const ViewOrderByDropdown: React.FC = (props) => { {!isMobile && } {orderByDetails?.label} - + } placement="bottom-end" + className="w-full" maxHeight="lg" closeOnSelect > diff --git a/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx b/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx index 61003a83c..66c5e3a2a 100644 --- a/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx +++ b/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; // constants -import { CustomHeader, EHeaderVariant } from "@plane/ui"; +import { Header, EHeaderVariant, Tag } from "@plane/ui"; import { ENotificationFilterType, FILTER_TYPE_OPTIONS } from "@/constants/notification"; // hooks import { useWorkspaceNotifications } from "@/hooks/store"; @@ -36,32 +36,31 @@ export const AppliedFilters: FC = observer((props) => { if (!isFiltersEnabled || !workspaceSlug) return <>; return ( - - +
+ {FILTER_TYPE_OPTIONS.map((filter) => { const isSelected = filters?.type?.[filter?.value] || false; if (!isSelected) return <>; return ( -
handleFilterTypeChange(filter?.value, !isSelected)} >
{filter.label}
-
+
-
+ ); })} - -
-
Clear all
-
- - + + +
); }); diff --git a/web/core/components/workspace-notifications/sidebar/header/root.tsx b/web/core/components/workspace-notifications/sidebar/header/root.tsx index 05cd78e15..d02b9c64e 100644 --- a/web/core/components/workspace-notifications/sidebar/header/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/header/root.tsx @@ -3,7 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Inbox } from "lucide-react"; -import { Breadcrumbs, CustomHeader } from "@plane/ui"; +import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; import { SidebarHamburgerToggle } from "@/components/core"; @@ -18,8 +18,8 @@ export const NotificationSidebarHeader: FC = observe if (!workspaceSlug) return <>; return ( - - +
+
@@ -31,10 +31,10 @@ export const NotificationSidebarHeader: FC = observe } /> - - +
+ - - + +
); }); diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx b/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx index 72af9c4e4..023524f30 100644 --- a/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx +++ b/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx @@ -3,7 +3,7 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; import { Clock } from "lucide-react"; -import { Avatar } from "@plane/ui"; +import { Avatar, Row } from "@plane/ui"; // components import { NotificationOption } from "@/components/workspace-notifications"; // helpers @@ -59,16 +59,16 @@ export const NotificationItem: FC = observer((props) => { if (!workspaceSlug || !notificationId || !notification?.id || !notificationField) return <>; return ( -
{notification.read_at === null && ( -
+
)}
@@ -171,6 +171,6 @@ export const NotificationItem: FC = observer((props) => {
-
+ ); }); diff --git a/web/core/components/workspace-notifications/sidebar/root.tsx b/web/core/components/workspace-notifications/sidebar/root.tsx index 9612d8560..767b96f42 100644 --- a/web/core/components/workspace-notifications/sidebar/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/root.tsx @@ -4,7 +4,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components -import { CustomHeader, CustomRow, EHeaderVariant } from "@plane/ui"; +import { Header, Row, ERowVariant, EHeaderVariant, ContentWrapper } from "@plane/ui"; import { CountChip } from "@/components/common"; import { NotificationsLoader, @@ -47,11 +47,11 @@ export const NotificationsSidebar: FC = observer(() => { )} >
- + - + - +
{NOTIFICATION_TABS.map((tab) => (
{ )}
))} - +
{/* applied filters */} @@ -89,9 +89,9 @@ export const NotificationsSidebar: FC = observer(() => { ) : ( <> {notificationIds && notificationIds.length > 0 ? ( -
+ -
+ ) : (
diff --git a/web/core/components/workspace/settings/workspace-details.tsx b/web/core/components/workspace/settings/workspace-details.tsx index e758f7857..85302c65e 100644 --- a/web/core/components/workspace/settings/workspace-details.tsx +++ b/web/core/components/workspace/settings/workspace-details.tsx @@ -170,7 +170,7 @@ export const WorkspaceDetails: FC = observer(() => { /> )} /> -
+