diff --git a/packages/ui/src/header/header.tsx b/packages/ui/src/header/header.tsx index ac2bd2746..e83608a67 100644 --- a/packages/ui/src/header/header.tsx +++ b/packages/ui/src/header/header.tsx @@ -11,6 +11,7 @@ export interface HeaderProps { showOnMobile?: boolean; } +const HeaderContext = React.createContext(null); const Header = (props: HeaderProps) => { const { variant = EHeaderVariant.PRIMARY, @@ -23,13 +24,15 @@ const Header = (props: HeaderProps) => { const style = getHeaderStyle(variant, setHeight, showOnMobile); return ( - - {children} - + + + {children} + + ); }; @@ -40,9 +43,23 @@ const LeftItem = (props: HeaderProps) => ( {props.children} ); -const RightItem = (props: HeaderProps) => ( -
{props.children}
-); +const RightItem = (props: HeaderProps) => { + const variant = React.useContext(HeaderContext); + if (variant === undefined) throw new Error("RightItem must be used within Header"); + return ( +
+ {props.children} +
+ ); +}; Header.LeftItem = LeftItem; Header.RightItem = RightItem; diff --git a/web/app/[workspaceSlug]/(projects)/analytics/page.tsx b/web/app/[workspaceSlug]/(projects)/analytics/page.tsx index f9fd5dcf5..b66c0d19e 100644 --- a/web/app/[workspaceSlug]/(projects)/analytics/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/analytics/page.tsx @@ -36,12 +36,12 @@ const AnalyticsPage = observer(() => {
- + {ANALYTICS_TABS.map((tab) => ( {({ selected }) => ( -
- + } + /> + + +
{showProfileIssuesFilter && }
+
+ + {type} + +
+ } + customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" + closeOnSelect + > + <> + {tabsList.map((tab) => ( + + + {tab.label} + + + ))} + + + +
); }); diff --git a/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx index 4d6141934..b963ca147 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, Row } from "@plane/ui"; +import { CustomMenu } from "@plane/ui"; // components import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/components/issues"; // constants @@ -109,18 +109,18 @@ export const ProfileIssuesMobileHeader = observer(() => { ); return ( -
+
+
Layout - - + +
} - customButtonClassName="flex flex-start text-custom-text-200 text-sm" + customButtonClassName="flex flex-center text-custom-text-200 text-sm" closeOnSelect > {ISSUE_LAYOUTS.map((layout, index) => { @@ -139,15 +139,15 @@ export const ProfileIssuesMobileHeader = observer(() => { ); })}
-
+
+
Filters - - + +
} isFiltersApplied={isIssueFilterActive(issueFilters)} > @@ -165,15 +165,15 @@ export const ProfileIssuesMobileHeader = observer(() => { />
-
+
+
Display - - + +
} > { {!isCompletedCycle && ( -
- ) : ( - <> - )} - + {canUserCreateCycle && currentProjectDetails ? ( + + + + + ) : ( + <> + )} ); }); 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 0a6a52db5..a1255b206 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, Row } from "@plane/ui"; +import { CustomMenu } from "@plane/ui"; // components import { ProjectAnalyticsModal } from "@/components/analytics"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/components/issues/issue-layouts"; @@ -107,10 +107,10 @@ export const ProjectIssuesMobileHeader = observer(() => { className="flex flex-grow justify-center text-sm text-custom-text-200" placement="bottom-start" 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/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx index 0e9bbb878..12301c9d4 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 @@ -17,7 +17,7 @@ export const ModulesListMobileHeader = observer(() => { className="flex flex-grow justify-start text-custom-text-200 text-sm py-2 border-b border-custom-border-200 bg-custom-sidebar-background-100" // placement="bottom-start" customButton={ - + Layout } 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 b7e1a07aa..57a85eb79 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 @@ -57,27 +57,25 @@ export const PagesListHeader = observer(() => {
- - {canUserCreatePage ? ( -
- -
- ) : ( - <> - )} -
+ {canUserCreatePage ? ( + + + + ) : ( + <> + )} ); }); diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/automations/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/automations/page.tsx index bcf6258dd..fcfcc1db5 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/automations/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/automations/page.tsx @@ -45,9 +45,9 @@ const AutomationSettingsPage = observer(() => { return ( <> -
-
-

Automations

+
+
+

Automations

diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/estimates/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/estimates/page.tsx index 84b01b86a..0823b9d08 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/estimates/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/estimates/page.tsx @@ -30,7 +30,7 @@ const EstimatesSettingsPage = observer(() => { <>
{ return ( <> -
+
{ return ( <> -
+
diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/layout.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/layout.tsx index 743c14d10..96d0d33e2 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/layout.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/layout.tsx @@ -2,7 +2,8 @@ import { FC, ReactNode } from "react"; // components -import { AppHeader, ContentWrapper } from "@/components/core"; +import { ContentWrapper } from "@plane/ui"; +import { AppHeader } from "@/components/core"; // local components import { ProjectSettingHeader } from "./header"; import { ProjectSettingsSidebar } from "./sidebar"; @@ -16,14 +17,12 @@ const ProjectSettingLayout: FC = (props) => { return ( <> } /> - -
-
- -
-
- {children} -
+ +
+ +
+
+
{children}
diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/members/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/members/page.tsx index 28c65f680..3e5840cc6 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/members/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/members/page.tsx @@ -25,7 +25,7 @@ const MembersSettingsPage = observer(() => { return ( <> -
+
diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/page.tsx index cc5cfc855..c0a018600 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/page.tsx @@ -57,7 +57,7 @@ const GeneralSettingsPage = observer(() => { )} -
+
{currentProjectDetails && workspaceSlug && projectId && !isLoading ? ( { if (!currentProjectRole) { return ( -
+
SETTINGS @@ -41,7 +41,7 @@ export const ProjectSettingsSidebar = observer(() => { } return ( -
+
SETTINGS
diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/states/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/states/page.tsx index b03310a09..98e1b773e 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/states/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/settings/states/page.tsx @@ -27,14 +27,12 @@ const StatesSettingsPage = observer(() => { return ( <> -
-
-

States

-
- {workspaceSlug && projectId && ( - - )} +
+

States

+ {workspaceSlug && projectId && ( + + )} ); }); 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 1b55e8175..608ed5dff 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 @@ -21,7 +21,7 @@ export const ViewMobileHeader = observer(() => { return ( <>
- + { isMobile /> -
+
} title="Filters" @@ -41,7 +41,7 @@ export const ViewMobileHeader = observer(() => { menuButton={ Filters - + } > diff --git a/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx b/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx index 79e40e388..427a7490c 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/api-tokens/page.tsx @@ -57,7 +57,7 @@ const ApiTokensPage = observer(() => {
{tokens.length > 0 ? ( <> -
+

API tokens

-
+
{showLabelForm && (
= ({ stateDistribution, u return (

Issues by state

- + {userProfile.state_distribution.length > 0 ? (
diff --git a/web/core/components/project/form.tsx b/web/core/components/project/form.tsx index 332c75284..a55d8a59d 100644 --- a/web/core/components/project/form.tsx +++ b/web/core/components/project/form.tsx @@ -141,7 +141,7 @@ export const ProjectDetailsForm: FC = (props) => { return (
-
+
{watch("cover_image")!}
diff --git a/web/core/components/project/header.tsx b/web/core/components/project/header.tsx index e885a937f..0ffbfa0ed 100644 --- a/web/core/components/project/header.tsx +++ b/web/core/components/project/header.tsx @@ -118,7 +118,7 @@ export const ProjectsBaseHeader = observer(() => { setTrackElement("Projects page"); toggleCreateProjectModal(true); }} - className="items-center gap-1 my-auto" + className="items-center gap-1" > Add Project diff --git a/web/core/components/project/project-settings-member-defaults.tsx b/web/core/components/project/project-settings-member-defaults.tsx index 84a49a12f..5ef88f8ea 100644 --- a/web/core/components/project/project-settings-member-defaults.tsx +++ b/web/core/components/project/project-settings-member-defaults.tsx @@ -67,9 +67,9 @@ export const ProjectSettingsMemberDefaults: React.FC = observer(() => { default_assignee: formData.default_assignee === "none" ? null - : formData.default_assignee ?? currentProjectDetails?.default_assignee, + : (formData.default_assignee ?? currentProjectDetails?.default_assignee), project_lead: - formData.project_lead === "none" ? null : formData.project_lead ?? currentProjectDetails?.project_lead, + formData.project_lead === "none" ? null : (formData.project_lead ?? currentProjectDetails?.project_lead), }) .then(() => { setToast({ @@ -85,12 +85,12 @@ export const ProjectSettingsMemberDefaults: React.FC = observer(() => { return ( <> -
+

Defaults

-
+

Project Lead

diff --git a/web/core/components/project/settings/features-list.tsx b/web/core/components/project/settings/features-list.tsx index 9aa345113..e0b966dda 100644 --- a/web/core/components/project/settings/features-list.tsx +++ b/web/core/components/project/settings/features-list.tsx @@ -56,12 +56,12 @@ export const ProjectFeaturesList: FC = observer((props) => { if (!currentUser) return <>; return ( -
+
{Object.keys(PROJECT_FEATURES_LIST).map((featureSectionKey) => { const feature = PROJECT_FEATURES_LIST[featureSectionKey]; return (
-
+

{feature.title}

{feature.description}

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 efb284171..82a84ff89 100644 --- a/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx +++ b/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx @@ -2,7 +2,7 @@ import { forwardRef } from "react"; import { ContentWrapper } from "@plane/ui"; export const KanbanIssueBlockLoader = forwardRef((props, ref) => ( - + )); KanbanIssueBlockLoader.displayName = "KanbanIssueBlockLoader"; diff --git a/web/core/components/views/filters/order-by.tsx b/web/core/components/views/filters/order-by.tsx index 644794595..acaa10009 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 gap-2" + ? "flex items-center text-sm text-custom-text-200 gap-2 w-full" : `${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,11 +38,11 @@ export const ViewOrderByDropdown: React.FC = (props) => { {!isMobile && } {orderByDetails?.label} - + } placement="bottom-end" - className="w-full" + className="w-full flex justify-center" maxHeight="lg" closeOnSelect > diff --git a/web/core/components/web-hooks/form/form.tsx b/web/core/components/web-hooks/form/form.tsx index b344a32a2..bbb953cb3 100644 --- a/web/core/components/web-hooks/form/form.tsx +++ b/web/core/components/web-hooks/form/form.tsx @@ -61,7 +61,7 @@ export const WebhookForm: FC = observer((props) => { return ( -
+
{data ? "Webhook details" : "Create webhook"}
@@ -85,7 +85,7 @@ export const WebhookForm: FC = observer((props) => {
{data ? ( -
+
-

{watch("name")}

+
{watch("name")}
@@ -212,7 +212,7 @@ export const WorkspaceDetails: FC = observer(() => {
-
+

Workspace name

diff --git a/web/core/components/workspace/views/header.tsx b/web/core/components/workspace/views/header.tsx index 4d7093673..f369e5ce8 100644 --- a/web/core/components/workspace/views/header.tsx +++ b/web/core/components/workspace/views/header.tsx @@ -104,7 +104,7 @@ export const GlobalViewsHeader: React.FC = observer(() => { const isAuthorizedUser = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; return ( -
+
setCreateViewModal(false)} />