From a0a438caf8c9acf0b8063b71985b290e4e5064cd Mon Sep 17 00:00:00 2001 From: anmolsinghbhatia Date: Tue, 1 Sep 2026 04:06:41 +0530 Subject: [PATCH 1/2] refactor: migrate web @plane/propel Tooltip to @makeplane/propel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move all 144 Tooltip call sites in apps/web from the in-repo @plane/propel/tooltip to the published @makeplane/propel/components/tooltip. Prop mapping applied on every site: - tooltipContent -> label (string) - tooltipHeading -> folded into label + layout="stacked" - position -> side/align (top/center omitted; it is the published default) - isMobile -> disabled (OR'd with any existing disabled) - renderByDefault -> dropped; the in-repo Tooltip declared but never used it - className -> dropped, or mapped to sideOffset/alignOffset (3 sites) layout is "single" for short bounded copy and "stacked" wherever the label interpolates unbounded data (names, titles, URLs, joined lists) — "single" is whitespace-nowrap, so long labels would overflow. Behavior change: tooltips now open after the published 600ms default instead of the in-repo 200ms. delay is deliberately not set per site. ReactNode content: - Editor toolbars map name + shortcut onto the published shortcut prop -
and fragment copy folds into one wrapping stacked string - stickies/action-bar rendered a full hover preview, not a tooltip; it moves to PreviewCard/PreviewCardTrigger/PreviewCardContent Published label is a string, so DropdownButtonProps.tooltipContent, date-range's customTooltipContent, and the two rich-filters components narrow from ReactNode to string. rich-filters/root.tsx guards filterConfig.tooltipContent, which stays ReactNode in @plane/types. Folded labels use ?? "" where the source expression is nullable so they cannot render the string "undefined" where the in-repo tooltip rendered nothing. Zero @plane/propel/tooltip references remain under apps/web. --- .../(projects)/extended-project-sidebar.tsx | 4 +- .../(detail)/[projectId]/archives/header.tsx | 9 +-- .../[projectId]/cycles/(detail)/header.tsx | 11 ++- .../[projectId]/modules/(detail)/header.tsx | 11 ++- .../views/(detail)/[viewId]/header.tsx | 4 +- .../overview/active-project-item.tsx | 4 +- .../modal/generated-token-details.tsx | 4 +- .../components/api-token/token-list-item.tsx | 4 +- .../base-layouts/layout-switcher.tsx | 4 +- .../core/components/common/access-field.tsx | 4 +- .../common/activity/activity-block.tsx | 6 +- apps/web/core/components/core/activity.tsx | 7 +- .../core/description-versions/modal.tsx | 4 +- .../core/components/core/list/list-item.tsx | 4 +- .../modals/existing-issues-list-modal.tsx | 4 +- .../cycles/active-cycle/cycle-stats.tsx | 9 +-- .../analytics-sidebar/sidebar-header.tsx | 11 +-- .../cycles/list/cycle-list-item-action.tsx | 28 +++----- .../web/core/components/dropdowns/buttons.tsx | 36 ++++------ .../core/components/dropdowns/date-range.tsx | 15 ++-- .../dropdowns/module/button-content.tsx | 17 ++--- .../core/components/dropdowns/priority.tsx | 27 ++----- .../components/editor/lite-text/toolbar.tsx | 14 +--- .../editor/sticky-editor/toolbar.tsx | 28 ++------ .../components/estimates/create/stage-one.tsx | 4 +- .../components/estimates/points/create.tsx | 4 +- .../components/estimates/points/update.tsx | 7 +- .../core/components/exporter/export-form.tsx | 14 +--- .../gantt-chart/helpers/add-block.tsx | 4 +- .../components/home/widgets/recents/issue.tsx | 6 +- .../components/icons/locked-component.tsx | 10 ++- .../inbox/content/issue-properties.tsx | 4 +- .../inbox/sidebar/inbox-list-item.tsx | 10 +-- .../integration/single-integration-card.tsx | 14 ++-- .../issues/attachment/attachment-detail.tsx | 9 +-- .../attachment/attachment-list-item.tsx | 9 +-- .../attachment-list-upload-item.tsx | 4 +- .../attachment/attachment-upload-details.tsx | 4 +- apps/web/core/components/issues/header.tsx | 9 +-- .../sub-issues/issues-list/list-item.tsx | 4 +- .../issues/issue-detail/identifier-text.tsx | 4 +- .../actions/helpers/activity-block.tsx | 6 +- .../activity/actions/helpers/issue-link.tsx | 7 +- .../activity/actions/label-activity-chip.tsx | 4 +- .../issue-detail-quick-actions.tsx | 4 +- .../issues/issue-detail/links/link-detail.tsx | 7 +- .../issues/issue-detail/links/link-item.tsx | 4 +- .../issues/issue-detail/parent-select.tsx | 6 +- .../issues/issue-detail/relation-select.tsx | 6 +- .../filters/header/layout-selection.tsx | 4 +- .../issues/issue-layouts/gantt/blocks.tsx | 4 +- .../issues/issue-layouts/kanban/block.tsx | 4 +- .../issues/issue-layouts/list/block.tsx | 19 ++--- .../properties/all-properties.tsx | 23 ++---- .../issue-layouts/properties/labels.tsx | 43 ++++------- .../issue-layouts/spreadsheet/issue-row.tsx | 13 ++-- apps/web/core/components/issues/label.tsx | 11 ++- .../components/issues/peek-overview/error.tsx | 4 +- .../issues/peek-overview/header.tsx | 10 +-- .../issues/peek-overview/loader.tsx | 4 +- .../issues/relations/issue-list-item.tsx | 4 +- .../workspace-draft/draft-issue-block.tsx | 4 +- .../components/modules/gantt-chart/blocks.tsx | 14 ++-- .../components/modules/links/list-item.tsx | 4 +- .../components/modules/module-card-item.tsx | 6 +- .../modules/module-list-item-action.tsx | 4 +- .../components/modules/module-view-header.tsx | 4 +- .../navigation/project-header-button.tsx | 4 +- .../tab-navigation-overflow-menu.tsx | 4 +- .../navigation/top-navigation-root.tsx | 4 +- .../web/core/components/onboarding/header.tsx | 4 +- .../pages/editor/ai/ask-pi-menu.tsx | 6 +- .../core/components/pages/editor/ai/menu.tsx | 6 +- .../components/pages/editor/toolbar/root.tsx | 4 +- .../pages/editor/toolbar/toolbar.tsx | 11 +-- .../pages/header/copy-link-control.tsx | 4 +- .../components/pages/header/lock-control.tsx | 4 +- .../components/pages/header/offline-badge.tsx | 6 +- .../components/pages/header/syncing-badge.tsx | 12 ++-- .../pages/list/block-item-action.tsx | 8 +-- .../components/pages/navigation-pane/root.tsx | 4 +- apps/web/core/components/profile/sidebar.tsx | 4 +- .../project-states/options/delete.tsx | 9 ++- .../project/applied-filters/root.tsx | 11 +-- apps/web/core/components/project/card.tsx | 11 ++- .../project/create/common-attributes.tsx | 11 +-- apps/web/core/components/project/form.tsx | 11 +-- .../project/settings/features-list.tsx | 4 +- apps/web/core/components/readonly/labels.tsx | 10 ++- .../rich-filters/filter-item/container.tsx | 6 +- .../rich-filters/filter-item/property.tsx | 6 +- .../rich-filters/filter-item/root.tsx | 2 +- .../core/components/stickies/action-bar.tsx | 71 ++++++++++--------- apps/web/core/components/ui/labels-list.tsx | 9 +-- .../views/view-list-item-action.tsx | 4 +- .../components/web-hooks/form/secret-key.tsx | 4 +- .../sidebar/filters/menu/root.tsx | 4 +- .../sidebar/header/options/root.tsx | 6 +- .../notification-card/options/button.tsx | 4 +- .../notification-card/options/snooze/root.tsx | 6 +- .../components/workspace/edition-badge.tsx | 4 +- .../sidebar/extended-sidebar-item.tsx | 13 ++-- .../sidebar/favorites/favorite-folder.tsx | 13 ++-- .../common/favorite-item-drag-handle.tsx | 9 ++- .../common/favorite-item-title.tsx | 4 +- .../sidebar/favorites/favorites-menu.tsx | 4 +- .../workspace/sidebar/projects-list-item.tsx | 11 ++- .../workspace/sidebar/projects-list.tsx | 4 +- .../layouts/auth-layout/workspace-wrapper.tsx | 4 +- 109 files changed, 392 insertions(+), 560 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx index caa9156a78c..e09eb123eb8 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx @@ -13,7 +13,7 @@ import { useTranslation } from "@plane/i18n"; import { EmptyStateCompact } from "@plane/propel/empty-state"; import { PlusIcon, SearchIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { copyUrlToClipboard, orderJoinedProjects } from "@plane/utils"; // components import { CreateProjectModal } from "@/components/project/create-project-modal"; @@ -114,7 +114,7 @@ export const ExtendedProjectSidebar = observer(function ExtendedProjectSidebar()
Projects {isAuthorizedUser && ( - +
- +

{projectDetails?.name}

diff --git a/apps/web/core/components/api-token/modal/generated-token-details.tsx b/apps/web/core/components/api-token/modal/generated-token-details.tsx index aad163191f8..8b13f47dc72 100644 --- a/apps/web/core/components/api-token/modal/generated-token-details.tsx +++ b/apps/web/core/components/api-token/modal/generated-token-details.tsx @@ -8,7 +8,7 @@ import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { CopyIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IApiToken } from "@plane/types"; // ui import { renderFormattedDate, renderFormattedTime, copyTextToClipboard } from "@plane/utils"; @@ -48,7 +48,7 @@ export function GeneratedTokenDetails(props: Props) { className="mt-4 flex w-full items-center justify-between truncate rounded-md border-[0.5px] border-subtle px-3 py-2 text-13 font-medium outline-none" > {tokenDetails.token} - + diff --git a/apps/web/core/components/api-token/token-list-item.tsx b/apps/web/core/components/api-token/token-list-item.tsx index 2fa1c4ba96c..ade19e21e14 100644 --- a/apps/web/core/components/api-token/token-list-item.tsx +++ b/apps/web/core/components/api-token/token-list-item.tsx @@ -7,7 +7,7 @@ import { useState } from "react"; import { XCircle } from "lucide-react"; // plane imports -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IApiToken } from "@plane/types"; import { renderFormattedDate, calculateTimeAgo, renderFormattedTime } from "@plane/utils"; // components @@ -30,7 +30,7 @@ export function ApiTokenListItem(props: Props) { <> setDeleteModalOpen(false)} tokenId={token.id} />
- +
{calculateTimeAgo(activity.created_at)} diff --git a/apps/web/core/components/core/activity.tsx b/apps/web/core/components/core/activity.tsx index cfda5937ac0..2b9b054718c 100644 --- a/apps/web/core/components/core/activity.tsx +++ b/apps/web/core/components/core/activity.tsx @@ -33,7 +33,7 @@ import { RelatedIcon, WorkItemsIcon, } from "@plane/propel/icons"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IIssueActivity } from "@plane/types"; import { renderFormattedDate, generateWorkItemLink, capitalizeFirstLetter } from "@plane/utils"; // helpers @@ -56,8 +56,9 @@ export function IssueLink({ activity }: { activity: IIssueActivity }) { return ( {activity?.issue_detail ? ( - +
diff --git a/apps/web/core/components/core/list/list-item.tsx b/apps/web/core/components/core/list/list-item.tsx index 44d3a864152..49b49e8167f 100644 --- a/apps/web/core/components/core/list/list-item.tsx +++ b/apps/web/core/components/core/list/list-item.tsx @@ -6,7 +6,7 @@ import React from "react"; // ui -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { ControlLink, Row } from "@plane/ui"; // helpers import { cn } from "@plane/utils"; @@ -86,7 +86,7 @@ export function ListItem(props: IListItemProps) { >
{prependTitleElement && {prependTitleElement}} - + {title}
diff --git a/apps/web/core/components/core/modals/existing-issues-list-modal.tsx b/apps/web/core/components/core/modals/existing-issues-list-modal.tsx index 646ce6c359a..b67632d3c62 100644 --- a/apps/web/core/components/core/modals/existing-issues-list-modal.tsx +++ b/apps/web/core/components/core/modals/existing-issues-list-modal.tsx @@ -13,7 +13,7 @@ import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { SearchIcon, CloseIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { ISearchIssueResponse, TProjectIssuesSearchParams } from "@plane/types"; // ui import { Switch } from "@makeplane/propel/components/switch"; @@ -193,7 +193,7 @@ export function ExistingIssuesListModal(props: Props) {
)} {workspaceLevelToggle && ( - +
- + {issue.name}
@@ -223,10 +223,7 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active showTooltip /> {issue.target_date && ( - +
diff --git a/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx index 05cdb8ebbb5..7c48a7d3d7a 100644 --- a/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx @@ -7,7 +7,6 @@ import { useEffect } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; -import { ArrowRight } from "lucide-react"; // Plane Imports import { CYCLE_STATUS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; @@ -176,13 +175,9 @@ export const CycleSidebarHeader = observer(function CycleSidebarHeader(props: Pr to: t("project_cycles.end_date"), }} customTooltipHeading={t("project_cycles.in_your_timezone")} - customTooltipContent={ - - {renderFormattedDateInUserTimezone(cycleDetails.start_date ?? "")} - - {renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")} - - } + customTooltipContent={`${renderFormattedDateInUserTimezone( + cycleDetails.start_date ?? "" + )} → ${renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")}`} mergeDates showTooltip={!!cycleDetails.start_date && !!cycleDetails.end_date} // show tooltip only if both start and end date are present required={cycleDetails.status !== "draft"} diff --git a/apps/web/core/components/cycles/list/cycle-list-item-action.tsx b/apps/web/core/components/cycles/list/cycle-list-item-action.tsx index ad43d4a960a..fa65048d01a 100644 --- a/apps/web/core/components/cycles/list/cycle-list-item-action.tsx +++ b/apps/web/core/components/cycles/list/cycle-list-item-action.tsx @@ -9,14 +9,14 @@ import React, { useEffect, useMemo, useState } from "react"; import { observer } from "mobx-react"; import { useParams, usePathname, useSearchParams } from "next/navigation"; import { useForm } from "react-hook-form"; -import { Eye, ArrowRight, CalendarDays } from "lucide-react"; +import { Eye, CalendarDays } from "lucide-react"; // plane imports import { EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants"; import { useLocalStorage } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; import { TransferIcon, WorkItemsIcon, MembersPropertyIcon } from "@plane/propel/icons"; import { setPromiseToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { ICycle, TCycleGroups } from "@plane/types"; import { Avatar, AvatarGroup, FavoriteStar } from "@plane/ui"; import { getDate, getFileURL, generateQueryParams } from "@plane/utils"; @@ -208,15 +208,11 @@ export const CycleListItemAction = observer(function CycleListItemAction(props:
{/* Duration */} - {renderFormattedDateInUserTimezone(cycleDetails.start_date ?? "")} - - {renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")} - - } + label={`${t("project_cycles.in_your_timezone")}: ${renderFormattedDateInUserTimezone( + cycleDetails.start_date ?? "" + )} → ${renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")}`} + layout="stacked" disabled={!isProjectTimeZoneDifferent()} - tooltipHeading={t("project_cycles.in_your_timezone")} >
@@ -250,13 +246,9 @@ export const CycleListItemAction = observer(function CycleListItemAction(props: }} showTooltip={isProjectTimeZoneDifferent()} customTooltipHeading={t("project_cycles.in_your_timezone")} - customTooltipContent={ - - {renderFormattedDateInUserTimezone(cycleDetails.start_date ?? "")} - - {renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")} - - } + customTooltipContent={`${renderFormattedDateInUserTimezone( + cycleDetails.start_date ?? "" + )} → ${renderFormattedDateInUserTimezone(cycleDetails.end_date ?? "")}`} mergeDates required={cycleDetails.status !== "draft"} disabled @@ -271,7 +263,7 @@ export const CycleListItemAction = observer(function CycleListItemAction(props: {/* created by */} {createdByDetails && !isActive && } {!isActive && ( - +
{cycleDetails.assignee_ids && cycleDetails.assignee_ids?.length > 0 ? ( diff --git a/apps/web/core/components/dropdowns/buttons.tsx b/apps/web/core/components/dropdowns/buttons.tsx index dbee6ab0b47..6bd59d701e2 100644 --- a/apps/web/core/components/dropdowns/buttons.tsx +++ b/apps/web/core/components/dropdowns/buttons.tsx @@ -7,7 +7,7 @@ import React from "react"; // helpers import { Button } from "@plane/propel/button"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { cn } from "@plane/utils"; // types import { usePlatformOS } from "@/hooks/use-platform-os"; @@ -18,7 +18,7 @@ export type DropdownButtonProps = { children: React.ReactNode; className?: string; isActive: boolean; - tooltipContent?: string | React.ReactNode | null; + tooltipContent?: string; tooltipHeading: string; showTooltip: boolean; variant: TButtonVariants; @@ -29,7 +29,7 @@ type ButtonProps = { children: React.ReactNode; className?: string; isActive: boolean; - tooltipContent?: string | React.ReactNode | null; + tooltipContent?: string; tooltipHeading: string; showTooltip: boolean; renderToolTipByDefault?: boolean; @@ -67,16 +67,14 @@ export function DropdownButton(props: DropdownButtonProps) { } function BorderButton(props: ButtonProps) { - const { children, className, isActive, tooltipContent, renderToolTipByDefault, tooltipHeading, showTooltip } = props; + const { children, className, isActive, tooltipContent, tooltipHeading, showTooltip } = props; const { isMobile } = usePlatformOS(); return ( {tooltipContent}} - disabled={!showTooltip} - isMobile={isMobile} - renderByDefault={renderToolTipByDefault} + label={tooltipContent ? `${tooltipHeading}: ${tooltipContent}` : tooltipHeading} + layout="stacked" + disabled={!showTooltip || isMobile} > @@ -88,15 +82,7 @@ export function StickyEditorToolbar(props: Props) { const isItemActive = activeStates[item.renderKey]; return ( - - {item.name} - {item.shortcut && {item.shortcut.join(" + ")}} -

- } - > +
{/* delete action */} - - Delete -

- } - > + diff --git a/apps/web/core/components/estimates/create/stage-one.tsx b/apps/web/core/components/estimates/create/stage-one.tsx index d3988da2898..c3f4dd6b5ef 100644 --- a/apps/web/core/components/estimates/create/stage-one.tsx +++ b/apps/web/core/components/estimates/create/stage-one.tsx @@ -8,7 +8,7 @@ import { Info } from "lucide-react"; // plane imports import { EEstimateSystem, ESTIMATE_SYSTEMS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TEstimateSystemKeys } from "@plane/types"; // helpers import { isEstimateSystemEnabled } from "./helper"; @@ -45,7 +45,7 @@ export function EstimateCreateStageOne(props: TEstimateCreateStageOne) { label: !ESTIMATE_SYSTEMS[currentSystem]?.is_available ? (
{t(ESTIMATE_SYSTEMS[currentSystem]?.i18n_name)} - +
diff --git a/apps/web/core/components/estimates/points/create.tsx b/apps/web/core/components/estimates/points/create.tsx index 50aced9cd56..7b4fc2cecb8 100644 --- a/apps/web/core/components/estimates/points/create.tsx +++ b/apps/web/core/components/estimates/points/create.tsx @@ -12,7 +12,7 @@ import { EEstimateSystem, MAX_ESTIMATE_POINT_INPUT_LENGTH } from "@plane/constan import { useTranslation } from "@plane/i18n"; import { CheckIcon, CloseIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeErrorObject } from "@plane/types"; import { Spinner } from "@plane/ui"; import { cn, isEstimatePointValuesRepeated } from "@plane/utils"; @@ -180,7 +180,7 @@ export const EstimatePointCreate = observer(function EstimatePointCreate(props: value={estimateInputValue} /> {estimatePointError?.message && ( - +
diff --git a/apps/web/core/components/estimates/points/update.tsx b/apps/web/core/components/estimates/points/update.tsx index e4fdc639cbc..3a451e60690 100644 --- a/apps/web/core/components/estimates/points/update.tsx +++ b/apps/web/core/components/estimates/points/update.tsx @@ -12,7 +12,7 @@ import { EEstimateSystem, MAX_ESTIMATE_POINT_INPUT_LENGTH } from "@plane/constan import { useTranslation } from "@plane/i18n"; import { CheckIcon, CloseIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeErrorObject } from "@plane/types"; import { Spinner } from "@plane/ui"; import { cn, isEstimatePointValuesRepeated } from "@plane/utils"; @@ -187,12 +187,13 @@ export const EstimatePointUpdate = observer(function EstimatePointUpdate(props: {estimatePointError?.message && ( <> = 1 ? t("project_settings.estimates.validation.unsaved_changes") : estimatePointError?.message } - position="bottom" + layout="stacked" + side="bottom" >
diff --git a/apps/web/core/components/exporter/export-form.tsx b/apps/web/core/components/exporter/export-form.tsx index 8fde52e1bf0..da05c85c2b8 100644 --- a/apps/web/core/components/exporter/export-form.tsx +++ b/apps/web/core/components/exporter/export-form.tsx @@ -18,7 +18,7 @@ import { import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -// import { Tooltip } from "@plane/propel/tooltip"; +// import { Tooltip } from "@makeplane/propel/components/tooltip"; // import { EIssuesStoreType } from "@plane/types"; import type { TWorkItemFilterExpression } from "@plane/types"; import { CustomSearchSelect, CustomSelect } from "@plane/ui"; @@ -217,17 +217,7 @@ export const ExportForm = observer(function ExportForm(props: Props) { {/*
{t("common.filters")}
- -
- -
- {t("workspace_settings.settings.exports.filters_info")} -
- } - position="top" - > + diff --git a/apps/web/core/components/gantt-chart/helpers/add-block.tsx b/apps/web/core/components/gantt-chart/helpers/add-block.tsx index b7b94fa9803..db865cd116b 100644 --- a/apps/web/core/components/gantt-chart/helpers/add-block.tsx +++ b/apps/web/core/components/gantt-chart/helpers/add-block.tsx @@ -9,7 +9,7 @@ import { addDays } from "date-fns"; import { observer } from "mobx-react"; import { PlusIcon } from "@plane/propel/icons"; // ui -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IBlockUpdateData, IGanttBlock } from "@plane/types"; // helpers import { renderFormattedDate, renderFormattedPayloadDate } from "@plane/utils"; @@ -88,7 +88,7 @@ export const ChartAddBlock = observer(function ChartAddBlock(props: Props) { >
{isButtonVisible && ( - +
- + {truncateText(`${fileName}`, 10)} diff --git a/apps/web/core/components/issues/attachment/attachment-list-item.tsx b/apps/web/core/components/issues/attachment/attachment-list-item.tsx index 6c8135d6264..ed7319a6b8b 100644 --- a/apps/web/core/components/issues/attachment/attachment-list-item.tsx +++ b/apps/web/core/components/issues/attachment/attachment-list-item.tsx @@ -8,7 +8,7 @@ import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { TrashIcon } from "@plane/propel/icons"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssueServiceType } from "@plane/types"; import { EIssueServiceType } from "@plane/types"; // ui @@ -63,7 +63,7 @@ export const IssueAttachmentsListItem = observer(function IssueAttachmentsListIt
{fileIcon}
- +

{`${fileName}.${fileExtension}`}

@@ -74,10 +74,11 @@ export const IssueAttachmentsListItem = observer(function IssueAttachmentsListIt {attachment?.created_by && ( <>
diff --git a/apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx b/apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx index 1d88376e5fa..629f8570cb1 100644 --- a/apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx +++ b/apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx @@ -7,7 +7,7 @@ import { observer } from "mobx-react"; // ui import { CircularProgress } from "@makeplane/propel/components/circular-progress"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; // components import { getFileExtension } from "@plane/utils"; import { getFileIcon } from "@/components/icons"; @@ -35,7 +35,7 @@ export const IssueAttachmentsUploadItem = observer(function IssueAttachmentsUplo
{fileIcon}
- +

{fileName}

diff --git a/apps/web/core/components/issues/attachment/attachment-upload-details.tsx b/apps/web/core/components/issues/attachment/attachment-upload-details.tsx index 348a5327a63..1b675072a4f 100644 --- a/apps/web/core/components/issues/attachment/attachment-upload-details.tsx +++ b/apps/web/core/components/issues/attachment/attachment-upload-details.tsx @@ -6,7 +6,7 @@ import { observer } from "mobx-react"; import { CircularProgress } from "@makeplane/propel/components/circular-progress"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { getFileExtension, truncateText } from "@plane/utils"; // ui // icons @@ -37,7 +37,7 @@ export const IssueAttachmentsUploadDetails = observer(function IssueAttachmentsU
{fileIcon}
- + {truncateText(`${fileName}`, 10)}
diff --git a/apps/web/core/components/issues/header.tsx b/apps/web/core/components/issues/header.tsx index b032f11c115..aff203e03a0 100644 --- a/apps/web/core/components/issues/header.tsx +++ b/apps/web/core/components/issues/header.tsx @@ -13,7 +13,7 @@ import { EUserPermissions, EUserPermissionsLevel, SPACE_BASE_PATH, SPACE_BASE_UR 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 { Tooltip } from "@makeplane/propel/components/tooltip"; import { EIssuesStoreType } from "@plane/types"; import { Breadcrumbs, Header } from "@plane/ui"; // components @@ -80,9 +80,10 @@ export const IssuesHeader = observer(function IssuesHeader() { {issuesCount && issuesCount > 0 ? ( 1 ? "work items" : "work item"} in this project`} - position="bottom" + label={`There are ${issuesCount} ${issuesCount > 1 ? "work items" : "work item"} in this project`} + layout="stacked" + side="bottom" + disabled={isMobile} > diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx index e1c70a5fd0b..d4df90d71ea 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx @@ -9,7 +9,7 @@ import { Link as Loader } from "lucide-react"; import { useTranslation } from "@plane/i18n"; import { LinkIcon, EditIcon, TrashIcon, CloseIcon, ChevronRightIcon } from "@plane/propel/icons"; // plane imports -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; import { EIssueServiceType, EIssuesStoreType } from "@plane/types"; import { ControlLink, CustomMenu } from "@plane/ui"; @@ -165,7 +165,7 @@ export const SubIssuesListItem = observer(function SubIssuesListItem(props: Prop )}
- + {issue.name}
diff --git a/apps/web/core/components/issues/issue-detail/identifier-text.tsx b/apps/web/core/components/issues/issue-detail/identifier-text.tsx index a3a19fee3c3..25945c4130b 100644 --- a/apps/web/core/components/issues/issue-detail/identifier-text.tsx +++ b/apps/web/core/components/issues/issue-detail/identifier-text.tsx @@ -5,7 +5,7 @@ */ import { setToast, TOAST_TYPE } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIdentifierTextProps, TIdentifierTextVariant, TIssueIdentifierSize } from "@plane/types"; import { cn } from "@plane/utils"; @@ -49,7 +49,7 @@ export function IdentifierText(props: TIdentifierTextProps) { const variantClassName = VARIANT_MAP[variant]; return ( - +
diff --git a/apps/web/core/components/issues/issue-layouts/kanban/block.tsx b/apps/web/core/components/issues/issue-layouts/kanban/block.tsx index 57b550afef3..046879b6747 100644 --- a/apps/web/core/components/issues/issue-layouts/kanban/block.tsx +++ b/apps/web/core/components/issues/issue-layouts/kanban/block.tsx @@ -15,7 +15,7 @@ import { MoreHorizontal } from "lucide-react"; import { useOutsideClickDetector } from "@plane/hooks"; // types import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssue, IIssueDisplayProperties, IIssueMap } from "@plane/types"; import { EIssueServiceType } from "@plane/types"; // ui @@ -120,7 +120,7 @@ const KanbanIssueDetailsBlock = observer(function KanbanIssueDetailsBlock(props:
- +
{issue.name}
diff --git a/apps/web/core/components/issues/issue-layouts/list/block.tsx b/apps/web/core/components/issues/issue-layouts/list/block.tsx index 1c6fa4bcb48..aea5a059730 100644 --- a/apps/web/core/components/issues/issue-layouts/list/block.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/block.tsx @@ -13,7 +13,7 @@ import { useParams } from "next/navigation"; import { ChevronRightIcon } from "@plane/propel/icons"; // types import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssue, IIssueDisplayProperties, TIssueMap } from "@plane/types"; import { EIssueServiceType } from "@plane/types"; // ui @@ -208,13 +208,8 @@ export const IssueBlock = observer(function IssueBlock(props: IssueBlockProps) { {/* select checkbox */} {projectId && canSelectIssues && !isEpic && ( - Only work items within the current -
- project can be selected. - - } + label="Only work items within the current project can be selected." + layout="stacked" disabled={issue.project_id === projectId} >
@@ -270,13 +265,7 @@ export const IssueBlock = observer(function IssueBlock(props: IssueBlockProps) { )}
- +

{issue.name}

diff --git a/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx b/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx index cd2ffbffc57..8e5222bb6b6 100644 --- a/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx +++ b/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx @@ -14,7 +14,7 @@ import { Paperclip } from "lucide-react"; // i18n import { useTranslation } from "@plane/i18n"; import { LinkIcon, StartDatePropertyIcon, ViewsIcon, DueDatePropertyIcon } from "@plane/propel/icons"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssue, IIssueDisplayProperties, TIssuePriorities } from "@plane/types"; // ui import { @@ -410,12 +410,7 @@ export const IssueProperties = observer(function IssueProperties(props: IIssuePr displayPropertyKey="sub_issue_count" shouldRenderProperty={(properties) => !!properties.sub_issue_count && !!subIssueCount} > - + {/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
!!properties.attachment_count && !!issue.attachment_count} > - + {/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
!!properties.link && !!issue.link_count} > - + {/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
+
value.includes(l?.id)) - .map((l) => l?.name) - .join(", ")} - renderByDefault={false} + label={`${t("common.labels")}: ${ + projectLabels + ?.filter((l) => value.includes(l?.id)) + .map((l) => l?.name) + .join(", ") ?? "" + }`} + layout="stacked" + disabled={isMobile} >
@@ -122,24 +116,11 @@ type LabelItemProps = { noLabelBorder: boolean; }; -const LabelItem = observer(function LabelItem({ - label, - isMobile, - renderByDefault, - disabled, - fullWidth, - noLabelBorder, -}: LabelItemProps) { +const LabelItem = observer(function LabelItem({ label, isMobile, disabled, fullWidth, noLabelBorder }: LabelItemProps) { const { t } = useTranslation(); return ( - +
- Only work items within the current -
- project can be selected. - - } + label="Only work items within the current project can be selected." + layout="stacked" disabled={issueDetail.project_id === projectId} >
@@ -358,7 +353,7 @@ const IssueRowDetails = observer(function IssueRowDetails(props: IssueRowDetails
- +
- +
l.name).join(", ")} - isMobile={isMobile} + label={`Labels: ${labelDetails.map((l) => l.name).join(", ")}`} + layout="stacked" + disabled={isMobile} >
diff --git a/apps/web/core/components/issues/peek-overview/error.tsx b/apps/web/core/components/issues/peek-overview/error.tsx index 3d033598337..a494ce977f1 100644 --- a/apps/web/core/components/issues/peek-overview/error.tsx +++ b/apps/web/core/components/issues/peek-overview/error.tsx @@ -5,7 +5,7 @@ */ import { MoveRight } from "lucide-react"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; // assets import emptyIssue from "@/app/assets/empty-state/issue.svg?url"; // components @@ -25,7 +25,7 @@ export function IssuePeekOverviewError(props: TIssuePeekOverviewError) { return (
- + diff --git a/apps/web/core/components/issues/peek-overview/header.tsx b/apps/web/core/components/issues/peek-overview/header.tsx index fb91acd6ca5..5e3855bce27 100644 --- a/apps/web/core/components/issues/peek-overview/header.tsx +++ b/apps/web/core/components/issues/peek-overview/header.tsx @@ -12,7 +12,7 @@ import { MoveDiagonal, MoveRight } from "lucide-react"; import { useTranslation } from "@plane/i18n"; import { CenterPanelIcon, CopyLinkIcon, FullScreenPanelIcon, SidePanelIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TNameDescriptionLoader } from "@plane/types"; import { EIssuesStoreType } from "@plane/types"; import { CustomSelect } from "@plane/ui"; @@ -159,13 +159,13 @@ export const IssuePeekOverviewHeader = observer(function IssuePeekOverviewHeader }`} >
- + - + removeRoutePeekId()}> @@ -176,7 +176,7 @@ export const IssuePeekOverviewHeader = observer(function IssuePeekOverviewHeader value={currentMode} onChange={(val: any) => setPeekMode(val)} customButton={ - + @@ -205,7 +205,7 @@ export const IssuePeekOverviewHeader = observer(function IssuePeekOverviewHeader {currentUser && !isArchived && ( )} - + {issueDetails && ( diff --git a/apps/web/core/components/issues/peek-overview/loader.tsx b/apps/web/core/components/issues/peek-overview/loader.tsx index 701f72844e6..31ede6415f5 100644 --- a/apps/web/core/components/issues/peek-overview/loader.tsx +++ b/apps/web/core/components/issues/peek-overview/loader.tsx @@ -5,7 +5,7 @@ */ import { MoveRight } from "lucide-react"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { Loader } from "@plane/ui"; // hooks import { usePlatformOS } from "@/hooks/use-platform-os"; @@ -23,7 +23,7 @@ export function IssuePeekOverviewLoader(props: TIssuePeekOverviewLoader) {
- + diff --git a/apps/web/core/components/issues/relations/issue-list-item.tsx b/apps/web/core/components/issues/relations/issue-list-item.tsx index 2226dc7b3d4..15b1a4e79d0 100644 --- a/apps/web/core/components/issues/relations/issue-list-item.tsx +++ b/apps/web/core/components/issues/relations/issue-list-item.tsx @@ -9,7 +9,7 @@ import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { LinkIcon, EditIcon, TrashIcon, CloseIcon } from "@plane/propel/icons"; // plane imports -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TIssueRelationTypes } from "@plane/types"; import type { TIssue, TIssueServiceType } from "@plane/types"; import { EIssueServiceType } from "@plane/types"; @@ -144,7 +144,7 @@ export const RelationIssueListItem = observer(function RelationIssueListItem(pro )}
- + {issue.name}
diff --git a/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx index 90d033711ea..23288a6bd23 100644 --- a/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx +++ b/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { SquareStackIcon } from "lucide-react"; import { CopyIcon, EditIcon, TrashIcon } from "@plane/propel/icons"; // plane utils -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TWorkspaceDraftIssue } from "@plane/types"; import { EIssuesStoreType } from "@plane/types"; import type { TContextMenuItem } from "@plane/ui"; @@ -160,7 +160,7 @@ export const DraftIssueBlock = observer(function DraftIssueBlock(props: Props) {
- +

{issue.name}

diff --git a/apps/web/core/components/modules/gantt-chart/blocks.tsx b/apps/web/core/components/modules/gantt-chart/blocks.tsx index f3fdd5f580a..9a7b4b8679c 100644 --- a/apps/web/core/components/modules/gantt-chart/blocks.tsx +++ b/apps/web/core/components/modules/gantt-chart/blocks.tsx @@ -10,7 +10,7 @@ import { useParams } from "next/navigation"; // ui import { MODULE_STATUS } from "@plane/constants"; import { ModuleStatusIcon } from "@plane/propel/icons"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; // components import { SIDEBAR_WIDTH } from "@/components/gantt-chart/constants"; import { getBlockViewDetails } from "@/components/issues/issue-layouts/utils"; @@ -43,14 +43,10 @@ export const ModuleGanttBlock = observer(function ModuleGanttBlock(props: Props) return ( -
{moduleDetails?.name}
-
{message}
-
- } - position="top-start" + label={moduleDetails?.name ? `${moduleDetails.name}: ${message ?? ""}` : (message ?? "")} + layout="stacked" + align="start" + disabled={isMobile} >
- + {link.title && link.title !== "" ? link.title : link.url} diff --git a/apps/web/core/components/modules/module-card-item.tsx b/apps/web/core/components/modules/module-card-item.tsx index b4526f6746a..fa49471f530 100644 --- a/apps/web/core/components/modules/module-card-item.tsx +++ b/apps/web/core/components/modules/module-card-item.tsx @@ -16,7 +16,7 @@ import { useLocalStorage } from "@plane/hooks"; import { LinearProgress } from "@makeplane/propel/components/linear-progress"; import { WorkItemsIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IModule } from "@plane/types"; import { Card, FavoriteStar } from "@plane/ui"; import { getDate, renderFormattedPayloadDate, generateQueryParams } from "@plane/utils"; @@ -178,7 +178,7 @@ export const ModuleCardItem = observer(function ModuleCardItem(props: Props) {
- + {moduleDetails.name}
@@ -206,7 +206,7 @@ export const ModuleCardItem = observer(function ModuleCardItem(props: Props) { ) : ( - + )} diff --git a/apps/web/core/components/modules/module-list-item-action.tsx b/apps/web/core/components/modules/module-list-item-action.tsx index eef59568d4a..c4874385ebc 100644 --- a/apps/web/core/components/modules/module-list-item-action.tsx +++ b/apps/web/core/components/modules/module-list-item-action.tsx @@ -13,7 +13,7 @@ import { MODULE_STATUS, EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MEN import { useLocalStorage } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/propel/toast"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { IModule } from "@plane/types"; import { FavoriteStar } from "@plane/ui"; import { renderFormattedPayloadDate, getDate } from "@plane/utils"; @@ -166,7 +166,7 @@ export const ModuleListItemAction = observer(function ModuleListItemAction(props ) : ( - + )} diff --git a/apps/web/core/components/modules/module-view-header.tsx b/apps/web/core/components/modules/module-view-header.tsx index 916bfe95b6a..e911efc36b7 100644 --- a/apps/web/core/components/modules/module-view-header.tsx +++ b/apps/web/core/components/modules/module-view-header.tsx @@ -14,7 +14,7 @@ import { useOutsideClickDetector } from "@plane/hooks"; // types import { useTranslation } from "@plane/i18n"; import { SearchIcon, CloseIcon } from "@plane/propel/icons"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import type { TModuleFilters } from "@plane/types"; // ui import { cn, calculateTotalFilters } from "@plane/utils"; @@ -172,7 +172,7 @@ export const ModuleViewHeader = observer(function ModuleViewHeader() {
{MODULE_VIEW_LAYOUTS.map((layout) => ( - + )} - +
{/* Additional Actions */}
- +
- +
Replace selection - + - + - + - + + ); + return (
- + - {recentStickyId && ( - - -
-
- } - isMobile={false} - position="left" - disabled={showRecentSticky} - > - -
- )} - + {recentStickyId && + (showRecentSticky ? ( + recentStickyButton + ) : ( + + + +
+ +
+
+ + + ))} + diff --git a/apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx index 12e8ada0556..13279ca4f5e 100644 --- a/apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx +++ b/apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx @@ -10,7 +10,7 @@ import { ListFilter } from "lucide-react"; import type { ENotificationFilterType } from "@plane/constants"; import { FILTER_TYPE_OPTIONS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { PopoverMenu } from "@plane/ui"; // hooks import { usePlatformOS } from "@/hooks/use-platform-os"; @@ -32,7 +32,7 @@ export const NotificationFilter = observer(function NotificationFilter() { + } diff --git a/apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx index 83446a20c57..328099054c9 100644 --- a/apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx +++ b/apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx @@ -9,7 +9,7 @@ import { CheckCheck, RefreshCw } from "lucide-react"; // plane imports import { ENotificationLoader, ENotificationQueryParamType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Tooltip } from "@plane/propel/tooltip"; +import { Tooltip } from "@makeplane/propel/components/tooltip"; import { Spinner } from "@plane/ui"; // hooks import { useWorkspaceNotifications } from "@/hooks/store/notifications"; @@ -54,7 +54,7 @@ export const NotificationSidebarHeaderOptions = observer(function NotificationSi return (
{/* mark all notifications as read*/} - + {/* refetch current notifications */} - + +
<> - +
- - ))} + {ISSUE_LAYOUTS.map((layout) => { + if (!layouts.includes(layout.key)) return null; + return ( + + + + ); + })}
); } diff --git a/apps/web/core/components/issues/issue-layouts/properties/labels.tsx b/apps/web/core/components/issues/issue-layouts/properties/labels.tsx index a6607288ada..91ad08b057b 100644 --- a/apps/web/core/components/issues/issue-layouts/properties/labels.tsx +++ b/apps/web/core/components/issues/issue-layouts/properties/labels.tsx @@ -79,6 +79,11 @@ type LabelSummaryProps = { function LabelSummary({ isMobile, fullWidth, noLabelBorder, disabled, projectLabels, value }: LabelSummaryProps) { const { t } = useTranslation(); + // single pass: collect the selected label names instead of filter -> map -> join + const selectedLabelNames = projectLabels.reduce((names, label) => { + if (value.includes(label?.id)) names.push(label?.name); + return names; + }, []); return (
- value.includes(l?.id)) - .map((l) => l?.name) - .join(", ") ?? "" - }`} - layout="stacked" - disabled={isMobile} - > +
{`${value.length} Labels`} diff --git a/apps/web/core/components/pages/header/syncing-badge.tsx b/apps/web/core/components/pages/header/syncing-badge.tsx index 428e067f95a..f84648f7fb6 100644 --- a/apps/web/core/components/pages/header/syncing-badge.tsx +++ b/apps/web/core/components/pages/header/syncing-badge.tsx @@ -13,6 +13,18 @@ type Props = { syncStatus: "syncing" | "synced" | "error"; }; +const BADGE_CONTENT = { + syncing: { + label: "Syncing...", + tooltipLabel: "Syncing... Your changes are being synced with the server. You can continue making changes.", + }, + error: { + label: "Connection lost", + tooltipLabel: + "Connection lost. We're having trouble connecting to the websocket server. Your changes will be synced and saved every 10 seconds.", + }, +}; + export function PageSyncingBadge({ syncStatus }: Props) { const [prevSyncStatus, setPrevSyncStatus] = useState<"syncing" | "synced" | "error" | null>(null); const [isVisible, setIsVisible] = useState(syncStatus !== "synced"); @@ -34,20 +46,8 @@ export function PageSyncingBadge({ syncStatus }: Props) { if (!isVisible || syncStatus === "synced") return null; - const badgeContent = { - syncing: { - label: "Syncing...", - tooltipLabel: "Syncing... Your changes are being synced with the server. You can continue making changes.", - }, - error: { - label: "Connection lost", - tooltipLabel: - "Connection lost. We're having trouble connecting to the websocket server. Your changes will be synced and saved every 10 seconds.", - }, - }; - - // This way we guarantee badgeContent is defined - const content = badgeContent[syncStatus]; + // The synced early-return above guarantees this key exists + const content = BADGE_CONTENT[syncStatus]; return ( diff --git a/apps/web/core/components/stickies/action-bar.tsx b/apps/web/core/components/stickies/action-bar.tsx index 0d916599851..bc835f9ab84 100644 --- a/apps/web/core/components/stickies/action-bar.tsx +++ b/apps/web/core/components/stickies/action-bar.tsx @@ -91,7 +91,7 @@ export const StickyActionBar = observer(function StickyActionBar() {
(newSticky ? setNewSticky(false) : setShowRecentSticky(false))} workspaceSlug={workspaceSlug.toString()} - stickyId={newSticky ? activeStickyId : recentStickyId || ""} + stickyId={newSticky ? activeStickyId : recentStickyId} /> )}