From 8f8dc7b29f3926558b50bf5c188c5b9153209082 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Wed, 2 Sep 2026 14:07:13 +0530 Subject: [PATCH 1/9] chore: remove unused banner components from web application Deleted the following banner components as they are no longer needed: - AuthBanner - BulkOperationsUpgradeBanner - ContentLimitBanner - IntegrationAndImportExportBanner This cleanup helps streamline the codebase and remove redundant files. --- .../account/auth-forms/auth-banner.tsx | 44 ------------------- .../issues/bulk-operations/upgrade-banner.tsx | 36 --------------- .../pages/editor/content-limit-banner.tsx | 38 ---------------- .../integration-and-import-export-banner.tsx | 26 ----------- 4 files changed, 144 deletions(-) delete mode 100644 apps/web/core/components/account/auth-forms/auth-banner.tsx delete mode 100644 apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx delete mode 100644 apps/web/core/components/pages/editor/content-limit-banner.tsx delete mode 100644 apps/web/core/components/ui/integration-and-import-export-banner.tsx diff --git a/apps/web/core/components/account/auth-forms/auth-banner.tsx b/apps/web/core/components/account/auth-forms/auth-banner.tsx deleted file mode 100644 index 1cd0520b3d1..00000000000 --- a/apps/web/core/components/account/auth-forms/auth-banner.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { Info } from "lucide-react"; -// plane imports -import { useTranslation } from "@plane/i18n"; -import { CloseIcon } from "@plane/propel/icons"; -// helpers -import type React from "react"; - -type TAuthBanner = { - message: React.ReactNode; - handleBannerData?: (bannerData: undefined) => void; -}; - -export function AuthBanner(props: TAuthBanner) { - const { message, handleBannerData } = props; - // translation - const { t } = useTranslation(); - - if (!message) return <>; - return ( -
-
- -
-

{message}

- -
- ); -} diff --git a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx deleted file mode 100644 index bfd33369020..00000000000 --- a/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { MARKETING_PLANE_ONE_PAGE_LINK } from "@plane/constants"; -import { getButtonStyling } from "@plane/propel/button"; -import { cn } from "@plane/utils"; - -type Props = { - className?: string; -}; - -export function BulkOperationsUpgradeBanner(props: Props) { - const { className } = props; - - return ( -
-
-

- Change state, priority, and more for several work items at once. Save three minutes on an average per - operation. -

- - Upgrade to One - -
-
- ); -} diff --git a/apps/web/core/components/pages/editor/content-limit-banner.tsx b/apps/web/core/components/pages/editor/content-limit-banner.tsx deleted file mode 100644 index 52fba7e4e60..00000000000 --- a/apps/web/core/components/pages/editor/content-limit-banner.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { TriangleAlert } from "lucide-react"; -import { cn } from "@plane/utils"; - -type Props = { - className?: string; - onDismiss?: () => void; -}; - -export function ContentLimitBanner({ className, onDismiss }: Props) { - return ( -
-
- - - - - Content limit reached and live sync is off. Create a new page or use nested pages to continue syncing. - -
- {onDismiss && ( - - )} -
- ); -} diff --git a/apps/web/core/components/ui/integration-and-import-export-banner.tsx b/apps/web/core/components/ui/integration-and-import-export-banner.tsx deleted file mode 100644 index a67c2d6c33d..00000000000 --- a/apps/web/core/components/ui/integration-and-import-export-banner.tsx +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { AlertCircle } from "lucide-react"; - -type Props = { - bannerName: string; - description?: string; -}; - -export function IntegrationAndImportExportBanner({ bannerName, description }: Props) { - return ( -
-

{bannerName}

- {description && ( -
- -

{description}

-
- )} -
- ); -} From 47e21128f8cc8e0e08a3c3b4ce80d586568657e0 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Wed, 2 Sep 2026 14:11:38 +0530 Subject: [PATCH 2/9] refactor: update banner imports and usage across multiple components Replaced instances of the old banner component from @plane/propel with the new one from @makeplane/propel/components in various files. Adjusted properties and structure for consistency, including changes to the ArchivedIssueDetailsPage, DevErrorComponent, AuthRoot, and ResetPasswordForm. This update enhances the UI consistency and aligns with the recent component migration. --- .../(detail)/[archivedIssueId]/page.tsx | 8 ++--- .../(workspace)/integrations/page.tsx | 5 ++-- apps/web/app/error/dev.tsx | 23 +++------------ .../account/auth-forms/auth-root.tsx | 9 ++++-- .../account/auth-forms/reset-password.tsx | 9 ++++-- .../issues/bulk-operations/root.tsx | 29 +++++++++++++++++-- .../components/pages/editor/page-root.tsx | 12 ++++++-- 7 files changed, 61 insertions(+), 34 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx index 592bf09a50f..5d597c78112 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx @@ -8,7 +8,7 @@ import { observer } from "mobx-react"; import { useRouter } from "next/navigation"; import useSWR from "swr"; // ui -import { Banner } from "@plane/propel/banner"; +import { Banner } from "@makeplane/propel/components/banner"; import { Button } from "@plane/propel/button"; import { ArchiveIcon } from "@plane/propel/icons"; import { Loader } from "@plane/ui"; @@ -68,10 +68,11 @@ function ArchivedIssueDetailsPage({ params }: Route.ComponentProps) { ) : ( <> } - action={ + icon={} + actions={ } - className="border-b border-subtle" />
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx index 1636bc8ae07..354e0c6f868 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx @@ -11,7 +11,6 @@ import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { NotAuthorizedView } from "@/components/auth-screens/not-authorized-view"; import { PageHead } from "@/components/core/page-title"; import { SingleIntegrationCard } from "@/components/integration/single-integration-card"; -import { IntegrationAndImportExportBanner } from "@/components/ui/integration-and-import-export-banner"; import { IntegrationsSettingsLoader } from "@/components/ui/loader/settings/integration"; // constants import { APP_INTEGRATIONS } from "@plane/constants"; @@ -41,7 +40,9 @@ function WorkspaceIntegrationsPage() { <>
- +
+

Integrations

+
{appIntegrations ? ( appIntegrations.map((integration) => ( diff --git a/apps/web/app/error/dev.tsx b/apps/web/app/error/dev.tsx index 0269dcbdcb1..2adf0912c18 100644 --- a/apps/web/app/error/dev.tsx +++ b/apps/web/app/error/dev.tsx @@ -6,7 +6,7 @@ // plane imports import { isRouteErrorResponse } from "react-router"; -import { Banner } from "@plane/propel/banner"; +import { Banner } from "@makeplane/propel/components/banner"; import { Button } from "@plane/propel/button"; import { Card, ECardVariant } from "@plane/propel/card"; import { InfoFillIcon } from "@plane/propel/icons"; @@ -42,12 +42,7 @@ export function DevErrorComponent({ error, onGoHome, onReload }: DevErrorCompone return (
- } - title="Route Error Response" - animationDuration={0} - /> + } title="Route Error Response" />
@@ -77,12 +72,7 @@ export function DevErrorComponent({ error, onGoHome, onReload }: DevErrorCompone return (
- } - title="Runtime Error" - animationDuration={0} - /> + } title="Runtime Error" />
@@ -132,12 +122,7 @@ export function DevErrorComponent({ error, onGoHome, onReload }: DevErrorCompone return (
- } - title="Unknown Error" - animationDuration={0} - /> + } title="Unknown Error" />
diff --git a/apps/web/core/components/account/auth-forms/auth-root.tsx b/apps/web/core/components/account/auth-forms/auth-root.tsx index 5cba8a178e9..f59db089f5f 100644 --- a/apps/web/core/components/account/auth-forms/auth-root.tsx +++ b/apps/web/core/components/account/auth-forms/auth-root.tsx @@ -8,6 +8,7 @@ import { useEffect, useState } from "react"; import { observer } from "mobx-react"; import { useSearchParams } from "next/navigation"; // plane imports +import { Banner } from "@makeplane/propel/components/banner"; import { OAuthOptions } from "@plane/ui"; // helpers import type { TAuthErrorInfo } from "@/helpers/authentication.helper"; @@ -23,7 +24,6 @@ import { useOAuthConfig } from "@/hooks/oauth"; import { useInstance } from "@/hooks/store/use-instance"; // local imports import { TermsAndConditions } from "../terms-and-conditions"; -import { AuthBanner } from "./auth-banner"; import { AuthHeader, AuthHeaderBase } from "./auth-header"; import { AuthFormRoot } from "./form-root"; @@ -116,7 +116,12 @@ export const AuthRoot = observer(function AuthRoot(props: TAuthRoot) { return ( {errorInfo && errorInfo?.type === EErrorAlertType.BANNER_ALERT && ( - setErrorInfo(value)} /> + setErrorInfo(undefined)} + /> )} {errorInfo && errorInfo?.type === EErrorAlertType.BANNER_ALERT && ( - setErrorInfo(value)} /> + setErrorInfo(undefined)} + /> )}
; + return ( +
+ } + /> + } + render={
} + /> +
+ ); }); diff --git a/apps/web/core/components/pages/editor/page-root.tsx b/apps/web/core/components/pages/editor/page-root.tsx index c7c90844668..a260561e988 100644 --- a/apps/web/core/components/pages/editor/page-root.tsx +++ b/apps/web/core/components/pages/editor/page-root.tsx @@ -16,11 +16,12 @@ import { usePagesPaneExtensions, useExtendedEditorProps } from "@/hooks/pages"; import type { EPageStoreType } from "@/hooks/store"; // store import type { TPageInstance } from "@/store/pages/base-page"; +// ui +import { Banner } from "@makeplane/propel/components/banner"; // local imports import { PageNavigationPaneRoot } from "../navigation-pane"; import { PageVersionsOverlay } from "../version"; import { PagesVersionEditor } from "../version/editor"; -import { ContentLimitBanner } from "./content-limit-banner"; import { PageEditorBody } from "./editor-body"; import type { TEditorBodyConfig, TEditorBodyHandlers } from "./editor-body"; import { PageEditorToolbarRoot } from "./toolbar"; @@ -166,7 +167,14 @@ export const PageRoot = observer(function PageRoot(props: TPageRootProps) { isNavigationPaneOpen={isNavigationPaneOpen} page={page} /> - {showContentTooLargeBanner && } + {showContentTooLargeBanner && ( + } + /> + )} Date: Wed, 2 Sep 2026 14:15:15 +0530 Subject: [PATCH 3/9] refactor: update icon imports in ArchivedIssueDetailsPage and DevErrorComponent Replaced the old icon components with new ones from @makeplane/propel/icons in the ArchivedIssueDetailsPage and DevErrorComponent. This change enhances visual consistency across the application by standardizing the icon usage in banner notifications. --- .../archives/issues/(detail)/[archivedIssueId]/page.tsx | 4 ++-- apps/web/app/error/dev.tsx | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx index 5d597c78112..409dcdd4e47 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx @@ -9,8 +9,8 @@ import { useRouter } from "next/navigation"; import useSWR from "swr"; // ui import { Banner } from "@makeplane/propel/components/banner"; +import { ArchiveOutline } from "@makeplane/propel/icons"; import { Button } from "@plane/propel/button"; -import { ArchiveIcon } from "@plane/propel/icons"; import { Loader } from "@plane/ui"; // components import { PageHead } from "@/components/core/page-title"; @@ -71,7 +71,7 @@ function ArchivedIssueDetailsPage({ params }: Route.ComponentProps) { placement="page" variant="warning" title="This work item has been archived. Visit the Archives section to restore it." - icon={} + icon={} actions={ } /> diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx index 354e0c6f868..0344f8a5696 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx @@ -8,6 +8,7 @@ import { observer } from "mobx-react"; import useSWR from "swr"; // components import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { NotAuthorizedView } from "@/components/auth-screens/not-authorized-view"; import { PageHead } from "@/components/core/page-title"; import { SingleIntegrationCard } from "@/components/integration/single-integration-card"; @@ -23,6 +24,8 @@ import { IntegrationService } from "@/services/integrations"; const integrationService = new IntegrationService(); function WorkspaceIntegrationsPage() { + // translation + const { t } = useTranslation(); // store hooks const { currentWorkspace } = useWorkspace(); const { allowPermissions } = useUserPermissions(); @@ -41,7 +44,7 @@ function WorkspaceIntegrationsPage() {
-

Integrations

+

{t("integrations.integrations")}

{appIntegrations ? ( diff --git a/apps/web/core/components/issues/bulk-operations/root.tsx b/apps/web/core/components/issues/bulk-operations/root.tsx index 8643b18e2df..2c83a0054bf 100644 --- a/apps/web/core/components/issues/bulk-operations/root.tsx +++ b/apps/web/core/components/issues/bulk-operations/root.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import { AnchorButton } from "@makeplane/propel/components/anchor-button"; import { Banner } from "@makeplane/propel/components/banner"; import { MARKETING_PLANE_ONE_PAGE_LINK } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { cn } from "@plane/utils"; // hooks import { useMultipleSelectStore } from "@/hooks/store/use-multiple-select-store"; @@ -21,6 +22,8 @@ type Props = { export const IssueBulkOperationsRoot = observer(function IssueBulkOperationsRoot(props: Props) { const { className, selectionHelpers } = props; + // translation + const { t } = useTranslation(); // store hooks const { isSelectionActive } = useMultipleSelectStore(); @@ -32,19 +35,19 @@ export const IssueBulkOperationsRoot = observer(function IssueBulkOperationsRoot placement="inline" variant="accent" icon={null} - title="Change state, priority, and more for several work items at once. Save three minutes on an average per operation." + title={t("bulk_operations.upgrade_banner.message")} actions={ } /> diff --git a/apps/web/core/components/pages/editor/page-root.tsx b/apps/web/core/components/pages/editor/page-root.tsx index a260561e988..dab67febc01 100644 --- a/apps/web/core/components/pages/editor/page-root.tsx +++ b/apps/web/core/components/pages/editor/page-root.tsx @@ -8,6 +8,7 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; // plane imports import type { CollaborationState, EditorRefApi } from "@plane/editor"; +import { useTranslation } from "@plane/i18n"; import type { TDocumentPayload, TPage, TPageVersion, TWebhookConnectionQueryParams } from "@plane/types"; // hooks import { usePageFallback } from "@/hooks/use-page-fallback"; @@ -63,6 +64,8 @@ export const PageRoot = observer(function PageRoot(props: TPageRootProps) { const [editorReady, setEditorReady] = useState(false); const [collaborationState, setCollaborationState] = useState(null); const [showContentTooLargeBanner, setShowContentTooLargeBanner] = useState(false); + // translation + const { t } = useTranslation(); // refs const editorRef = useRef(null); // derived values @@ -171,7 +174,7 @@ export const PageRoot = observer(function PageRoot(props: TPageRootProps) { } /> )} From cce4cb80bd59831698e20a5f5facc548b59bf621 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Wed, 2 Sep 2026 14:32:08 +0530 Subject: [PATCH 6/9] feat(i18n): add page content limit banners and archive messages across multiple languages Introduced new localized messages for the "page content limit" banner and updated archive notifications in various language files. This enhancement improves user experience by providing clear guidance when content limits are reached and when work items are archived, ensuring consistency and accessibility across the application. --- packages/i18n/src/locales/cs/page.json | 3 +++ packages/i18n/src/locales/cs/work-item.json | 8 +++++++- packages/i18n/src/locales/de/page.json | 3 +++ packages/i18n/src/locales/de/work-item.json | 8 +++++++- packages/i18n/src/locales/en/page.json | 3 +++ packages/i18n/src/locales/en/work-item.json | 8 +++++++- packages/i18n/src/locales/es/page.json | 3 +++ packages/i18n/src/locales/es/work-item.json | 8 +++++++- packages/i18n/src/locales/fr/page.json | 3 +++ packages/i18n/src/locales/fr/work-item.json | 8 +++++++- packages/i18n/src/locales/id/page.json | 3 +++ packages/i18n/src/locales/id/work-item.json | 8 +++++++- packages/i18n/src/locales/it/page.json | 3 +++ packages/i18n/src/locales/it/work-item.json | 8 +++++++- packages/i18n/src/locales/ja/page.json | 3 +++ packages/i18n/src/locales/ja/work-item.json | 8 +++++++- packages/i18n/src/locales/ka-ge/page.json | 3 +++ packages/i18n/src/locales/ka-ge/work-item.json | 8 +++++++- packages/i18n/src/locales/ko/page.json | 3 +++ packages/i18n/src/locales/ko/work-item.json | 8 +++++++- packages/i18n/src/locales/pl/page.json | 3 +++ packages/i18n/src/locales/pl/work-item.json | 8 +++++++- packages/i18n/src/locales/pt-BR/page.json | 3 +++ packages/i18n/src/locales/pt-BR/work-item.json | 8 +++++++- packages/i18n/src/locales/ro/page.json | 3 +++ packages/i18n/src/locales/ro/work-item.json | 8 +++++++- packages/i18n/src/locales/ru/page.json | 3 +++ packages/i18n/src/locales/ru/work-item.json | 8 +++++++- packages/i18n/src/locales/sk/page.json | 3 +++ packages/i18n/src/locales/sk/work-item.json | 8 +++++++- packages/i18n/src/locales/tr-TR/page.json | 3 +++ packages/i18n/src/locales/tr-TR/work-item.json | 8 +++++++- packages/i18n/src/locales/ua/page.json | 3 +++ packages/i18n/src/locales/ua/work-item.json | 8 +++++++- packages/i18n/src/locales/vi-VN/page.json | 3 +++ packages/i18n/src/locales/vi-VN/work-item.json | 8 +++++++- packages/i18n/src/locales/zh-CN/page.json | 3 +++ packages/i18n/src/locales/zh-CN/work-item.json | 8 +++++++- packages/i18n/src/locales/zh-TW/page.json | 3 +++ packages/i18n/src/locales/zh-TW/work-item.json | 8 +++++++- 40 files changed, 200 insertions(+), 20 deletions(-) diff --git a/packages/i18n/src/locales/cs/page.json b/packages/i18n/src/locales/cs/page.json index 2688d02bde3..8e20586f6b8 100644 --- a/packages/i18n/src/locales/cs/page.json +++ b/packages/i18n/src/locales/cs/page.json @@ -111,5 +111,8 @@ "success_message": "Stránka byla odebrána z kolekce.", "error_message": "Stránku se nepodařilo odebrat z kolekce. Zkuste to prosím znovu." } + }, + "page_content_limit_banner": { + "message": "Byl dosažen limit obsahu a živá synchronizace je vypnutá. Vytvořte novou stránku nebo použijte vnořené stránky a pokračujte v synchronizaci." } } diff --git a/packages/i18n/src/locales/cs/work-item.json b/packages/i18n/src/locales/cs/work-item.json index 2fe97ce830d..78196a6bb69 100644 --- a/packages/i18n/src/locales/cs/work-item.json +++ b/packages/i18n/src/locales/cs/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Archivace pracovní položky se nezdařila. Zkuste to prosím znovu." - } + }, + "banner_message": "Tato pracovní položka byla archivována. Přejděte do sekce Archivy a obnovte ji.", + "go_to_archives": "Přejít do archivů" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Nelze aktualizovat pracovní položky", "message": "Změna stavu není povolena pro některé pracovní položky. Ujistěte se, že je změna stavu povolena." } + }, + "upgrade_banner": { + "message": "Měňte stav, prioritu a další vlastnosti u více pracovních položek najednou. V průměru ušetříte tři minuty na operaci.", + "cta": "Upgradovat na One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/de/page.json b/packages/i18n/src/locales/de/page.json index 10af7310003..4d97bef02cc 100644 --- a/packages/i18n/src/locales/de/page.json +++ b/packages/i18n/src/locales/de/page.json @@ -111,5 +111,8 @@ "success_message": "Seite aus Sammlung entfernt.", "error_message": "Die Seite konnte nicht aus der Sammlung entfernt werden. Bitte versuchen Sie es erneut." } + }, + "page_content_limit_banner": { + "message": "Inhaltslimit erreicht, Live-Synchronisierung ist deaktiviert. Neue Seite erstellen oder verschachtelte Seiten verwenden, um die Synchronisierung fortzusetzen." } } diff --git a/packages/i18n/src/locales/de/work-item.json b/packages/i18n/src/locales/de/work-item.json index 9c235f60554..ddc105e4d61 100644 --- a/packages/i18n/src/locales/de/work-item.json +++ b/packages/i18n/src/locales/de/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Archivierung des Arbeitselements fehlgeschlagen. Bitte versuchen Sie es erneut." - } + }, + "banner_message": "Dieses Arbeitselement wurde archiviert. Rufen Sie den Bereich „Archive“ auf, um es wiederherzustellen.", + "go_to_archives": "Zu den Archiven" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Arbeitsaufgaben können nicht aktualisiert werden", "message": "Statusänderung ist für einige Arbeitsaufgaben nicht erlaubt. Stellen Sie sicher, dass die Statusänderung zulässig ist." } + }, + "upgrade_banner": { + "message": "Status, Priorität und mehr für mehrere Arbeitselemente gleichzeitig ändern. Im Schnitt drei Minuten pro Vorgang sparen.", + "cta": "Upgrade auf One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/en/page.json b/packages/i18n/src/locales/en/page.json index f14a4b017b3..ca2a384ee83 100644 --- a/packages/i18n/src/locales/en/page.json +++ b/packages/i18n/src/locales/en/page.json @@ -111,5 +111,8 @@ "success_message": "Page removed from collection.", "error_message": "Page could not be removed from the collection. Please try again." } + }, + "page_content_limit_banner": { + "message": "Content limit reached and live sync is off. Create a new page or use nested pages to continue syncing." } } diff --git a/packages/i18n/src/locales/en/work-item.json b/packages/i18n/src/locales/en/work-item.json index b7935a125c3..6acb2439841 100644 --- a/packages/i18n/src/locales/en/work-item.json +++ b/packages/i18n/src/locales/en/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Work item could not be archived. Please try again." - } + }, + "banner_message": "This work item has been archived. Visit the Archives section to restore it.", + "go_to_archives": "Go to archives" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Unable to update work items", "message": "State change is not allowed for some work items. Ensure the state change is allowed." } + }, + "upgrade_banner": { + "message": "Change state, priority, and more for several work items at once. Save three minutes on an average per operation.", + "cta": "Upgrade to One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/es/page.json b/packages/i18n/src/locales/es/page.json index c013497b230..89be775aa9a 100644 --- a/packages/i18n/src/locales/es/page.json +++ b/packages/i18n/src/locales/es/page.json @@ -111,5 +111,8 @@ "success_message": "Página quitada de la colección.", "error_message": "No se pudo quitar la página de la colección. Inténtalo de nuevo." } + }, + "page_content_limit_banner": { + "message": "Se alcanzó el límite de contenido y la sincronización en vivo está desactivada. Cree una página nueva o utilice páginas anidadas para continuar sincronizando." } } diff --git a/packages/i18n/src/locales/es/work-item.json b/packages/i18n/src/locales/es/work-item.json index 738fff249c7..b721959b15b 100644 --- a/packages/i18n/src/locales/es/work-item.json +++ b/packages/i18n/src/locales/es/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "No se pudo archivar el elemento de trabajo. Por favor, inténtalo de nuevo." - } + }, + "banner_message": "Este elemento de trabajo ha sido archivado. Visite la sección Archivos para restaurarlo.", + "go_to_archives": "Ir a archivos" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "No se pueden actualizar elementos de trabajo", "message": "El cambio de estado no está permitido para algunos elementos de trabajo. Asegúrese de que el cambio de estado esté permitido." } + }, + "upgrade_banner": { + "message": "Cambie el estado, la prioridad y más para varios elementos de trabajo a la vez. Ahorre en promedio tres minutos por operación.", + "cta": "Actualizar a One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/fr/page.json b/packages/i18n/src/locales/fr/page.json index 576ecb00c3b..a3bb95716ec 100644 --- a/packages/i18n/src/locales/fr/page.json +++ b/packages/i18n/src/locales/fr/page.json @@ -111,5 +111,8 @@ "success_message": "Page retirée de la collection.", "error_message": "La page n'a pas pu être retirée de la collection. Veuillez réessayer." } + }, + "page_content_limit_banner": { + "message": "Limite de contenu atteinte et la synchronisation en direct est désactivée. Créez une nouvelle page ou utilisez des pages imbriquées pour continuer la synchronisation." } } diff --git a/packages/i18n/src/locales/fr/work-item.json b/packages/i18n/src/locales/fr/work-item.json index 04a5958092b..49d15f32435 100644 --- a/packages/i18n/src/locales/fr/work-item.json +++ b/packages/i18n/src/locales/fr/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "L’élément de travail n’a pas pu être archivé. Veuillez réessayer." - } + }, + "banner_message": "Cet élément de travail a été archivé. Accédez à la section Archives pour le restaurer.", + "go_to_archives": "Accéder aux archives" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Impossible de mettre à jour les éléments de travail", "message": "Le changement d'état n'est pas autorisé pour certains éléments de travail. Assurez-vous que le changement d'état est autorisé." } + }, + "upgrade_banner": { + "message": "Modifiez l’état, la priorité et bien plus pour plusieurs éléments de travail à la fois. Économisez en moyenne trois minutes par opération.", + "cta": "Mettre à niveau vers One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/id/page.json b/packages/i18n/src/locales/id/page.json index 3e6fcdb3b0e..92175995960 100644 --- a/packages/i18n/src/locales/id/page.json +++ b/packages/i18n/src/locales/id/page.json @@ -111,5 +111,8 @@ "success_message": "Halaman dihapus dari koleksi.", "error_message": "Halaman tidak dapat dihapus dari koleksi. Silakan coba lagi." } + }, + "page_content_limit_banner": { + "message": "Batas konten tercapai dan sinkronisasi langsung nonaktif. Buat halaman baru atau gunakan halaman bertingkat untuk melanjutkan sinkronisasi." } } diff --git a/packages/i18n/src/locales/id/work-item.json b/packages/i18n/src/locales/id/work-item.json index 917fdeb1b6a..0e2abacf61a 100644 --- a/packages/i18n/src/locales/id/work-item.json +++ b/packages/i18n/src/locales/id/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Item kerja tidak dapat diarsipkan. Silakan coba lagi." - } + }, + "banner_message": "Item kerja ini telah diarsipkan. Kunjungi bagian Arsip untuk memulihkannya.", + "go_to_archives": "Buka arsip" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Tidak dapat memperbarui item kerja", "message": "Perubahan status tidak diizinkan untuk beberapa item kerja. Pastikan perubahan status diizinkan." } + }, + "upgrade_banner": { + "message": "Ubah status, prioritas, dan lainnya untuk beberapa item kerja sekaligus. Hemat rata-rata tiga menit per operasi.", + "cta": "Tingkatkan ke One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/it/page.json b/packages/i18n/src/locales/it/page.json index 7898785aec2..1dbc06e3eb3 100644 --- a/packages/i18n/src/locales/it/page.json +++ b/packages/i18n/src/locales/it/page.json @@ -111,5 +111,8 @@ "success_message": "Pagina rimossa dalla raccolta.", "error_message": "Non è stato possibile rimuovere la pagina dalla raccolta. Riprova." } + }, + "page_content_limit_banner": { + "message": "Limite di contenuto raggiunto e la sincronizzazione in tempo reale è disattivata. Crea una nuova pagina o usa pagine annidate per continuare la sincronizzazione." } } diff --git a/packages/i18n/src/locales/it/work-item.json b/packages/i18n/src/locales/it/work-item.json index 7622c815bb8..aeb3ea5cb38 100644 --- a/packages/i18n/src/locales/it/work-item.json +++ b/packages/i18n/src/locales/it/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Impossibile archiviare l'elemento di lavoro. Per favore, riprova." - } + }, + "banner_message": "Questo elemento di lavoro è stato archiviato. Vai alla sezione Archivi per ripristinarlo.", + "go_to_archives": "Vai agli archivi" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Impossibile aggiornare gli elementi di lavoro", "message": "Il cambiamento di stato non è consentito per alcuni elementi di lavoro. Assicurati che il cambiamento di stato sia consentito." } + }, + "upgrade_banner": { + "message": "Cambia stato, priorità e altro per più elementi di lavoro contemporaneamente. Risparmia in media tre minuti per operazione.", + "cta": "Aggiorna a One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ja/page.json b/packages/i18n/src/locales/ja/page.json index 10b45a38f06..d6cee44f67b 100644 --- a/packages/i18n/src/locales/ja/page.json +++ b/packages/i18n/src/locales/ja/page.json @@ -111,5 +111,8 @@ "success_message": "ページをコレクションから削除しました。", "error_message": "ページをコレクションから削除できませんでした。もう一度お試しください。" } + }, + "page_content_limit_banner": { + "message": "コンテンツの上限に達したため、リアルタイム同期がオフになっています。新しいページを作成するか、ネストされたページを使用して同期を続けてください。" } } diff --git a/packages/i18n/src/locales/ja/work-item.json b/packages/i18n/src/locales/ja/work-item.json index ca6ed7ffc96..41bcdaddf42 100644 --- a/packages/i18n/src/locales/ja/work-item.json +++ b/packages/i18n/src/locales/ja/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "作業項目をアーカイブできませんでした。もう一度お試しください。" - } + }, + "banner_message": "この作業項目はアーカイブされました。復元するには、アーカイブセクションをご確認ください。", + "go_to_archives": "アーカイブに移動" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "作業項目を更新できません", "message": "一部の作業項目では状態の変更が許可されていません。状態の変更が許可されていることを確認してください。" } + }, + "upgrade_banner": { + "message": "複数の作業項目の状態や優先度などを一括で変更できます。1回の操作につき平均3分を節約できます。", + "cta": "One にアップグレード" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ka-ge/page.json b/packages/i18n/src/locales/ka-ge/page.json index 0f47ed1844f..6e5930a3823 100644 --- a/packages/i18n/src/locales/ka-ge/page.json +++ b/packages/i18n/src/locales/ka-ge/page.json @@ -111,5 +111,8 @@ "success_message": "Page removed from collection.", "error_message": "Page could not be removed from the collection. Please try again." } + }, + "page_content_limit_banner": { + "message": "კონტენტის ლიმიტი ამოწურულია და რეალურ დროში სინქრონიზაცია გამორთულია. შექმენით ახალი გვერდი ან გამოიყენეთ ჩალაგებული გვერდები სინქრონიზაციის გასაგრძელებლად." } } diff --git a/packages/i18n/src/locales/ka-ge/work-item.json b/packages/i18n/src/locales/ka-ge/work-item.json index 00867103322..d28ab081541 100644 --- a/packages/i18n/src/locales/ka-ge/work-item.json +++ b/packages/i18n/src/locales/ka-ge/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "სამუშაო ელემენტის არქივირება ვერ მოხერხდა. გთხოვთ, სცადოთ ხელახლა." - } + }, + "banner_message": "ეს სამუშაო ელემენტი დაარქივებულია. მის აღსადგენად ეწვიეთ არქივების სექციას.", + "go_to_archives": "არქივებზე გადასვლა" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Unable to update work items", "message": "State change is not allowed for some work items. Ensure the state change is allowed." } + }, + "upgrade_banner": { + "message": "შეცვალეთ მდგომარეობა, პრიორიტეტი და სხვა რამდენიმე სამუშაო ელემენტისთვის ერთდროულად. საშუალოდ დაზოგეთ სამი წუთი თითოეულ ოპერაციაზე.", + "cta": "განახლება One-ზე" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ko/page.json b/packages/i18n/src/locales/ko/page.json index bfc60e4de75..079864c7910 100644 --- a/packages/i18n/src/locales/ko/page.json +++ b/packages/i18n/src/locales/ko/page.json @@ -111,5 +111,8 @@ "success_message": "페이지가 컬렉션에서 제거되었습니다.", "error_message": "페이지를 컬렉션에서 제거할 수 없습니다. 다시 시도해 주세요." } + }, + "page_content_limit_banner": { + "message": "콘텐츠 한도에 도달하여 실시간 동기화가 꺼졌습니다. 동기화를 계속하려면 새 페이지를 만들거나 중첩 페이지를 사용하세요." } } diff --git a/packages/i18n/src/locales/ko/work-item.json b/packages/i18n/src/locales/ko/work-item.json index 259adc2fc57..66007d29c70 100644 --- a/packages/i18n/src/locales/ko/work-item.json +++ b/packages/i18n/src/locales/ko/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "작업 항목을 아카이브할 수 없습니다. 다시 시도해주세요." - } + }, + "banner_message": "이 작업 항목은 아카이브되었습니다. 복원하려면 아카이브 섹션으로 이동하세요.", + "go_to_archives": "아카이브로 이동" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "작업 항목을 업데이트할 수 없습니다", "message": "일부 작업 항목에 대해 상태 변경이 허용되지 않습니다. 상태 변경이 허용되는지 확인하세요." } + }, + "upgrade_banner": { + "message": "여러 작업 항목의 상태, 우선순위 등을 한 번에 변경할 수 있습니다. 작업당 평균 3분을 절약합니다.", + "cta": "One으로 업그레이드" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/pl/page.json b/packages/i18n/src/locales/pl/page.json index 676a197ab11..fb7ca0b779c 100644 --- a/packages/i18n/src/locales/pl/page.json +++ b/packages/i18n/src/locales/pl/page.json @@ -111,5 +111,8 @@ "success_message": "Strona została usunięta z kolekcji.", "error_message": "Nie udało się usunąć strony z kolekcji. Spróbuj ponownie." } + }, + "page_content_limit_banner": { + "message": "Osiągnięto limit treści, a synchronizacja na żywo jest wyłączona. Utwórz nową stronę lub użyj zagnieżdżonych stron, aby kontynuować synchronizację." } } diff --git a/packages/i18n/src/locales/pl/work-item.json b/packages/i18n/src/locales/pl/work-item.json index f9c6a284957..b3759399ee5 100644 --- a/packages/i18n/src/locales/pl/work-item.json +++ b/packages/i18n/src/locales/pl/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Nie udało się zarchiwizować elementu pracy. Spróbuj ponownie." - } + }, + "banner_message": "Ten element pracy został zarchiwizowany. Przejdź do sekcji Archiwa, aby go przywrócić.", + "go_to_archives": "Przejdź do archiwów" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Nie można zaktualizować elementów pracy", "message": "Zmiana stanu nie jest dozwolona dla niektórych elementów pracy. Upewnij się, że zmiana stanu jest dozwolona." } + }, + "upgrade_banner": { + "message": "Zmieniaj stan, priorytet i inne właściwości wielu elementów pracy jednocześnie. Zaoszczędź średnio trzy minuty na operację.", + "cta": "Uaktualnij do One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/pt-BR/page.json b/packages/i18n/src/locales/pt-BR/page.json index d2c827f3543..aaeb04a39b7 100644 --- a/packages/i18n/src/locales/pt-BR/page.json +++ b/packages/i18n/src/locales/pt-BR/page.json @@ -111,5 +111,8 @@ "success_message": "Página removida da coleção.", "error_message": "Não foi possível remover a página da coleção. Tente novamente." } + }, + "page_content_limit_banner": { + "message": "Limite de conteúdo atingido e a sincronização em tempo real está desativada. Crie uma nova página ou use páginas aninhadas para continuar sincronizando." } } diff --git a/packages/i18n/src/locales/pt-BR/work-item.json b/packages/i18n/src/locales/pt-BR/work-item.json index 614a34a21d8..7436c408eb3 100644 --- a/packages/i18n/src/locales/pt-BR/work-item.json +++ b/packages/i18n/src/locales/pt-BR/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Não foi possível arquivar o item de trabalho. Por favor, tente novamente." - } + }, + "banner_message": "Este item de trabalho foi arquivado. Acesse a seção Arquivos para restaurá-lo.", + "go_to_archives": "Ir para arquivos" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Não é possível atualizar itens de trabalho", "message": "A mudança de estado não é permitida para alguns itens de trabalho. Certifique-se de que a mudança de estado seja permitida." } + }, + "upgrade_banner": { + "message": "Altere o estado, a prioridade e muito mais para vários itens de trabalho de uma vez. Economize em média três minutos por operação.", + "cta": "Upgrade para One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ro/page.json b/packages/i18n/src/locales/ro/page.json index d8f1602a27f..be1dad492f8 100644 --- a/packages/i18n/src/locales/ro/page.json +++ b/packages/i18n/src/locales/ro/page.json @@ -111,5 +111,8 @@ "success_message": "Pagina a fost eliminată din colecție.", "error_message": "Pagina nu a putut fi eliminată din colecție. Te rugăm să încerci din nou." } + }, + "page_content_limit_banner": { + "message": "Limita de conținut a fost atinsă, iar sincronizarea live este dezactivată. Creează o pagină nouă sau folosește pagini imbricate pentru a continua sincronizarea." } } diff --git a/packages/i18n/src/locales/ro/work-item.json b/packages/i18n/src/locales/ro/work-item.json index a989e537093..b9d56bd76e3 100644 --- a/packages/i18n/src/locales/ro/work-item.json +++ b/packages/i18n/src/locales/ro/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Activitatea nu a putut fi arhivată. Te rugăm să încerci din nou." - } + }, + "banner_message": "Această activitate a fost arhivată. Accesează secțiunea Arhive pentru a o restaura.", + "go_to_archives": "Accesează arhivele" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Imposibil de actualizat elementele de lucru", "message": "Schimbarea stării nu este permisă pentru unele elemente de lucru. Asigură-te că schimbarea stării este permisă." } + }, + "upgrade_banner": { + "message": "Schimbă starea, prioritatea și multe altele pentru mai multe activități simultan. Economisește în medie trei minute per operațiune.", + "cta": "Treci la One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ru/page.json b/packages/i18n/src/locales/ru/page.json index fa4e0db84a4..f92020d5090 100644 --- a/packages/i18n/src/locales/ru/page.json +++ b/packages/i18n/src/locales/ru/page.json @@ -111,5 +111,8 @@ "success_message": "Страница удалена из коллекции.", "error_message": "Не удалось удалить страницу из коллекции. Повторите попытку." } + }, + "page_content_limit_banner": { + "message": "Достигнут лимит контента, живая синхронизация отключена. Создайте новую страницу или используйте вложенные страницы, чтобы продолжить синхронизацию." } } diff --git a/packages/i18n/src/locales/ru/work-item.json b/packages/i18n/src/locales/ru/work-item.json index df676a95bd1..014478fbc47 100644 --- a/packages/i18n/src/locales/ru/work-item.json +++ b/packages/i18n/src/locales/ru/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Ошибка архивации рабочего элемента. Попробуйте позже." - } + }, + "banner_message": "Этот рабочий элемент архивирован. Перейдите в раздел «Архивы», чтобы восстановить его.", + "go_to_archives": "Перейти в архивы" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Не удалось обновить рабочие элементы", "message": "Изменение состояния не разрешено для некоторых рабочих элементов. Убедитесь, что изменение состояния разрешено." } + }, + "upgrade_banner": { + "message": "Изменяйте статус, приоритет и другие параметры сразу для нескольких рабочих элементов. В среднем экономьте три минуты на операцию.", + "cta": "Обновить до One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/sk/page.json b/packages/i18n/src/locales/sk/page.json index 7b5f029cf9b..b5833f0cf89 100644 --- a/packages/i18n/src/locales/sk/page.json +++ b/packages/i18n/src/locales/sk/page.json @@ -111,5 +111,8 @@ "success_message": "Stránka bola odstránená z kolekcie.", "error_message": "Stránku sa nepodarilo odstrániť z kolekcie. Skúste to prosím znova." } + }, + "page_content_limit_banner": { + "message": "Bol dosiahnutý limit obsahu a živá synchronizácia je vypnutá. Vytvorte novú stránku alebo použite vnorené stránky na pokračovanie synchronizácie." } } diff --git a/packages/i18n/src/locales/sk/work-item.json b/packages/i18n/src/locales/sk/work-item.json index f015c780f38..803aab56d3a 100644 --- a/packages/i18n/src/locales/sk/work-item.json +++ b/packages/i18n/src/locales/sk/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Archivácia pracovnej položky zlyhala. Skúste to prosím znova." - } + }, + "banner_message": "Táto pracovná položka bola archivovaná. Prejdite do sekcie Archívy a obnovte ju.", + "go_to_archives": "Prejsť do archívov" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Nemožno aktualizovať pracovné položky", "message": "Zmena stavu nie je povolená pre niektoré pracovné položky. Uistite sa, že zmena stavu je povolená." } + }, + "upgrade_banner": { + "message": "Menite stav, prioritu a ďalšie vlastnosti viacerých pracovných položiek naraz. V priemere ušetríte tri minúty na operáciu.", + "cta": "Upgradovať na One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/tr-TR/page.json b/packages/i18n/src/locales/tr-TR/page.json index 8ab72c06bd4..a2cf0e1785e 100644 --- a/packages/i18n/src/locales/tr-TR/page.json +++ b/packages/i18n/src/locales/tr-TR/page.json @@ -111,5 +111,8 @@ "success_message": "Sayfa koleksiyondan kaldırıldı.", "error_message": "Sayfa koleksiyondan kaldırılamadı. Lütfen tekrar deneyin." } + }, + "page_content_limit_banner": { + "message": "İçerik sınırına ulaşıldı ve canlı senkronizasyon kapalı. Senkronizasyona devam etmek için yeni bir sayfa oluşturun veya iç içe sayfalar kullanın." } } diff --git a/packages/i18n/src/locales/tr-TR/work-item.json b/packages/i18n/src/locales/tr-TR/work-item.json index 0cf70387523..27ef7de45d1 100644 --- a/packages/i18n/src/locales/tr-TR/work-item.json +++ b/packages/i18n/src/locales/tr-TR/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "İş öğesi arşivlenemedi. Lütfen tekrar deneyin." - } + }, + "banner_message": "Bu iş öğesi arşivlendi. Geri yüklemek için Arşivler bölümüne gidin.", + "go_to_archives": "Arşivlere git" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "İş öğeleri güncellenemiyor", "message": "Bazı iş öğeleri için durum değişikliğine izin verilmiyor. Durum değişikliğine izin verildiğinden emin olun." } + }, + "upgrade_banner": { + "message": "Birden fazla iş öğesinin durumunu, önceliğini ve daha fazlasını tek seferde değiştirin. İşlem başına ortalama üç dakika kazanın.", + "cta": "One'a yükseltin" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/ua/page.json b/packages/i18n/src/locales/ua/page.json index 23bc52b13c1..9605d8e1a07 100644 --- a/packages/i18n/src/locales/ua/page.json +++ b/packages/i18n/src/locales/ua/page.json @@ -111,5 +111,8 @@ "success_message": "Сторінку видалено з колекції.", "error_message": "Не вдалося видалити сторінку з колекції. Спробуйте ще раз." } + }, + "page_content_limit_banner": { + "message": "Досягнуто ліміту вмісту, і живу синхронізацію вимкнено. Створіть нову сторінку або використайте вкладені сторінки, щоб продовжити синхронізацію." } } diff --git a/packages/i18n/src/locales/ua/work-item.json b/packages/i18n/src/locales/ua/work-item.json index 158f41610b0..c799374be43 100644 --- a/packages/i18n/src/locales/ua/work-item.json +++ b/packages/i18n/src/locales/ua/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Не вдалося заархівувати робочу одиницю. Спробуйте ще раз." - } + }, + "banner_message": "Цю робочу одиницю заархівовано. Перейдіть до розділу «Архіви», щоб відновити її.", + "go_to_archives": "Перейти до архівів" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Неможливо оновити робочі елементи", "message": "Зміна стану не дозволена для деяких робочих елементів. Переконайтеся, що зміна стану дозволена." } + }, + "upgrade_banner": { + "message": "Змінюйте стан, пріоритет та інше одразу для кількох робочих одиниць. У середньому економте три хвилини на операцію.", + "cta": "Підвищити до One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/vi-VN/page.json b/packages/i18n/src/locales/vi-VN/page.json index b54340fab29..c2543741926 100644 --- a/packages/i18n/src/locales/vi-VN/page.json +++ b/packages/i18n/src/locales/vi-VN/page.json @@ -111,5 +111,8 @@ "success_message": "Đã xóa trang khỏi bộ sưu tập.", "error_message": "Không thể xóa trang khỏi bộ sưu tập. Vui lòng thử lại." } + }, + "page_content_limit_banner": { + "message": "Đã đạt giới hạn nội dung và đồng bộ trực tiếp đã tắt. Tạo trang mới hoặc dùng trang lồng nhau để tiếp tục đồng bộ." } } diff --git a/packages/i18n/src/locales/vi-VN/work-item.json b/packages/i18n/src/locales/vi-VN/work-item.json index 848fd48ae34..fea748bc199 100644 --- a/packages/i18n/src/locales/vi-VN/work-item.json +++ b/packages/i18n/src/locales/vi-VN/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "Không thể lưu trữ mục công việc. Vui lòng thử lại." - } + }, + "banner_message": "Mục công việc này đã được lưu trữ. Truy cập mục Lưu trữ để khôi phục.", + "go_to_archives": "Đi đến lưu trữ" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "Không thể cập nhật mục công việc", "message": "Thay đổi trạng thái không được phép cho một số mục công việc. Đảm bảo thay đổi trạng thái được cho phép." } + }, + "upgrade_banner": { + "message": "Thay đổi trạng thái, mức ưu tiên và nhiều thứ khác cho nhiều mục công việc cùng lúc. Tiết kiệm trung bình ba phút cho mỗi thao tác.", + "cta": "Nâng cấp lên One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/zh-CN/page.json b/packages/i18n/src/locales/zh-CN/page.json index aab6a25cd85..55d0ddcb2c9 100644 --- a/packages/i18n/src/locales/zh-CN/page.json +++ b/packages/i18n/src/locales/zh-CN/page.json @@ -111,5 +111,8 @@ "success_message": "页面已从集合中移除。", "error_message": "无法将页面从集合中移除。请重试。" } + }, + "page_content_limit_banner": { + "message": "已达到内容上限,实时同步已关闭。请创建新页面或使用嵌套页面以继续同步。" } } diff --git a/packages/i18n/src/locales/zh-CN/work-item.json b/packages/i18n/src/locales/zh-CN/work-item.json index 0617955699e..bfa3e5e2c7b 100644 --- a/packages/i18n/src/locales/zh-CN/work-item.json +++ b/packages/i18n/src/locales/zh-CN/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "无法归档工作项。请重试。" - } + }, + "banner_message": "此工作项已归档。请前往归档部分以恢复它。", + "go_to_archives": "前往归档" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "无法更新工作项", "message": "某些工作项的状态更改不被允许。请确保状态更改是被允许的。" } + }, + "upgrade_banner": { + "message": "一次性更改多个工作项的状态、优先级等。平均每次操作可节省三分钟。", + "cta": "升级到 One" } }, "recurring_work_items": { diff --git a/packages/i18n/src/locales/zh-TW/page.json b/packages/i18n/src/locales/zh-TW/page.json index f0e876a9641..885e31c4647 100644 --- a/packages/i18n/src/locales/zh-TW/page.json +++ b/packages/i18n/src/locales/zh-TW/page.json @@ -111,5 +111,8 @@ "success_message": "頁面已從集合中移除。", "error_message": "無法將頁面從集合中移除。請再試一次。" } + }, + "page_content_limit_banner": { + "message": "已達到內容上限,即時同步已關閉。請建立新頁面或使用巢狀頁面以繼續同步。" } } diff --git a/packages/i18n/src/locales/zh-TW/work-item.json b/packages/i18n/src/locales/zh-TW/work-item.json index 450b65a1131..4d59f7b3044 100644 --- a/packages/i18n/src/locales/zh-TW/work-item.json +++ b/packages/i18n/src/locales/zh-TW/work-item.json @@ -172,7 +172,9 @@ }, "failed": { "message": "無法封存工作事項。請再試一次。" - } + }, + "banner_message": "此工作事項已封存。請前往封存區段以還原它。", + "go_to_archives": "前往封存" }, "restore": { "success": { @@ -326,6 +328,10 @@ "title": "無法更新工作項目", "message": "某些工作項目不允許狀態變更。請確保狀態變更是允許的。" } + }, + "upgrade_banner": { + "message": "一次性變更多個工作事項的狀態、優先順序等。平均每次操作可節省三分鐘。", + "cta": "升級到 One" } }, "recurring_work_items": { From 270ef0d3c03d757dbd46aa17feff4e7a9e612428 Mon Sep 17 00:00:00 2001 From: Atul Tameshwari Date: Wed, 2 Sep 2026 14:35:05 +0530 Subject: [PATCH 7/9] refactor: update password strength banner implementation in AuthPasswordForm Replaced the custom banner implementation with the new Banner component from @makeplane/propel/components. This change simplifies the code and enhances consistency in the user interface by utilizing the standardized Banner component for displaying password strength messages during sign-up. --- .../account/auth-forms/password.tsx | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/apps/web/core/components/account/auth-forms/password.tsx b/apps/web/core/components/account/auth-forms/password.tsx index c98ffff3410..5ed73050945 100644 --- a/apps/web/core/components/account/auth-forms/password.tsx +++ b/apps/web/core/components/account/auth-forms/password.tsx @@ -8,13 +8,13 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; // icons -import { Eye, EyeOff, Info, XCircle } from "lucide-react"; +import { Eye, EyeOff, XCircle } from "lucide-react"; // plane imports +import { Banner } from "@makeplane/propel/components/banner"; import { Input, InputGroup } from "@makeplane/propel/components/input"; import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; -import { CloseIcon } from "@plane/propel/icons"; import { PasswordStrengthIndicator, Spinner } from "@plane/ui"; import { getPasswordStrength } from "@plane/utils"; // components @@ -128,21 +128,12 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props) return ( <> {isBannerMessage && mode === EAuthModes.SIGN_UP && ( -
-
- -
-
- {t("auth.sign_up.errors.password.strength")} -
- -
+ setBannerMessage(false)} + /> )} Date: Wed, 2 Sep 2026 17:26:04 +0530 Subject: [PATCH 8/9] refactor: replace AnchorButton with Button in IssueBulkOperationsRoot Updated the IssueBulkOperationsRoot component to replace the AnchorButton with the new Button component from @makeplane/propel/components. This change enhances the UI consistency and aligns with the recent component migration, while also adding a stretch property for improved layout flexibility. --- apps/web/core/components/issues/bulk-operations/root.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/core/components/issues/bulk-operations/root.tsx b/apps/web/core/components/issues/bulk-operations/root.tsx index 2c83a0054bf..2ce4c4842c7 100644 --- a/apps/web/core/components/issues/bulk-operations/root.tsx +++ b/apps/web/core/components/issues/bulk-operations/root.tsx @@ -6,8 +6,8 @@ import { observer } from "mobx-react"; // ui -import { AnchorButton } from "@makeplane/propel/components/anchor-button"; import { Banner } from "@makeplane/propel/components/banner"; +import { Button } from "@makeplane/propel/components/button"; import { MARKETING_PLANE_ONE_PAGE_LINK } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { cn } from "@plane/utils"; @@ -37,9 +37,10 @@ export const IssueBulkOperationsRoot = observer(function IssueBulkOperationsRoot icon={null} title={t("bulk_operations.upgrade_banner.message")} actions={ - Date: Wed, 2 Sep 2026 17:43:03 +0530 Subject: [PATCH 9/9] fix: enhance accessibility of Banner component in AuthRoot and ResetPasswordForm Added role="alert" to the Banner component in both AuthRoot and ResetPasswordForm to improve accessibility for users relying on assistive technologies. This change ensures that error messages are announced appropriately, enhancing the overall user experience. --- apps/web/core/components/account/auth-forms/auth-root.tsx | 1 + apps/web/core/components/account/auth-forms/reset-password.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/apps/web/core/components/account/auth-forms/auth-root.tsx b/apps/web/core/components/account/auth-forms/auth-root.tsx index f59db089f5f..46ae2c46157 100644 --- a/apps/web/core/components/account/auth-forms/auth-root.tsx +++ b/apps/web/core/components/account/auth-forms/auth-root.tsx @@ -119,6 +119,7 @@ export const AuthRoot = observer(function AuthRoot(props: TAuthRoot) { setErrorInfo(undefined)} /> diff --git a/apps/web/core/components/account/auth-forms/reset-password.tsx b/apps/web/core/components/account/auth-forms/reset-password.tsx index 03b73215f37..a1e2e5dbdf9 100644 --- a/apps/web/core/components/account/auth-forms/reset-password.tsx +++ b/apps/web/core/components/account/auth-forms/reset-password.tsx @@ -106,6 +106,7 @@ export const ResetPasswordForm = observer(function ResetPasswordForm() { setErrorInfo(undefined)} />