From e4a59e7a543a869c86d6ae6bb446c967dfb5d0fc Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Tue, 21 Apr 2026 10:22:22 +0300 Subject: [PATCH] =?UTF-8?q?UI=20-=20=D0=9C=D0=95=D0=96=D0=9F=D0=A0=D0=9E?= =?UTF-8?q?=D0=95=D0=9A=D0=A2=D0=9D=D0=90=D0=AF=20=D0=9A=D0=9E=D0=9C=D0=9C?= =?UTF-8?q?=D0=A3=D0=9D=D0=98=D0=9A=D0=90=D0=A6=D0=98=D0=AF:=20=D1=83?= =?UTF-8?q?=D0=BD=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B8=D0=B6=D0=BD=D0=B5=D0=B3=D0=BE=20dock=20=D0=B8=20CTA-?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/web/ce/components/issues/header.tsx | 12 +++----- .../projects/external-contours/header.tsx | 13 +++------ .../web/core/components/core/app-header.tsx | 2 +- .../core/app-header/primary-action-button.tsx | 28 +++++++++++++++++++ plane-src/apps/web/styles/globals.css | 24 ++++++++++++++++ .../i18n/src/locales/en/translations.ts | 3 ++ .../i18n/src/locales/ru/translations.ts | 3 ++ 7 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 plane-src/apps/web/core/components/core/app-header/primary-action-button.tsx diff --git a/plane-src/apps/web/ce/components/issues/header.tsx b/plane-src/apps/web/ce/components/issues/header.tsx index 333bef0..7b90708 100644 --- a/plane-src/apps/web/ce/components/issues/header.tsx +++ b/plane-src/apps/web/ce/components/issues/header.tsx @@ -17,7 +17,6 @@ import { WORK_ITEM_TRACKER_ELEMENTS, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Button } from "@plane/propel/button"; import { NewTabIcon, WorkItemsIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; import { EIssuesStoreType } from "@plane/types"; @@ -25,6 +24,7 @@ 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"; // constants import { HeaderFilters } from "@/components/issues/filters"; // helpers @@ -117,18 +117,14 @@ export const IssuesHeader = observer(function IssuesHeader() { /> {canUserCreateIssue && ( - + {t("app_header.add_task")} + )} diff --git a/plane-src/apps/web/ce/components/projects/external-contours/header.tsx b/plane-src/apps/web/ce/components/projects/external-contours/header.tsx index d890469..b3ace3f 100644 --- a/plane-src/apps/web/ce/components/projects/external-contours/header.tsx +++ b/plane-src/apps/web/ce/components/projects/external-contours/header.tsx @@ -10,10 +10,10 @@ import { useParams } from "next/navigation"; import { RefreshCcw } from "lucide-react"; import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Button } from "@plane/propel/button"; import { TransferIcon } from "@plane/propel/icons"; import { Breadcrumbs, Header } from "@plane/ui"; import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; +import { AppHeaderPrimaryActionButton } from "@/components/core/app-header/primary-action-button"; import { useProject } from "@/hooks/store/use-project"; import { useProjectExternalContours } from "@/hooks/store/use-project-external-contours"; import { useUserPermissions } from "@/hooks/store/user"; @@ -69,14 +69,9 @@ export const ProjectExternalContoursHeader = observer(function ProjectExternalCo modalState={createIssueModal} handleModalClose={() => setCreateIssueModal(false)} /> - + setCreateIssueModal(true)}> + {t("app_header.add_task")} + ) : null} diff --git a/plane-src/apps/web/core/components/core/app-header.tsx b/plane-src/apps/web/core/components/core/app-header.tsx index cc6d9b0..a21153e 100644 --- a/plane-src/apps/web/core/components/core/app-header.tsx +++ b/plane-src/apps/web/core/components/core/app-header.tsx @@ -55,7 +55,7 @@ export const AppHeader = observer(function AppHeader(props: AppHeaderProps) { return (
- + {mobileHeader && mobileHeader} diff --git a/plane-src/apps/web/core/components/core/app-header/primary-action-button.tsx b/plane-src/apps/web/core/components/core/app-header/primary-action-button.tsx new file mode 100644 index 0000000..2cc7983 --- /dev/null +++ b/plane-src/apps/web/core/components/core/app-header/primary-action-button.tsx @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2023-present Plane Software, Inc. and contributors + * SPDX-License-Identifier: AGPL-3.0-only + * See the LICENSE file for details. + */ + +import type { ComponentProps } from "react"; +import { useTranslation } from "@plane/i18n"; +import { Button } from "@plane/propel/button"; +import { cn } from "@plane/utils"; + +type TPrimaryActionButtonProps = ComponentProps; + +export const AppHeaderPrimaryActionButton = (props: TPrimaryActionButtonProps) => { + const { children, className, ...buttonProps } = props; + const { t } = useTranslation(); + + return ( + + ); +}; diff --git a/plane-src/apps/web/styles/globals.css b/plane-src/apps/web/styles/globals.css index abf1057..3bab96f 100644 --- a/plane-src/apps/web/styles/globals.css +++ b/plane-src/apps/web/styles/globals.css @@ -255,6 +255,30 @@ 0 6px 18px rgba(0, 0, 0, 0.2); } + .nodedc-bottom-dock { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.024) 0%, rgba(255, 255, 255, 0.008) 100%), + rgba(7, 7, 10, 0.72) !important; + border: 0 !important; + outline: none !important; + box-shadow: + 0 -18px 46px rgba(0, 0, 0, 0.3), + 0 -4px 18px rgba(0, 0, 0, 0.16); + -webkit-backdrop-filter: blur(34px); + backdrop-filter: blur(34px); + } + + .nodedc-bottom-dock [class~="bg-surface-1"] { + background: transparent !important; + } + + .nodedc-bottom-dock [class~="border-t"], + .nodedc-bottom-dock [class~="border-b"], + .nodedc-bottom-dock [class~="border-subtle"] { + border-width: 0 !important; + border-color: transparent !important; + } + .nodedc-glass-modal [data-slot="button"], .nodedc-glass-modal [data-slot="icon-button"] { border: none !important; diff --git a/plane-src/packages/i18n/src/locales/en/translations.ts b/plane-src/packages/i18n/src/locales/en/translations.ts index a633c0e..57e7a3b 100644 --- a/plane-src/packages/i18n/src/locales/en/translations.ts +++ b/plane-src/packages/i18n/src/locales/en/translations.ts @@ -508,6 +508,9 @@ export default { no_data_yet: "No Data yet", syncing: "Syncing", add_work_item: "Add work item", + app_header: { + add_task: "Add task", + }, advanced_description_placeholder: "Press '/' for commands", create_work_item: "Create work item", attachments: "Attachments", diff --git a/plane-src/packages/i18n/src/locales/ru/translations.ts b/plane-src/packages/i18n/src/locales/ru/translations.ts index 14aa842..5a0286f 100644 --- a/plane-src/packages/i18n/src/locales/ru/translations.ts +++ b/plane-src/packages/i18n/src/locales/ru/translations.ts @@ -664,6 +664,9 @@ export default { no_data_yet: "Нет данных", syncing: "Синхронизация", add_work_item: "Добавить рабочий элемент", + app_header: { + add_task: "Добавить задачу", + }, advanced_description_placeholder: "Нажмите '/' для команд", create_work_item: "Создать рабочий элемент", attachments: "Вложения",