diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx index a063df5..c628cc6 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx @@ -8,14 +8,13 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -// ui -import { Button } from "@plane/propel/button"; import { DraftIcon } from "@plane/propel/icons"; import { EIssuesStoreType } from "@plane/types"; import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; import { CountChip } from "@/components/common/count-chip"; +import { AppHeaderPrimaryActionButton } from "@/components/core/app-header/primary-action-button"; import { CreateUpdateIssueModal } from "@/components/issues/issue-modal/modal"; // hooks @@ -66,15 +65,12 @@ export const WorkspaceDraftHeader = observer(function WorkspaceDraftHeader() { {joinedProjectIds && joinedProjectIds.length > 0 && ( - + )} diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx index f9c3308..26a3aab 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx @@ -5,13 +5,15 @@ */ // components +import { useTranslation } from "@plane/i18n"; import { PageHead } from "@/components/core/page-title"; import { WorkspaceDraftIssuesRoot } from "@/components/issues/workspace-draft"; import type { Route } from "./+types/page"; function WorkspaceDraftPage({ params }: Route.ComponentProps) { const { workspaceSlug } = params; - const pageTitle = "Workspace Draft"; + const { t } = useTranslation(); + const pageTitle = t("sidebar.drafts"); return ( <> diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx index f15d767..9db77e3 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx @@ -41,7 +41,7 @@ export const WorkspaceDashboardHeader = observer(function WorkspaceDashboardHead variant="secondary" size="lg" onClick={() => toggleWidgetSettings(true)} - className="my-auto mb-0" + className="nodedc-toolbar-pill my-auto mb-0" prependIcon={} >
{t("home.manage_widgets")}
diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx index 1f1fe4c..c713fc8 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx @@ -5,15 +5,16 @@ */ import React from "react"; +import { useTranslation } from "@plane/i18n"; // components import { PageHead } from "@/components/core/page-title"; import { ProfileIssuesPage } from "@/components/profile/profile-issues"; import type { Route } from "./+types/page"; const ProfilePageHeader = { - assigned: "Profile - Assigned", - created: "Profile - Created", - subscribed: "Profile - Subscribed", + assigned: "profile.tabs.assigned", + created: "profile.tabs.created", + subscribed: "profile.tabs.subscribed", }; function isValidProfileViewId(viewId: string): viewId is keyof typeof ProfilePageHeader { @@ -22,10 +23,11 @@ function isValidProfileViewId(viewId: string): viewId is keyof typeof ProfilePag function ProfileIssuesTypePage({ params }: Route.ComponentProps) { const { profileViewId } = params; + const { t } = useTranslation(); if (!isValidProfileViewId(profileViewId)) return null; - const header = ProfilePageHeader[profileViewId]; + const header = `${t("profile.page_label")} - ${t(ProfilePageHeader[profileViewId])}`; return ( <> diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx index 69e02a4..15528ae 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx @@ -51,20 +51,21 @@ function ProfileActivityPage() { [EUserPermissions.ADMIN, EUserPermissions.MEMBER], EUserPermissionsLevel.WORKSPACE ); + const pageTitle = `${t("profile.page_label")} - ${t("profile.tabs.activity")}`; return ( <> - -
-
+ +
+

{t("profile.stats.recent_activity.title")}

{canDownloadActivity && }
-
+
{activityPages} {pageCount < totalPages && resultsCount !== 0 && (
-
diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx index 79117f9..92ca2f5 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx @@ -20,7 +20,6 @@ import { ProfileIssuesFilter } from "@/components/profile/profile-issues-filter" // hooks import { useAppTheme } from "@/hooks/store/use-app-theme"; import { useUser, useUserPermissions } from "@/hooks/store/user"; -import { Button } from "@plane/propel/button"; type TUserProfileHeader = { userProjectsData: IUserProfileProjectSegregation | undefined; @@ -75,8 +74,10 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse - {type} +
+ + {type ? t(type) : t("profile.tabs.summary")} +
} @@ -89,16 +90,15 @@ export const UserProfileHeader = observer(function UserProfileHeader(props: TUse }))} />
- + > + +
diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx index 4d99983..32c0fe8 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx @@ -9,7 +9,6 @@ import { useParams, usePathname } from "next/navigation"; // plane imports import { PROFILE_VIEWER_TAB, PROFILE_ADMINS_TAB } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Header, EHeaderVariant } from "@plane/ui"; import { cn } from "@plane/utils"; type Props = { @@ -25,17 +24,21 @@ export function ProfileNavbar(props: Props) { const tabsList = isAuthorized ? [...PROFILE_VIEWER_TAB, ...PROFILE_ADMINS_TAB] : PROFILE_VIEWER_TAB; return ( -
-
+
+
{tabsList.map((tab) => ( - + {t(tab.i18n_label)} @@ -43,6 +46,6 @@ export function ProfileNavbar(props: Props) { ))}
-
+
); } diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx index 0fac006..1100b2d 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx @@ -42,7 +42,7 @@ export default function ProfileOverviewPage({ params }: Route.ComponentProps) { return ( <> - +
diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx index 7eab6a4..69939d8 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx @@ -7,11 +7,12 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { Button } from "@plane/propel/button"; +import { useTranslation } from "@plane/i18n"; import { RecentStickyIcon } from "@plane/propel/icons"; import { Breadcrumbs, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; +import { AppHeaderPrimaryActionButton } from "@/components/core/app-header/primary-action-button"; import { StickySearch } from "@/components/stickies/modal/search"; import { useStickyOperations } from "@/components/stickies/sticky/use-operations"; // hooks @@ -19,6 +20,7 @@ import { useSticky } from "@/hooks/use-stickies"; export const WorkspaceStickyHeader = observer(function WorkspaceStickyHeader() { const { workspaceSlug } = useParams(); + const { t } = useTranslation(); // hooks const { creatingSticky, toggleShowNewSticky } = useSticky(); const { stickyOperations } = useStickyOperations({ workspaceSlug: workspaceSlug?.toString() }); @@ -32,7 +34,7 @@ export const WorkspaceStickyHeader = observer(function WorkspaceStickyHeader() { } /> } @@ -43,17 +45,15 @@ export const WorkspaceStickyHeader = observer(function WorkspaceStickyHeader() { - + {t("stickies.add")} + diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx index faad243..fccc7ee 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx @@ -5,13 +5,16 @@ */ // components +import { useTranslation } from "@plane/i18n"; import { PageHead } from "@/components/core/page-title"; import { StickiesInfinite } from "@/components/stickies/layout/stickies-infinite"; export default function WorkspaceStickiesPage() { + const { t } = useTranslation(); + return ( <> - +
diff --git a/plane-src/apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx b/plane-src/apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx index a8d2c4b..ed8a874 100644 --- a/plane-src/apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx +++ b/plane-src/apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx @@ -13,10 +13,10 @@ export default function SettingsLayout() { return ( <> -
-
+
+
{/* Content */} - +
diff --git a/plane-src/apps/web/app/(all)/settings/profile/layout.tsx b/plane-src/apps/web/app/(all)/settings/profile/layout.tsx index a30518f..40c252a 100644 --- a/plane-src/apps/web/app/(all)/settings/profile/layout.tsx +++ b/plane-src/apps/web/app/(all)/settings/profile/layout.tsx @@ -16,7 +16,7 @@ export default function ProfileSettingsLayout() {
-
+
diff --git a/plane-src/apps/web/core/components/home/home-dashboard-widgets.tsx b/plane-src/apps/web/core/components/home/home-dashboard-widgets.tsx index 067fa06..c37b4be 100644 --- a/plane-src/apps/web/core/components/home/home-dashboard-widgets.tsx +++ b/plane-src/apps/web/core/components/home/home-dashboard-widgets.tsx @@ -92,13 +92,13 @@ export const DashboardWidgets = observer(function DashboardWidgets() { {!isWikiApp && } {isAnyWidgetEnabled ? ( -
+
{orderedWidgets.map((key) => { const WidgetComponent = HOME_WIDGETS_LIST[key]?.component; const isEnabled = widgetsMap[key]?.is_enabled; if (!WidgetComponent || !isEnabled) return null; return ( -
+
); diff --git a/plane-src/apps/web/core/components/home/root.tsx b/plane-src/apps/web/core/components/home/root.tsx index f42da25..a4163d6 100644 --- a/plane-src/apps/web/core/components/home/root.tsx +++ b/plane-src/apps/web/core/components/home/root.tsx @@ -58,8 +58,8 @@ export const WorkspaceHomeView = observer(function WorkspaceHomeView() { )} <> - -
+ +
{currentUser && }
diff --git a/plane-src/apps/web/core/components/home/widgets/links/action.tsx b/plane-src/apps/web/core/components/home/widgets/links/action.tsx index f827495..7018017 100644 --- a/plane-src/apps/web/core/components/home/widgets/links/action.tsx +++ b/plane-src/apps/web/core/components/home/widgets/links/action.tsx @@ -16,13 +16,13 @@ export function AddLink(props: TProps) { return ( ); } diff --git a/plane-src/apps/web/core/components/home/widgets/links/links.tsx b/plane-src/apps/web/core/components/home/widgets/links/links.tsx index 4d6d171..ef39189 100644 --- a/plane-src/apps/web/core/components/home/widgets/links/links.tsx +++ b/plane-src/apps/web/core/components/home/widgets/links/links.tsx @@ -40,7 +40,7 @@ export const ProjectLinkList = observer(function ProjectLinkList(props: TProject maxHeight={150} containerClassName="box-border min-h-[30px] flex flex-col" fallback={<>} - buttonClassName="bg-surface-2/20" + buttonClassName="nodedc-toolbar-pill justify-center" >
{links.map((linkId) => ( diff --git a/plane-src/apps/web/core/components/home/widgets/links/root.tsx b/plane-src/apps/web/core/components/home/widgets/links/root.tsx index 3eb9b92..4287643 100644 --- a/plane-src/apps/web/core/components/home/widgets/links/root.tsx +++ b/plane-src/apps/web/core/components/home/widgets/links/root.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import useSWR from "swr"; import { useTranslation } from "@plane/i18n"; +import { Button } from "@plane/propel/button"; import { PlusIcon } from "@plane/propel/icons"; import type { THomeWidgetProps } from "@plane/types"; import { useHome } from "@/hooks/store/use-home"; @@ -49,12 +50,15 @@ export const DashboardQuickLinks = observer(function DashboardQuickLinks(props:
{t("home.quick_links.title_plural")}
- + {t("home.quick_links.add")} +
{/* rendering links */} diff --git a/plane-src/apps/web/core/components/home/widgets/recents/index.tsx b/plane-src/apps/web/core/components/home/widgets/recents/index.tsx index 5c59c41..9a08be4 100644 --- a/plane-src/apps/web/core/components/home/widgets/recents/index.tsx +++ b/plane-src/apps/web/core/components/home/widgets/recents/index.tsx @@ -93,7 +93,7 @@ export const RecentActivityWidget = observer(function RecentActivityWidget(props maxHeight={415} containerClassName="box-border min-h-[250px]" fallback={<>} - buttonClassName="bg-surface-2/20" + buttonClassName="nodedc-toolbar-pill justify-center" >
{t("home.recents.title")}
diff --git a/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx index d6922f1..b8573c1 100644 --- a/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx +++ b/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx @@ -13,6 +13,7 @@ import { CopyIcon, EditIcon, TrashIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; import type { TWorkspaceDraftIssue } from "@plane/types"; import { EIssuesStoreType } from "@plane/types"; +import { useTranslation } from "@plane/i18n"; import type { TContextMenuItem } from "@plane/ui"; import { Row } from "@plane/ui"; import { cn } from "@plane/utils"; @@ -46,6 +47,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) { const { getIssueById, updateIssue, deleteIssue } = useWorkspaceDraftIssues(); const { sidebarCollapsed: isSidebarCollapsed } = useAppTheme(); const { getProjectIdentifierById } = useProject(); + const { t } = useTranslation(); // ref const issueRef = useRef(null); // derived values @@ -65,7 +67,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) { const MENU_ITEMS: TContextMenuItem[] = [ { key: "edit", - title: "edit", + title: t("edit"), icon: EditIcon, action: () => { setIssueToEdit(issue); @@ -74,7 +76,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) { }, { key: "make-a-copy", - title: "make_a_copy", + title: t("make_a_copy"), icon: CopyIcon, action: () => { setCreateUpdateIssueModal(true); @@ -82,7 +84,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) { }, { key: "move-to-issues", - title: "move_to_project", + title: t("move_to_project"), icon: SquareStackIcon, action: () => { setMoveToIssue(true); @@ -92,7 +94,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) { }, { key: "delete", - title: "delete", + title: t("delete"), icon: TrashIcon, action: () => { setDeleteIssueModal(true); diff --git a/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx b/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx index e526909..d23153a 100644 --- a/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx +++ b/plane-src/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // icons import { DueDatePropertyIcon, StartDatePropertyIcon } from "@plane/propel/icons"; +import { useTranslation } from "@plane/i18n"; // types import type { TIssuePriorities, TWorkspaceDraftIssue } from "@plane/types"; import { getDate, renderFormattedPayloadDate, shouldHighlightIssueDueDate } from "@plane/utils"; @@ -49,6 +50,7 @@ export const DraftIssueProperties = observer(function DraftIssueProperties(props const { getStateById } = useProjectState(); const { isMobile } = usePlatformOS(); const projectDetails = getProjectById(issue.project_id); + const { t } = useTranslation(); // router const { workspaceSlug } = useParams(); @@ -180,7 +182,7 @@ export const DraftIssueProperties = observer(function DraftIssueProperties(props value={issue.start_date ?? null} onChange={handleStartDate} maxDate={maxDate} - placeholder="Start date" + placeholder={t("start_date")} icon={} buttonVariant={issue.start_date ? "border-with-text" : "border-without-text"} optionsClassName="z-10" @@ -195,7 +197,7 @@ export const DraftIssueProperties = observer(function DraftIssueProperties(props value={issue?.target_date ?? null} onChange={handleTargetDate} minDate={minDate} - placeholder="Due date" + placeholder={t("due_date")} icon={} buttonVariant={issue.target_date ? "border-with-text" : "border-without-text"} buttonClassName={ @@ -218,7 +220,7 @@ export const DraftIssueProperties = observer(function DraftIssueProperties(props buttonVariant={issue.assignee_ids?.length > 0 ? "transparent-without-text" : "border-without-text"} buttonClassName={issue.assignee_ids?.length > 0 ? "hover:bg-transparent px-0" : ""} showTooltip={issue?.assignee_ids?.length === 0} - placeholder="Assignees" + placeholder={t("assignees")} optionsClassName="z-10" tooltipContent="" renderByDefault={isMobile} diff --git a/plane-src/apps/web/core/components/issues/workspace-draft/root.tsx b/plane-src/apps/web/core/components/issues/workspace-draft/root.tsx index a8d31a3..1624dc5 100644 --- a/plane-src/apps/web/core/components/issues/workspace-draft/root.tsx +++ b/plane-src/apps/web/core/components/issues/workspace-draft/root.tsx @@ -101,12 +101,12 @@ export const WorkspaceDraftIssuesRoot = observer(function WorkspaceDraftIssuesRo ) : (
- Load More ↓ + {t("common.load_more")}
)} diff --git a/plane-src/apps/web/core/components/profile/activity/activity-list.tsx b/plane-src/apps/web/core/components/profile/activity/activity-list.tsx index 87083b4..96840b9 100644 --- a/plane-src/apps/web/core/components/profile/activity/activity-list.tsx +++ b/plane-src/apps/web/core/components/profile/activity/activity-list.tsx @@ -9,6 +9,7 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import { History, MessageSquare } from "lucide-react"; // plane imports +import { useTranslation } from "@plane/i18n"; import type { IUserActivityResponse } from "@plane/types"; import { calculateTimeAgo, getFileURL } from "@plane/utils"; // components @@ -30,6 +31,7 @@ export const ActivityList = observer(function ActivityList(props: Props) { // store hooks const { data: currentUser } = useUser(); const { getWorkspaceBySlug } = useWorkspace(); + const { t } = useTranslation(); // derived values const workspaceId = getWorkspaceBySlug(workspaceSlug?.toString() ?? "")?.id ?? ""; @@ -72,7 +74,7 @@ export const ActivityList = observer(function ActivityList(props: Props) { : activityItem.actor_detail.display_name}

- Commented {calculateTimeAgo(activityItem.created_at)} + {t("commented")} {calculateTimeAgo(activityItem.created_at)}

@@ -102,7 +104,7 @@ export const ActivityList = observer(function ActivityList(props: Props) { ) && !activityItem.field ? ( - created + {t("created").toLowerCase()} ) : ( @@ -155,7 +157,7 @@ export const ActivityList = observer(function ActivityList(props: Props) { > {currentUser?.id === activityItem.actor_detail.id - ? "You" + ? t("you") : activityItem.actor_detail.display_name} diff --git a/plane-src/apps/web/core/components/profile/activity/profile-activity-list.tsx b/plane-src/apps/web/core/components/profile/activity/profile-activity-list.tsx index eefa046..097a27e 100644 --- a/plane-src/apps/web/core/components/profile/activity/profile-activity-list.tsx +++ b/plane-src/apps/web/core/components/profile/activity/profile-activity-list.tsx @@ -10,6 +10,7 @@ import Link from "next/link"; import useSWR from "swr"; // icons import { History, MessageSquare } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { calculateTimeAgo, getFileURL } from "@plane/utils"; // hooks import { ActivityIcon, ActivityMessage } from "@/components/core/activity"; @@ -35,6 +36,7 @@ export const ProfileActivityListPage = observer(function ProfileActivityListPage const { cursor, perPage, updateResultsCount, updateTotalPages, updateEmptyState } = props; // store hooks const { data: currentUser } = useUser(); + const { t } = useTranslation(); const { data: userProfileActivity } = useSWR( USER_ACTIVITY({ @@ -96,7 +98,7 @@ export const ProfileActivityListPage = observer(function ProfileActivityListPage : activityItem.actor_detail.display_name}

- Commented {calculateTimeAgo(activityItem.created_at)} + {t("commented")} {calculateTimeAgo(activityItem.created_at)}

@@ -166,7 +168,7 @@ export const ProfileActivityListPage = observer(function ProfileActivityListPage > {currentUser?.id === activityItem.actor_detail.id - ? "You" + ? t("you") : activityItem.actor_detail.display_name} diff --git a/plane-src/apps/web/core/components/profile/overview/activity.tsx b/plane-src/apps/web/core/components/profile/overview/activity.tsx index 23bb961..69e8705 100644 --- a/plane-src/apps/web/core/components/profile/overview/activity.tsx +++ b/plane-src/apps/web/core/components/profile/overview/activity.tsx @@ -44,7 +44,7 @@ export const ProfileActivity = observer(function ProfileActivity() { return (

{t("profile.stats.recent_activity.title")}

- + {userProfileActivity ? ( userProfileActivity.results.length > 0 ? (
@@ -60,14 +60,14 @@ export const ProfileActivity = observer(function ProfileActivity() {

{currentUser?.id === activity.actor_detail?.id - ? "You" + ? t("you") : activity.actor_detail?.display_name}{" "} {activity.field ? ( ) : ( - created + {t("created").toLowerCase()} )}

diff --git a/plane-src/apps/web/core/components/profile/overview/priority-distribution.tsx b/plane-src/apps/web/core/components/profile/overview/priority-distribution.tsx index 2660f1a..d32fca1 100644 --- a/plane-src/apps/web/core/components/profile/overview/priority-distribution.tsx +++ b/plane-src/apps/web/core/components/profile/overview/priority-distribution.tsx @@ -30,7 +30,7 @@ export function ProfilePriorityDistribution({ userProfile }: Props) {

{t("profile.stats.priority_distribution.title")}

{userProfile ? ( - + {userProfile.priority_distribution.length > 0 ? (

{t("profile.stats.state_distribution.title")}

- + {userProfile.state_distribution.length > 0 ? (
-
{STATE_GROUPS[group.state_group].label}
+
+ {stateGroupLabels[group.state_group as keyof typeof stateGroupLabels] ?? + STATE_GROUPS[group.state_group].label} +
{group.state_count}
diff --git a/plane-src/apps/web/core/components/profile/overview/stats.tsx b/plane-src/apps/web/core/components/profile/overview/stats.tsx index 9431cc8..767c904 100644 --- a/plane-src/apps/web/core/components/profile/overview/stats.tsx +++ b/plane-src/apps/web/core/components/profile/overview/stats.tsx @@ -11,7 +11,7 @@ import { useParams } from "next/navigation"; import { useTranslation } from "@plane/i18n"; import { UserCirclePropertyIcon, CreateIcon, LayerStackIcon } from "@plane/propel/icons"; import type { IUserProfileData } from "@plane/types"; -import { Loader, Card, ECardSpacing, ECardDirection } from "@plane/ui"; +import { Loader } from "@plane/ui"; // types type Props = { @@ -51,15 +51,15 @@ export function ProfileStats({ userProfile }: Props) {
{overviewCards.map((card) => ( - -
+
+

{t(card.i18n_title)}

{card.value}

- +
))}
diff --git a/plane-src/apps/web/core/components/profile/overview/workload.tsx b/plane-src/apps/web/core/components/profile/overview/workload.tsx index 89112cc..d4224af 100644 --- a/plane-src/apps/web/core/components/profile/overview/workload.tsx +++ b/plane-src/apps/web/core/components/profile/overview/workload.tsx @@ -18,6 +18,11 @@ type Props = { export function ProfileWorkload({ stateDistribution }: Props) { const { t } = useTranslation(); + const stateGroupLabels = { + unstarted: t("yet_to_start"), + started: t("in_progress"), + completed: t("completed"), + } as const; return (
@@ -26,7 +31,11 @@ export function ProfileWorkload({ stateDistribution }: Props) { {stateDistribution.map((group) => (
- +
- {group.state_group === "unstarted" - ? "Not started" - : group.state_group === "started" - ? "Working on" - : STATE_GROUPS[group.state_group].label} + {stateGroupLabels[group.state_group as keyof typeof stateGroupLabels] ?? + STATE_GROUPS[group.state_group].label}

{group.state_count}

diff --git a/plane-src/apps/web/core/components/profile/sidebar.tsx b/plane-src/apps/web/core/components/profile/sidebar.tsx index 42ec13d..ab3ffdc 100644 --- a/plane-src/apps/web/core/components/profile/sidebar.tsx +++ b/plane-src/apps/web/core/components/profile/sidebar.tsx @@ -87,7 +87,7 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi return (
toggleProfileSettingsModal({ @@ -112,18 +113,18 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi -
+
{userData?.avatar_url && userData?.avatar_url !== "" ? ( {userData?.display_name} ) : ( -
+
{userData?.first_name?.[0]}
)} @@ -171,7 +172,11 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi
{project.assigned_issues > 0 && ( - +
- Created + {t("created")}
{project.created_issues} {t("issues")} @@ -243,7 +248,7 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi
- Assigned + {t("assigned")}
{project.assigned_issues} {t("issues")} @@ -252,7 +257,7 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi
- Due + {t("due_date")}
{project.pending_issues} {t("issues")} @@ -261,7 +266,7 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi
- Completed + {t("completed")}
{project.completed_issues} {t("issues")} diff --git a/plane-src/apps/web/core/components/settings/content-wrapper.tsx b/plane-src/apps/web/core/components/settings/content-wrapper.tsx index 3c98292..060b6b7 100644 --- a/plane-src/apps/web/core/components/settings/content-wrapper.tsx +++ b/plane-src/apps/web/core/components/settings/content-wrapper.tsx @@ -30,10 +30,10 @@ export function SettingsContentWrapper(props: Props) {
- {children} +
{children}
diff --git a/plane-src/apps/web/core/components/settings/control-item.tsx b/plane-src/apps/web/core/components/settings/control-item.tsx index 1b11dc6..39ca372 100644 --- a/plane-src/apps/web/core/components/settings/control-item.tsx +++ b/plane-src/apps/web/core/components/settings/control-item.tsx @@ -14,10 +14,10 @@ export function SettingsControlItem(props: Props) { const { control, description, title } = props; return ( -
-
+
+

{title}

-

{description}

+

{description}

{control}
diff --git a/plane-src/apps/web/core/components/settings/heading.tsx b/plane-src/apps/web/core/components/settings/heading.tsx index 32656f2..cc4b354 100644 --- a/plane-src/apps/web/core/components/settings/heading.tsx +++ b/plane-src/apps/web/core/components/settings/heading.tsx @@ -17,8 +17,8 @@ type Props = { export function SettingsHeading({ className, control, description, title, variant = "h3" }: Props) { return ( -
-
+
+
{title && (

)} - {description &&

{description}

} + {description &&

{description}

}

- {control} + {control &&
{control}
}
); } diff --git a/plane-src/apps/web/core/components/settings/mobile/nav.tsx b/plane-src/apps/web/core/components/settings/mobile/nav.tsx index 0d1a763..5700d9d 100644 --- a/plane-src/apps/web/core/components/settings/mobile/nav.tsx +++ b/plane-src/apps/web/core/components/settings/mobile/nav.tsx @@ -31,17 +31,22 @@ export const SettingsMobileNav = observer(function SettingsMobileNav(props: Prop }); return ( -
+
{!sidebarCollapsed && (
- +
)} - toggleSidebar()} /> + toggleSidebar()} + />
{/* path */} -
+
{t(activePath)}
diff --git a/plane-src/apps/web/core/components/settings/profile/content/root.tsx b/plane-src/apps/web/core/components/settings/profile/content/root.tsx index c407d2b..7c61483 100644 --- a/plane-src/apps/web/core/components/settings/profile/content/root.tsx +++ b/plane-src/apps/web/core/components/settings/profile/content/root.tsx @@ -24,15 +24,17 @@ export const ProfileSettingsContent = observer(function ProfileSettingsContent(p return ( - - - +
+ + + +
); }); diff --git a/plane-src/apps/web/core/components/settings/profile/sidebar/header.tsx b/plane-src/apps/web/core/components/settings/profile/sidebar/header.tsx index 52f20f0..41886e3 100644 --- a/plane-src/apps/web/core/components/settings/profile/sidebar/header.tsx +++ b/plane-src/apps/web/core/components/settings/profile/sidebar/header.tsx @@ -16,21 +16,21 @@ export const ProfileSettingsSidebarHeader = observer(function ProfileSettingsSid const { data: currentUser } = useUser(); return ( -
+
-

+

{currentUser?.first_name} {currentUser?.last_name}

-

{currentUser?.email}

+

{currentUser?.email}

); diff --git a/plane-src/apps/web/core/components/settings/profile/sidebar/item-categories.tsx b/plane-src/apps/web/core/components/settings/profile/sidebar/item-categories.tsx index d6dd0d5..f75fe8d 100644 --- a/plane-src/apps/web/core/components/settings/profile/sidebar/item-categories.tsx +++ b/plane-src/apps/web/core/components/settings/profile/sidebar/item-categories.tsx @@ -55,7 +55,7 @@ export const ProfileSettingsSidebarItemCategories = observer(function ProfileSet return (
-
+
{t(PROFILE_CATEGORY_I18N_KEYS[category])}
diff --git a/plane-src/apps/web/core/components/settings/profile/sidebar/root.tsx b/plane-src/apps/web/core/components/settings/profile/sidebar/root.tsx index bef2b99..c013ede 100644 --- a/plane-src/apps/web/core/components/settings/profile/sidebar/root.tsx +++ b/plane-src/apps/web/core/components/settings/profile/sidebar/root.tsx @@ -26,7 +26,7 @@ export function ProfileSettingsSidebarRoot(props: Props) { scrollType="hover" orientation="vertical" size="sm" - rootClassName={cn("shrink-0 overflow-y-scroll border-r border-r-subtle bg-surface-2 px-3 py-4", className)} + rootClassName={cn("nodedc-settings-sidebar-shell shrink-0 overflow-y-scroll px-3 py-4", className)} > diff --git a/plane-src/apps/web/core/components/settings/project/sidebar/header.tsx b/plane-src/apps/web/core/components/settings/project/sidebar/header.tsx index ddf879c..07ec4b3 100644 --- a/plane-src/apps/web/core/components/settings/project/sidebar/header.tsx +++ b/plane-src/apps/web/core/components/settings/project/sidebar/header.tsx @@ -41,22 +41,23 @@ export const ProjectSettingsSidebarHeader = observer(function ProjectSettingsSid return (
-
+
router.push(`/${currentWorkspace?.slug}/projects/${projectId}/issues/`)} />

{t("project_settings_label")}

-
-
+
+
-

{projectDetails?.name}

-

{t(ROLE_DETAILS[currentProjectRole].i18n_title)}

+

{projectDetails?.name}

+

{t(ROLE_DETAILS[currentProjectRole].i18n_title)}

diff --git a/plane-src/apps/web/core/components/settings/project/sidebar/item-categories.tsx b/plane-src/apps/web/core/components/settings/project/sidebar/item-categories.tsx index df52c57..e877db8 100644 --- a/plane-src/apps/web/core/components/settings/project/sidebar/item-categories.tsx +++ b/plane-src/apps/web/core/components/settings/project/sidebar/item-categories.tsx @@ -41,7 +41,7 @@ export const ProjectSettingsSidebarItemCategories = observer(function ProjectSet const { t } = useTranslation(); return ( -
+
{PROJECT_SETTINGS_CATEGORIES.map((category) => { const categoryItems = GROUPED_PROJECT_SETTINGS[category]; const accessibleItems = categoryItems.filter((item) => @@ -51,8 +51,8 @@ export const ProjectSettingsSidebarItemCategories = observer(function ProjectSet if (accessibleItems.length === 0) return null; return ( -
-
+
+
{t(PROJECT_CATEGORY_I18N_KEYS[category])}
diff --git a/plane-src/apps/web/core/components/settings/project/sidebar/root.tsx b/plane-src/apps/web/core/components/settings/project/sidebar/root.tsx index 1352b0f..51d0937 100644 --- a/plane-src/apps/web/core/components/settings/project/sidebar/root.tsx +++ b/plane-src/apps/web/core/components/settings/project/sidebar/root.tsx @@ -22,7 +22,7 @@ export function ProjectSettingsSidebarRoot(props: Props) { scrollType="hover" orientation="vertical" size="sm" - rootClassName="shrink-0 animate-fade-in h-full w-[250px] bg-surface-1 border-r border-r-subtle overflow-y-scroll" + rootClassName="nodedc-settings-sidebar-shell h-full w-[296px] shrink-0 animate-fade-in overflow-y-scroll px-3 py-4" viewportClassName="pb-5" > diff --git a/plane-src/apps/web/core/components/settings/sidebar/item.tsx b/plane-src/apps/web/core/components/settings/sidebar/item.tsx index 47937c3..664bbee 100644 --- a/plane-src/apps/web/core/components/settings/sidebar/item.tsx +++ b/plane-src/apps/web/core/components/settings/sidebar/item.tsx @@ -26,10 +26,9 @@ export function SettingsSidebarItem(props: Props) { const { as, isActive, label } = props; // common class const className = cn( - "flex items-center gap-2 rounded-lg px-2 py-1.5 text-left text-body-sm-medium text-secondary transition-colors", + "nodedc-settings-sidebar-item flex items-center gap-3 text-left text-body-sm-medium transition-colors", { - "bg-layer-transparent-selected text-primary": isActive, - "hover:bg-layer-transparent-hover": !isActive, + "text-primary": isActive, } ); // common content @@ -46,14 +45,14 @@ export function SettingsSidebarItem(props: Props) { if (as === "button") { return ( - ); } return ( - + {content} ); diff --git a/plane-src/apps/web/core/components/settings/workspace/sidebar/header.tsx b/plane-src/apps/web/core/components/settings/workspace/sidebar/header.tsx index baa518f..c838e97 100644 --- a/plane-src/apps/web/core/components/settings/workspace/sidebar/header.tsx +++ b/plane-src/apps/web/core/components/settings/workspace/sidebar/header.tsx @@ -35,26 +35,27 @@ export const WorkspaceSettingsSidebarHeader = observer(function WorkspaceSetting if (!currentWorkspaceRole) return null; return ( -
-
+
+
router.push(`/${currentWorkspace?.slug}/`)} />

{t("workspace_settings.label")}

-
-
+
+
-

{currentWorkspace?.name}

-

{t(ROLE_DETAILS[currentWorkspaceRole].i18n_title)}

+

{currentWorkspace?.name}

+

{t(ROLE_DETAILS[currentWorkspaceRole].i18n_title)}

diff --git a/plane-src/apps/web/core/components/settings/workspace/sidebar/item-categories.tsx b/plane-src/apps/web/core/components/settings/workspace/sidebar/item-categories.tsx index 8128d72..bc6d467 100644 --- a/plane-src/apps/web/core/components/settings/workspace/sidebar/item-categories.tsx +++ b/plane-src/apps/web/core/components/settings/workspace/sidebar/item-categories.tsx @@ -30,7 +30,7 @@ export const WorkspaceSettingsSidebarItemCategories = observer(function Workspac const { t } = useTranslation(); return ( -
+
{WORKSPACE_SETTINGS_CATEGORIES.map((category) => { const categoryItems = GROUPED_WORKSPACE_SETTINGS[category]; const accessibleItems = categoryItems.filter( @@ -42,8 +42,10 @@ export const WorkspaceSettingsSidebarItemCategories = observer(function Workspac if (accessibleItems.length === 0) return null; return ( -
-
{t(category)}
+
+
+ {t(category)} +
{accessibleItems.map((item) => { const isItemActive = diff --git a/plane-src/apps/web/core/components/settings/workspace/sidebar/root.tsx b/plane-src/apps/web/core/components/settings/workspace/sidebar/root.tsx index e6d8b63..5e3d58f 100644 --- a/plane-src/apps/web/core/components/settings/workspace/sidebar/root.tsx +++ b/plane-src/apps/web/core/components/settings/workspace/sidebar/root.tsx @@ -24,7 +24,7 @@ export function WorkspaceSettingsSidebarRoot(props: Props) { orientation="vertical" size="sm" rootClassName={cn( - "h-full w-[250px] shrink-0 animate-fade-in overflow-y-scroll border-r border-r-subtle bg-surface-1", + "nodedc-settings-sidebar-shell h-full w-[296px] shrink-0 animate-fade-in overflow-y-scroll px-3 py-4", className )} > diff --git a/plane-src/apps/web/core/components/stickies/action-bar.tsx b/plane-src/apps/web/core/components/stickies/action-bar.tsx index 105922c..564f9fa 100644 --- a/plane-src/apps/web/core/components/stickies/action-bar.tsx +++ b/plane-src/apps/web/core/components/stickies/action-bar.tsx @@ -11,6 +11,7 @@ import useSWR from "swr"; import { StickyNote as StickyIcon } from "lucide-react"; // plane hooks import { useOutsideClickDetector } from "@plane/hooks"; +import { useTranslation } from "@plane/i18n"; // plane ui import { RecentStickyIcon, StickyNoteIcon, PlusIcon, CloseIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; @@ -31,6 +32,7 @@ export const StickyActionBar = observer(function StickyActionBar() { const [showRecentSticky, setShowRecentSticky] = useState(false); // navigation const { workspaceSlug } = useParams(); + const { t } = useTranslation(); // refs const ref = useRef(null); // store hooks @@ -61,9 +63,9 @@ export const StickyActionBar = observer(function StickyActionBar() {
- + )} - +
+ {handleClose && ( diff --git a/plane-src/apps/web/core/components/stickies/sticky/root.tsx b/plane-src/apps/web/core/components/stickies/sticky/root.tsx index b2afc84..ec29120 100644 --- a/plane-src/apps/web/core/components/stickies/sticky/root.tsx +++ b/plane-src/apps/web/core/components/stickies/sticky/root.tsx @@ -80,14 +80,17 @@ export const StickyNote = observer(function StickyNote(props: TProps) { handleClose={() => setIsDeleteModalOpen(false)} />
{/* {isStickiesPage && }{" "} */} {onClose && ( - )} diff --git a/plane-src/apps/web/core/components/stickies/widget.tsx b/plane-src/apps/web/core/components/stickies/widget.tsx index 929c6b6..e11c5b0 100644 --- a/plane-src/apps/web/core/components/stickies/widget.tsx +++ b/plane-src/apps/web/core/components/stickies/widget.tsx @@ -9,6 +9,7 @@ import { useParams } from "next/navigation"; // plane imports import { useTranslation } from "@plane/i18n"; +import { Button } from "@plane/propel/button"; import { PlusIcon } from "@plane/propel/icons"; // hooks import { useSticky } from "@/hooks/use-stickies"; @@ -35,15 +36,17 @@ export const StickiesWidget = observer(function StickiesWidget() { {/* actions */}
- +
diff --git a/plane-src/apps/web/styles/globals.css b/plane-src/apps/web/styles/globals.css index 8c63f70..1ee6eaf 100644 --- a/plane-src/apps/web/styles/globals.css +++ b/plane-src/apps/web/styles/globals.css @@ -717,6 +717,49 @@ -webkit-backdrop-filter: blur(18px); } + .nodedc-settings-sidebar-shell { + border: 0 !important; + outline: none !important; + box-shadow: + inset -1px 0 0 rgba(255, 255, 255, 0.06), + inset 0 1px 0 rgba(255, 255, 255, 0.015) !important; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.024) 0%, rgba(255, 255, 255, 0.008) 100%), + rgba(8, 8, 11, 0.9) !important; + -webkit-backdrop-filter: blur(28px); + backdrop-filter: blur(28px); + } + + .nodedc-settings-sidebar-item { + min-height: 2.75rem; + border: 0 !important; + outline: none !important; + box-shadow: none !important; + border-radius: 1.1rem !important; + background: transparent !important; + color: rgba(255, 255, 255, 0.76) !important; + padding-inline: 0.95rem !important; + } + + .nodedc-settings-sidebar-item:hover { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.014) 100%), + rgba(255, 255, 255, 0.028) !important; + color: var(--text-color-primary) !important; + } + + .nodedc-settings-sidebar-item[data-active="true"] { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.04) 0%, rgba(255, 255, 255, 0.016) 100%), + rgba(255, 255, 255, 0.042) !important; + color: rgb(var(--nodedc-accent-rgb)) !important; + box-shadow: inset 0 0 0 1px rgba(var(--nodedc-accent-rgb), 0.24) !important; + } + + .nodedc-settings-sidebar-item[data-active="true"] * { + color: rgb(var(--nodedc-accent-rgb)) !important; + } + .nodedc-settings-field { background: linear-gradient(180deg, rgba(255, 255, 255, 0.028) 0%, rgba(255, 255, 255, 0.012) 100%), diff --git a/plane-src/packages/i18n/src/locales/en/translations.ts b/plane-src/packages/i18n/src/locales/en/translations.ts index 57e7a3b..61212ae 100644 --- a/plane-src/packages/i18n/src/locales/en/translations.ts +++ b/plane-src/packages/i18n/src/locales/en/translations.ts @@ -477,6 +477,7 @@ export default { assignee: "Assignee", assignees: "Assignees", you: "You", + commented: "Commented", labels: "Labels", create_new_label: "Create new label", start_date: "Start date", diff --git a/plane-src/packages/i18n/src/locales/ru/translations.ts b/plane-src/packages/i18n/src/locales/ru/translations.ts index 5a0286f..f1f3183 100644 --- a/plane-src/packages/i18n/src/locales/ru/translations.ts +++ b/plane-src/packages/i18n/src/locales/ru/translations.ts @@ -633,6 +633,7 @@ export default { assignee: "Назначенный", assignees: "Назначенные", you: "Вы", + commented: "Прокомментировал", labels: "Метки", create_new_label: "Создать новую метку", start_date: "Дата начала",