diff --git a/apps/admin/package.json b/apps/admin/package.json
index 6b96ff28..8ff399fa 100644
--- a/apps/admin/package.json
+++ b/apps/admin/package.json
@@ -1,6 +1,6 @@
{
"name": "admin",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "Admin UI for Pace",
"license": "AGPL-3.0",
diff --git a/apps/space/core/components/account/auth-forms/email.tsx b/apps/space/core/components/account/auth-forms/email.tsx
index 9f2bbe2e..6fc88853 100644
--- a/apps/space/core/components/account/auth-forms/email.tsx
+++ b/apps/space/core/components/account/auth-forms/email.tsx
@@ -13,7 +13,8 @@ import { CloseCircleOutline, WarningCircleOutline } from "@makeplane/propel/icon
import { Button } from "@pace/propel/button";
import type { IEmailCheckData } from "@pace/types";
// ui
-import { Input, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { Input } from "@pace/propel/input";
// helpers
import { cn } from "@pace/utils";
import { checkEmailValidity } from "@/helpers/string.helper";
diff --git a/apps/space/core/components/account/auth-forms/password.tsx b/apps/space/core/components/account/auth-forms/password.tsx
index add7fcc8..388aa4d4 100644
--- a/apps/space/core/components/account/auth-forms/password.tsx
+++ b/apps/space/core/components/account/auth-forms/password.tsx
@@ -11,7 +11,9 @@ import { CloseCircleOutline, HideOutline, ShowOutline } from "@makeplane/propel/
import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@pace/constants";
import { Button } from "@pace/propel/button";
import { AuthService } from "@pace/services";
-import { Input, Spinner, PasswordStrengthIndicator } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { Input } from "@pace/propel/input";
+import { PasswordStrengthIndicator } from "@pace/ui";
import { getPasswordStrength } from "@pace/utils";
// types
import { EAuthModes, EAuthSteps } from "@/types/auth";
diff --git a/apps/space/core/components/account/auth-forms/unique-code.tsx b/apps/space/core/components/account/auth-forms/unique-code.tsx
index e10f869e..1ec7f63c 100644
--- a/apps/space/core/components/account/auth-forms/unique-code.tsx
+++ b/apps/space/core/components/account/auth-forms/unique-code.tsx
@@ -10,7 +10,8 @@ import { CloseCircleOutline, TickCircleOutline } from "@makeplane/propel/icons";
import { API_BASE_URL } from "@pace/constants";
import { Button } from "@pace/propel/button";
import { AuthService } from "@pace/services";
-import { Input, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { Input } from "@pace/propel/input";
// hooks
import { useTimer } from "@pace/hooks";
// types
diff --git a/apps/space/core/components/issues/filters/labels.tsx b/apps/space/core/components/issues/filters/labels.tsx
index 8c8ed7d6..7e6751ca 100644
--- a/apps/space/core/components/issues/filters/labels.tsx
+++ b/apps/space/core/components/issues/filters/labels.tsx
@@ -6,7 +6,7 @@
import React, { useState } from "react";
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// types
import type { IIssueLabel } from "@/types/issue";
// local imports
@@ -76,11 +76,11 @@ export function FilterLabels(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/space/core/components/issues/filters/state.tsx b/apps/space/core/components/issues/filters/state.tsx
index edfbe282..35ad7879 100644
--- a/apps/space/core/components/issues/filters/state.tsx
+++ b/apps/space/core/components/issues/filters/state.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// ui
import { EIconSize } from "@pace/constants";
import { StateGroupIcon } from "@pace/propel/icons";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// hooks
import { useStates } from "@/hooks/store/use-state";
// local imports
@@ -76,11 +76,11 @@ export const FilterState = observer(function FilterState(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/space/core/components/issues/issue-layouts/properties/member.tsx b/apps/space/core/components/issues/issue-layouts/properties/member.tsx
index 0f31d34b..f20d88d6 100644
--- a/apps/space/core/components/issues/issue-layouts/properties/member.tsx
+++ b/apps/space/core/components/issues/issue-layouts/properties/member.tsx
@@ -8,8 +8,7 @@ import { observer } from "mobx-react";
// icons
import type { LucideIcon } from "lucide-react";
import { MembersOutline } from "@makeplane/propel/icons";
-// pace ui
-import { Avatar, AvatarGroup } from "@pace/ui";
+import { Avatar, AvatarGroup } from "@pace/propel/avatar";
// pace utils
import { cn } from "@pace/utils";
// hooks
diff --git a/apps/space/core/components/issues/issue-layouts/utils.tsx b/apps/space/core/components/issues/issue-layouts/utils.tsx
index fd28cec7..4eed7600 100644
--- a/apps/space/core/components/issues/issue-layouts/utils.tsx
+++ b/apps/space/core/components/issues/issue-layouts/utils.tsx
@@ -7,6 +7,7 @@
import { isNil } from "lodash-es";
// types
import { EIconSize, ISSUE_PRIORITIES } from "@pace/constants";
+import { Avatar } from "@pace/propel/avatar";
import { CycleGroupIcon, PriorityIcon, StateGroupIcon } from "@pace/propel/icons";
import { CyclesOutline, ModuleOutline } from "@makeplane/propel/icons";
import type {
@@ -17,7 +18,6 @@ import type {
TGroupedIssues,
} from "@pace/types";
// ui
-import { Avatar } from "@pace/ui";
// components
// constants
// stores
diff --git a/apps/space/core/components/issues/navbar/user-avatar.tsx b/apps/space/core/components/issues/navbar/user-avatar.tsx
index 17cc2a61..a1c809b3 100644
--- a/apps/space/core/components/issues/navbar/user-avatar.tsx
+++ b/apps/space/core/components/issues/navbar/user-avatar.tsx
@@ -13,9 +13,9 @@ import { LogOutOutline } from "@makeplane/propel/icons";
import { Popover, Transition } from "@headlessui/react";
// pace imports
import { API_BASE_URL } from "@pace/constants";
+import { Avatar } from "@pace/propel/avatar";
import { Button } from "@pace/propel/button";
import { AuthService } from "@pace/services";
-import { Avatar } from "@pace/ui";
import { getFileURL } from "@pace/utils";
// helpers
import { queryParamGenerator } from "@/helpers/query-param-generator";
diff --git a/apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx b/apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx
index 2538749c..22e1041e 100644
--- a/apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx
+++ b/apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx
@@ -6,7 +6,7 @@
import { observer } from "mobx-react";
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// types
import type { IIssue } from "@/types/issue";
// local imports
@@ -44,14 +44,14 @@ export const FullScreenPeekView = observer(function FullScreenPeekView(props: Pr
) : (
-
-
+
+
-
-
-
+
+
+
-
+
)}
@@ -60,12 +60,12 @@ export const FullScreenPeekView = observer(function FullScreenPeekView(props: Pr
{issueDetails ? (
) : (
-
-
-
-
-
-
+
+
+
+
+
+
)}
diff --git a/apps/space/core/components/issues/peek-overview/side-peek-view.tsx b/apps/space/core/components/issues/peek-overview/side-peek-view.tsx
index 1feb9a7c..4faf0895 100644
--- a/apps/space/core/components/issues/peek-overview/side-peek-view.tsx
+++ b/apps/space/core/components/issues/peek-overview/side-peek-view.tsx
@@ -6,7 +6,7 @@
import { observer } from "mobx-react";
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// store hooks
import { usePublish } from "@/hooks/store/publish";
// types
@@ -53,14 +53,14 @@ export const SidePeekView = observer(function SidePeekView(props: Props) {
)}
) : (
-
-
+
+
-
-
-
+
+
+
-
+
)}
);
diff --git a/apps/space/package.json b/apps/space/package.json
index 7502b10a..060fbd52 100644
--- a/apps/space/package.json
+++ b/apps/space/package.json
@@ -1,6 +1,6 @@
{
"name": "space",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx
index 04ad07cb..fd402336 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx
@@ -12,7 +12,7 @@ import useSWR from "swr";
import { useTranslation } from "@pace/i18n";
import type { TIssue } from "@pace/types";
import { EIssueServiceType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// assets
import emptyIssueDark from "@/app/assets/empty-state/search/issues-dark.webp?url";
import emptyIssueLight from "@/app/assets/empty-state/search/issues-light.webp?url";
@@ -107,20 +107,20 @@ export const IssueDetailsPage = observer(function IssueDetailsPage({ params }: R
if (issueLoader) {
return (
-
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
);
}
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 81bc4c6c..abee02b0 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
@@ -12,7 +12,7 @@ import { Banner } from "@makeplane/propel/components/banner";
import { ArchiveOutline } from "@makeplane/propel/icons";
import { useTranslation } from "@pace/i18n";
import { Button } from "@pace/propel/button";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { PageHead } from "@/components/core/page-title";
import { IssueDetailRoot } from "@/components/issues/issue-detail";
@@ -53,20 +53,20 @@ function ArchivedIssueDetailsPage({ params }: Route.ComponentProps) {
<>
{issueLoader ? (
-
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
) : (
<>
{count}
) : (
-
+
)}
);
diff --git a/apps/web/core/components/analytics/insight-table/loader.tsx b/apps/web/core/components/analytics/insight-table/loader.tsx
index 8a7f77db..1b787608 100644
--- a/apps/web/core/components/analytics/insight-table/loader.tsx
+++ b/apps/web/core/components/analytics/insight-table/loader.tsx
@@ -7,7 +7,7 @@
import * as React from "react";
import type { ColumnDef } from "@tanstack/react-table";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@pace/propel/table";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
interface TableSkeletonProps {
columns: ColumnDef[];
@@ -31,7 +31,7 @@ export function TableLoader({ columns, rows }: TableSkeletonProps) {
{columns.map((_, colIndex) => (
-
+
))}
diff --git a/apps/web/core/components/analytics/loaders.tsx b/apps/web/core/components/analytics/loaders.tsx
index a62787cf..c9f1fdf4 100644
--- a/apps/web/core/components/analytics/loaders.tsx
+++ b/apps/web/core/components/analytics/loaders.tsx
@@ -4,21 +4,21 @@
* See the LICENSE file for details.
*/
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function ProjectInsightsLoader() {
return (
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
);
@@ -26,8 +26,8 @@ export function ProjectInsightsLoader() {
export function ChartLoader() {
return (
-
-
-
+
+
+
);
}
diff --git a/apps/web/core/components/analytics/overview/active-projects.tsx b/apps/web/core/components/analytics/overview/active-projects.tsx
index ca157ba1..f8abacbe 100644
--- a/apps/web/core/components/analytics/overview/active-projects.tsx
+++ b/apps/web/core/components/analytics/overview/active-projects.tsx
@@ -10,7 +10,7 @@ import { useParams } from "@/app/hooks/navigation";
import useSWR from "swr";
// pace package imports
import { useTranslation } from "@pace/i18n";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// pace web hooks
import { useAnalytics } from "@/hooks/store/use-analytics";
import { useProject } from "@/hooks/store/use-project";
@@ -40,7 +40,7 @@ const ActiveProjects = observer(function ActiveProjects() {
>
{isProjectAnalyticsCountLoading &&
- Array.from({ length: 5 }).map((_, index) =>
)}
+ Array.from({ length: 5 }).map((_, index) =>
)}
{!isProjectAnalyticsCountLoading &&
projectAnalyticsCount?.map((project) =>
)}
diff --git a/apps/web/core/components/analytics/work-items/modal/content.tsx b/apps/web/core/components/analytics/work-items/modal/content.tsx
index fe872c43..11a11e63 100644
--- a/apps/web/core/components/analytics/work-items/modal/content.tsx
+++ b/apps/web/core/components/analytics/work-items/modal/content.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { Tab } from "@headlessui/react";
// pace package imports
import type { ICycle, IModule, IProject } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// hooks
import { useAnalytics } from "@/hooks/store/use-analytics";
// pace web components
diff --git a/apps/web/core/components/automation/auto-archive-automation.tsx b/apps/web/core/components/automation/auto-archive-automation.tsx
index 079423bf..8df151a5 100644
--- a/apps/web/core/components/automation/auto-archive-automation.tsx
+++ b/apps/web/core/components/automation/auto-archive-automation.tsx
@@ -13,7 +13,8 @@ import { PROJECT_AUTOMATION_MONTHS, EUserPermissions, EUserPermissionsLevel } fr
import { useTranslation } from "@pace/i18n";
import type { IProject } from "@pace/types";
import { Switch } from "@makeplane/propel/components/switch";
-import { CustomSelect, Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { CustomSelect } from "@pace/ui";
// component
import { SelectMonthModal } from "@/components/automation";
import { SettingsControlItem } from "@/components/settings/control-item";
@@ -125,9 +126,9 @@ export const AutoArchiveAutomation = observer(function AutoArchiveAutomation(pro
)
) : (
-
-
-
+
+
+
)}
>
diff --git a/apps/web/core/components/automation/auto-close-automation.tsx b/apps/web/core/components/automation/auto-close-automation.tsx
index a780560c..6024c8de 100644
--- a/apps/web/core/components/automation/auto-close-automation.tsx
+++ b/apps/web/core/components/automation/auto-close-automation.tsx
@@ -14,7 +14,8 @@ import { useTranslation } from "@pace/i18n";
import { StateGroupIcon } from "@pace/propel/icons";
import type { IProject } from "@pace/types";
import { Switch } from "@makeplane/propel/components/switch";
-import { CustomSelect, CustomSearchSelect, Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { CustomSelect, CustomSearchSelect } from "@pace/ui";
import { SelectMonthModal } from "@/components/automation";
import { SettingsControlItem } from "@/components/settings/control-item";
// hooks
@@ -188,9 +189,9 @@ export const AutoCloseAutomation = observer(function AutoCloseAutomation(props:
)
) : (
-
-
-
+
+
+
)}
>
diff --git a/apps/web/core/components/base-layouts/gantt/sidebar.tsx b/apps/web/core/components/base-layouts/gantt/sidebar.tsx
index 57e0c666..a5311520 100644
--- a/apps/web/core/components/base-layouts/gantt/sidebar.tsx
+++ b/apps/web/core/components/base-layouts/gantt/sidebar.tsx
@@ -8,7 +8,8 @@ import type { RefObject } from "react";
import { useState } from "react";
import { observer } from "mobx-react";
import type { IBaseLayoutsBaseItem, IBlockUpdateData } from "@pace/types";
-import { Loader, Row } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { Row } from "@pace/ui";
import { cn } from "@pace/utils";
import RenderIfVisible from "@/components/core/render-if-visible-HOC";
import { BLOCK_HEIGHT } from "@/components/gantt-chart/constants";
@@ -143,12 +144,12 @@ export const BaseGanttSidebar = observer(function BaseGanttSidebar
) : (
-
-
-
-
-
-
+
+
+
+
+
+
)}
);
diff --git a/apps/web/core/components/base-layouts/list/group.tsx b/apps/web/core/components/base-layouts/list/group.tsx
index 5f847275..c3d2b28f 100644
--- a/apps/web/core/components/base-layouts/list/group.tsx
+++ b/apps/web/core/components/base-layouts/list/group.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
import { useTranslation } from "@pace/i18n";
import type { IBaseLayoutsListItem, IBaseLayoutsListGroupProps } from "@pace/types";
-import { cn } from "@pace/ui";
+import { cn } from "@pace/utils";
import { useGroupDropTarget } from "../hooks/use-group-drop-target";
import { GroupHeader } from "./group-header";
import { BaseListItem } from "./item";
diff --git a/apps/web/core/components/base-layouts/list/layout.tsx b/apps/web/core/components/base-layouts/list/layout.tsx
index c4879863..0d2edb73 100644
--- a/apps/web/core/components/base-layouts/list/layout.tsx
+++ b/apps/web/core/components/base-layouts/list/layout.tsx
@@ -6,7 +6,7 @@
import { observer } from "mobx-react";
import type { IBaseLayoutsListItem, IBaseLayoutsListProps } from "@pace/types";
-import { cn } from "@pace/ui";
+import { cn } from "@pace/utils";
import { useLayoutState } from "../hooks/use-layout-state";
import { BaseListGroup } from "./group";
diff --git a/apps/web/core/components/common/filters/created-by.tsx b/apps/web/core/components/common/filters/created-by.tsx
index 9e654c5c..aa970c27 100644
--- a/apps/web/core/components/common/filters/created-by.tsx
+++ b/apps/web/core/components/common/filters/created-by.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterCreatedBy = observer(function FilterCreatedBy(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/core/description-versions/modal.tsx b/apps/web/core/components/core/description-versions/modal.tsx
index 5d68d6e9..be897c90 100644
--- a/apps/web/core/components/core/description-versions/modal.tsx
+++ b/apps/web/core/components/core/description-versions/modal.tsx
@@ -15,7 +15,8 @@ import { ChevronLeftOutline, ChevronRightOutline, CopyOutline } from "@makeplane
import { setToast, TOAST_TYPE } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { TDescriptionVersion } from "@pace/types";
-import { EModalPosition, EModalWidth, Loader, ModalCore } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
import { calculateTimeAgo, cn, getFileURL } from "@pace/utils";
// components
import { RichTextEditor } from "@/components/editor/rich-text";
@@ -140,18 +141,18 @@ export const DescriptionVersionsModal = observer(function DescriptionVersionsMod
/>
) : (
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
)}
diff --git a/apps/web/core/components/core/image-picker-popover.tsx b/apps/web/core/components/core/image-picker-popover.tsx
index ff43dbc4..c04d6121 100644
--- a/apps/web/core/components/core/image-picker-popover.tsx
+++ b/apps/web/core/components/core/image-picker-popover.tsx
@@ -20,7 +20,7 @@ import { useOutsideClickDetector } from "@pace/hooks";
import { Button, getButtonStyling } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { EFileAssetType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// helpers
import { STATIC_COVER_IMAGES, getCoverImageDisplayURL } from "@/helpers/cover-image.helper";
// hooks
@@ -277,16 +277,16 @@ function ImagePickerPopoverComponentNo images found.
)
) : (
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
)}
>
)}
diff --git a/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx b/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
index 49fcecfe..7bdc0a4b 100644
--- a/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
+++ b/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx
@@ -18,7 +18,8 @@ import { SearchOutline } from "@makeplane/propel/icons";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { ISearchIssueResponse, IUser } from "@pace/types";
import { EIssuesStoreType } from "@pace/types";
-import { Loader, EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
// assets
import darkIssuesAsset from "@/app/assets/empty-state/search/issues-dark.webp?url";
import lightIssuesAsset from "@/app/assets/empty-state/search/issues-light.webp?url";
@@ -185,12 +186,12 @@ export const BulkDeleteIssuesModal = observer(function BulkDeleteIssuesModal(pro
{isSearching ? (
-
-
-
-
-
-
+
+
+
+
+
+
) : (
<>{issueList}>
)}
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 7a5bf364..f1a7124c 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
@@ -16,7 +16,8 @@ import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { ISearchIssueResponse, TProjectIssuesSearchParams } from "@pace/types";
// ui
import { Switch } from "@makeplane/propel/components/switch";
-import { Loader, EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
import { generateWorkItemLink, getTabIndex } from "@pace/utils";
// helpers
// hooks
@@ -235,12 +236,12 @@ export function ExistingIssuesListModal(props: Props) {
)}
{isSearching || isLoading ? (
-
-
-
-
-
-
+
+
+
+
+
+
) : (
<>
{filteredIssues.length === 0 ? (
diff --git a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
index ecb851db..ad1f5dfc 100644
--- a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
+++ b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx
@@ -20,7 +20,7 @@ import type { TWorkItemFilterCondition } from "@pace/shared-state";
import type { ICycle } from "@pace/types";
import { EIssuesStoreType } from "@pace/types";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn, renderFormattedDate, renderFormattedDateWithoutYear, getFileURL } from "@pace/utils";
// assets
import darkAssigneeAsset from "@/app/assets/empty-state/active-cycle/assignee-dark.webp?url";
@@ -97,11 +97,11 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active
useIntersectionObserver(issuesContainerRef, issuesLoaderElement, loadMoreIssues, `0% 0% 100% 0%`);
const loaders = (
-
-
-
-
-
+
+
+
+
+
);
return cycleId ? (
@@ -370,8 +370,8 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active
) : (
-
-
-
+
+
+
);
});
diff --git a/apps/web/core/components/cycles/active-cycle/productivity.tsx b/apps/web/core/components/cycles/active-cycle/productivity.tsx
index 57e6a81f..cabb1619 100644
--- a/apps/web/core/components/cycles/active-cycle/productivity.tsx
+++ b/apps/web/core/components/cycles/active-cycle/productivity.tsx
@@ -11,7 +11,7 @@ import { useTheme } from "next-themes";
// pace imports
import { useTranslation } from "@pace/i18n";
import type { ICycle, TCycleEstimateType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// assets
import darkChartAsset from "@/app/assets/empty-state/active-cycle/chart-dark.webp?url";
import lightChartAsset from "@/app/assets/empty-state/active-cycle/chart-light.webp?url";
@@ -101,8 +101,8 @@ export const ActiveCycleProductivity = observer(function ActiveCycleProductivity
) : (
-
-
-
+
+
+
);
});
diff --git a/apps/web/core/components/cycles/active-cycle/progress.tsx b/apps/web/core/components/cycles/active-cycle/progress.tsx
index f4d97b61..b54e5c2d 100644
--- a/apps/web/core/components/cycles/active-cycle/progress.tsx
+++ b/apps/web/core/components/cycles/active-cycle/progress.tsx
@@ -12,7 +12,7 @@ import { useTranslation } from "@pace/i18n";
import type { TWorkItemFilterCondition } from "@pace/shared-state";
import { LinearProgress } from "@makeplane/propel/components/linear-progress";
import type { ICycle } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// assets
import darkProgressAsset from "@/app/assets/empty-state/active-cycle/progress-dark.webp?url";
import lightProgressAsset from "@/app/assets/empty-state/active-cycle/progress-light.webp?url";
@@ -116,8 +116,8 @@ export const ActiveCycleProgress = observer(function ActiveCycleProgress(props:
)}
) : (
-
-
-
+
+
+
);
});
diff --git a/apps/web/core/components/cycles/analytics-sidebar/root.tsx b/apps/web/core/components/cycles/analytics-sidebar/root.tsx
index 30253e09..77712ccd 100644
--- a/apps/web/core/components/cycles/analytics-sidebar/root.tsx
+++ b/apps/web/core/components/cycles/analytics-sidebar/root.tsx
@@ -7,7 +7,7 @@
import React from "react";
import { observer } from "mobx-react";
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// local imports
import useCyclesDetails from "../active-cycle/use-cycles-details";
import { CycleAnalyticsProgress } from "./issue-progress";
@@ -34,17 +34,17 @@ export const CycleDetailsSidebar = observer(function CycleDetailsSidebar(props:
if (!cycleDetails)
return (
-
+
-
-
+
+
-
-
-
+
+
+
-
+
);
return (
diff --git a/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx
index b8d35190..cde79d59 100644
--- a/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx
+++ b/apps/web/core/components/cycles/analytics-sidebar/sidebar-chart.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// pace imports
import { useTranslation } from "@pace/i18n";
import type { TCycleEstimateType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { getDate } from "@pace/utils";
// components
import ProgressChart from "@/components/core/sidebar/progress-chart";
@@ -79,9 +79,9 @@ export const SidebarChart = observer(function SidebarChart(props: ProgressChartP
/>
) : (
-
-
-
+
+
+
)}
diff --git a/apps/web/core/components/dropdowns/intake-state/base.tsx b/apps/web/core/components/dropdowns/intake-state/base.tsx
index 6f936f04..ca8d2e4c 100644
--- a/apps/web/core/components/dropdowns/intake-state/base.tsx
+++ b/apps/web/core/components/dropdowns/intake-state/base.tsx
@@ -14,7 +14,8 @@ import { useTranslation } from "@pace/i18n";
import { IntakeStateGroupIcon } from "@pace/propel/icons";
import { ChevronDownOutline, SearchOutline } from "@makeplane/propel/icons";
import type { IIntakeState } from "@pace/types";
-import { ComboDropDown, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { ComboDropDown } from "@pace/ui";
import { cn } from "@pace/utils";
// components
import { DropdownButton } from "@/components/dropdowns/buttons";
diff --git a/apps/web/core/components/dropdowns/state/base.tsx b/apps/web/core/components/dropdowns/state/base.tsx
index 6889263d..747a4b48 100644
--- a/apps/web/core/components/dropdowns/state/base.tsx
+++ b/apps/web/core/components/dropdowns/state/base.tsx
@@ -14,7 +14,8 @@ import { useTranslation } from "@pace/i18n";
import { StateGroupIcon } from "@pace/propel/icons";
import { ChevronDownOutline, SearchOutline } from "@makeplane/propel/icons";
import type { IState } from "@pace/types";
-import { ComboDropDown, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { ComboDropDown } from "@pace/ui";
import { cn } from "@pace/utils";
// components
import { DropdownButton } from "@/components/dropdowns/buttons";
diff --git a/apps/web/core/components/editor/rich-text/description-input/loader.tsx b/apps/web/core/components/editor/rich-text/description-input/loader.tsx
index 7651dadf..5bddc4d0 100644
--- a/apps/web/core/components/editor/rich-text/description-input/loader.tsx
+++ b/apps/web/core/components/editor/rich-text/description-input/loader.tsx
@@ -5,7 +5,7 @@
*/
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn } from "@pace/utils";
type Props = {
@@ -16,24 +16,24 @@ export function DescriptionInputLoader(props: Props) {
const { className } = props;
return (
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
);
}
diff --git a/apps/web/core/components/estimates/loader-screen.tsx b/apps/web/core/components/estimates/loader-screen.tsx
index 15453c82..393d3236 100644
--- a/apps/web/core/components/estimates/loader-screen.tsx
+++ b/apps/web/core/components/estimates/loader-screen.tsx
@@ -4,15 +4,15 @@
* See the LICENSE file for details.
*/
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function EstimateLoaderScreen() {
return (
-
-
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/apps/web/core/components/estimates/points/create.tsx b/apps/web/core/components/estimates/points/create.tsx
index 953be1e1..5f4414a1 100644
--- a/apps/web/core/components/estimates/points/create.tsx
+++ b/apps/web/core/components/estimates/points/create.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from "@pace/i18n";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeErrorObject } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { cn, isEstimatePointValuesRepeated } from "@pace/utils";
import { EstimateInputRoot } from "@/components/estimates/inputs/root";
// helpers
diff --git a/apps/web/core/components/estimates/points/update.tsx b/apps/web/core/components/estimates/points/update.tsx
index 2c750be5..c57b7359 100644
--- a/apps/web/core/components/estimates/points/update.tsx
+++ b/apps/web/core/components/estimates/points/update.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from "@pace/i18n";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeErrorObject } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { cn, isEstimatePointValuesRepeated } from "@pace/utils";
import { EstimateInputRoot } from "@/components/estimates/inputs/root";
// helpers
diff --git a/apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx b/apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx
index 639ee7d2..7e1a6850 100644
--- a/apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx
+++ b/apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx
@@ -10,7 +10,7 @@ import { observer } from "mobx-react";
// ui
import { GANTT_TIMELINE_TYPE } from "@pace/types";
import type { IBlockUpdateData } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import RenderIfVisible from "@/components/core/render-if-visible-HOC";
import { GanttLayoutListItemLoader } from "@/components/ui/loader/layouts/gantt-layout-loader";
@@ -122,12 +122,12 @@ export const IssueGanttSidebar = observer(function IssueGanttSidebar(props: Prop
)}
>
) : (
-
-
-
-
-
-
+
+
+
+
+
+
)}
);
diff --git a/apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx b/apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx
index 2048b17a..fae2bc59 100644
--- a/apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx
+++ b/apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
// ui
import { GANTT_TIMELINE_TYPE } from "@pace/types";
import type { IBlockUpdateData } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
// hooks
import { useTimeLineChart } from "@/hooks/use-timeline-chart";
@@ -52,12 +52,12 @@ export const ModuleGanttSidebar = observer(function ModuleGanttSidebar(props: Pr
))
) : (
-
-
-
-
-
-
+
+
+
+
+
+
)}
);
diff --git a/apps/web/core/components/global/product-updates/changelog.tsx b/apps/web/core/components/global/product-updates/changelog.tsx
index e9f565ad..d3dfa7c1 100644
--- a/apps/web/core/components/global/product-updates/changelog.tsx
+++ b/apps/web/core/components/global/product-updates/changelog.tsx
@@ -7,7 +7,7 @@
import { useState, useEffect, useRef } from "react";
import { observer } from "mobx-react";
// hooks
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { ProductUpdatesFallback } from "@/components/global/product-updates/fallback";
import { useInstance } from "@/hooks/store/use-instance";
@@ -74,9 +74,9 @@ export const ProductUpdatesChangelog = observer(function ProductUpdatesChangelog
return (
{isLoading && (
-
-
-
+
+
+
)}
{/* eslint-disable-next-line react/iframe-missing-sandbox oxlint-disable-next-line jsx_a11y/iframe-has-title */}
))}
diff --git a/apps/web/core/components/home/widgets/loaders/quick-links.tsx b/apps/web/core/components/home/widgets/loaders/quick-links.tsx
index 6e3cd1c6..b2b92df7 100644
--- a/apps/web/core/components/home/widgets/loaders/quick-links.tsx
+++ b/apps/web/core/components/home/widgets/loaders/quick-links.tsx
@@ -6,14 +6,14 @@
import { range } from "lodash-es";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function QuickLinksWidgetLoader() {
return (
-
+
{range(4).map((index) => (
-
+
))}
-
+
);
}
diff --git a/apps/web/core/components/home/widgets/loaders/recent-activity.tsx b/apps/web/core/components/home/widgets/loaders/recent-activity.tsx
index 1ad7a880..cd629c3b 100644
--- a/apps/web/core/components/home/widgets/loaders/recent-activity.tsx
+++ b/apps/web/core/components/home/widgets/loaders/recent-activity.tsx
@@ -6,21 +6,21 @@
import { range } from "lodash-es";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function RecentActivityWidgetLoader() {
return (
-
+
{range(5).map((index) => (
))}
-
+
);
}
diff --git a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx
index a4e5cc4d..71f036d2 100644
--- a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx
+++ b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx
@@ -7,7 +7,7 @@
import { useState } from "react";
import { observer } from "mobx-react";
import type { IIssueLabel } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
// hooks
@@ -81,11 +81,11 @@ export const FilterLabels = observer(function FilterLabels(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx
index a82ddf8f..86a107d6 100644
--- a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx
+++ b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx
@@ -11,7 +11,7 @@ import { observer } from "mobx-react";
import { Avatar } from "@makeplane/propel/components/avatar";
import type { TInboxIssueFilterMemberKeys } from "@pace/types";
// pace ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -111,11 +111,11 @@ export const FilterMember = observer(function FilterMember(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx
index f4bb7b11..9aca12d1 100644
--- a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx
+++ b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
import { EIconSize } from "@pace/constants";
import { StateGroupIcon } from "@pace/propel/icons";
import type { IState } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
// hooks
@@ -86,11 +86,11 @@ export const FilterState = observer(function FilterState(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx
index 2f0ca307..4b89cf99 100644
--- a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx
+++ b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx
@@ -12,7 +12,7 @@ import type { EditorRefApi } from "@pace/editor";
import { useTranslation } from "@pace/i18n";
import type { TIssue } from "@pace/types";
import { EFileAssetType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { getDescriptionPlaceholderI18n, getTabIndex } from "@pace/utils";
// components
import { RichTextEditor } from "@/components/editor/rich-text/editor";
@@ -61,9 +61,9 @@ export const InboxIssueDescription = observer(function InboxIssueDescription(pro
if (loader === "issue-loading")
return (
-
-
-
+
+
+
);
return (
diff --git a/apps/web/core/components/inbox/modals/select-duplicate.tsx b/apps/web/core/components/inbox/modals/select-duplicate.tsx
index 98e8ac1d..cd8b80b9 100644
--- a/apps/web/core/components/inbox/modals/select-duplicate.tsx
+++ b/apps/web/core/components/inbox/modals/select-duplicate.tsx
@@ -13,7 +13,8 @@ import { useTranslation } from "@pace/i18n";
import { SearchOutline } from "@makeplane/propel/icons";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { ISearchIssueResponse } from "@pace/types";
-import { Loader, EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { EModalPosition, EModalWidth, ModalCore } from "@pace/ui";
// assets
import darkIssuesAsset from "@/app/assets/empty-state/search/issues-dark.webp?url";
import lightIssuesAsset from "@/app/assets/empty-state/search/issues-light.webp?url";
@@ -153,12 +154,12 @@ export function SelectDuplicateInboxIssueModal(props: Props) {
{isSearching ? (
-
-
-
-
-
-
+
+
+
+
+
+
) : (
<>{issueList}>
)}
diff --git a/apps/web/core/components/inbox/sidebar/root.tsx b/apps/web/core/components/inbox/sidebar/root.tsx
index 00112337..b8d27151 100644
--- a/apps/web/core/components/inbox/sidebar/root.tsx
+++ b/apps/web/core/components/inbox/sidebar/root.tsx
@@ -11,7 +11,8 @@ import { EmptyStateDetailed } from "@pace/propel/empty-state";
import type { TInboxIssueCurrentTab } from "@pace/types";
import { EInboxIssueCurrentTab } from "@pace/types";
// pace imports
-import { Header, Loader, EHeaderVariant } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { Header, EHeaderVariant } from "@pace/ui";
import { cn } from "@pace/utils";
// components
import { InboxSidebarLoader } from "@/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader";
@@ -174,10 +175,10 @@ export const InboxSidebar = observer(function InboxSidebar(props: IInboxSidebarP
)}
{inboxIssuePaginationInfo?.next_page_results && (
-
-
-
-
+
+
+
+
)}
diff --git a/apps/web/core/components/integration/single-integration-card.tsx b/apps/web/core/components/integration/single-integration-card.tsx
index 34cac4ce..8a364b99 100644
--- a/apps/web/core/components/integration/single-integration-card.tsx
+++ b/apps/web/core/components/integration/single-integration-card.tsx
@@ -15,7 +15,7 @@ import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { IAppIntegration, IWorkspaceIntegration } from "@pace/types";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// assets
import GithubLogo from "@/app/assets/services/github.png?url";
import SlackLogo from "@/app/assets/services/slack.png?url";
@@ -177,9 +177,9 @@ export const SingleIntegrationCard = observer(function SingleIntegrationCard({ i
)
) : (
-
-
-
+
+
+
)}
);
diff --git a/apps/web/core/components/integration/slack/select-channel.tsx b/apps/web/core/components/integration/slack/select-channel.tsx
index 3ae3f6e2..f90c4cc8 100644
--- a/apps/web/core/components/integration/slack/select-channel.tsx
+++ b/apps/web/core/components/integration/slack/select-channel.tsx
@@ -11,7 +11,7 @@ import useSWR, { mutate } from "swr";
// types
import type { IWorkspaceIntegration, ISlackIntegration } from "@pace/types";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// fetch-keys
import { SLACK_CHANNEL_INFO } from "@pace/constants";
// hooks
@@ -102,9 +102,9 @@ export const SelectChannel = observer(function SelectChannel({ integration }: Pr
/>
) : (
-
-
-
+
+
+
)}
>
);
diff --git a/apps/web/core/components/issues/issue-detail/issue-activity/loader.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/loader.tsx
index bf641f96..1c82e22c 100644
--- a/apps/web/core/components/issues/issue-detail/issue-activity/loader.tsx
+++ b/apps/web/core/components/issues/issue-detail/issue-activity/loader.tsx
@@ -5,35 +5,35 @@
*/
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function IssueActivityLoader() {
return (
-
+
-
+
);
}
diff --git a/apps/web/core/components/issues/issue-detail/subscription.tsx b/apps/web/core/components/issues/issue-detail/subscription.tsx
index 5b8869b7..a7d7a89b 100644
--- a/apps/web/core/components/issues/issue-detail/subscription.tsx
+++ b/apps/web/core/components/issues/issue-detail/subscription.tsx
@@ -15,7 +15,7 @@ import { useTranslation } from "@pace/i18n";
import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { EIssueServiceType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// hooks
import { useIssueDetail } from "@/hooks/store/use-issue-detail";
import { useUserPermissions } from "@/hooks/store/user";
@@ -74,9 +74,9 @@ export const IssueSubscription = observer(function IssueSubscription(props: TIss
if (isNil(isSubscribed))
return (
-
-
-
+
+
+
);
return (
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx b/apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx
index 57d3a5c1..c0207086 100644
--- a/apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx
+++ b/apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx
@@ -21,7 +21,7 @@ import type {
} from "@pace/types";
import { EIssuesStoreType, EIssueLayoutTypes } from "@pace/types";
// ui
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { renderFormattedPayloadDate, cn } from "@pace/utils";
// constants
import { MONTHS_LIST } from "@pace/constants";
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx
index 780e6424..9714be93 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterAssignees = observer(function FilterAssignees(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx
index 21efdd71..623a2c69 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterCreatedBy = observer(function FilterCreatedBy(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx
index 88ee1a8c..e8b8a804 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx
@@ -11,7 +11,7 @@ import { useParams } from "@/app/hooks/navigation";
import { CycleGroupIcon } from "@pace/propel/icons";
import type { TCycleGroups } from "@pace/types";
// components
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
import { useCycle } from "@/hooks/store/use-cycle";
// ui
@@ -98,11 +98,11 @@ export const FilterCycle = observer(function FilterCycle(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx
index 1102b1d6..d2411e1e 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
import type { IIssueLabel } from "@pace/types";
// components
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
// ui
@@ -88,11 +88,11 @@ export const FilterLabels = observer(function FilterLabels(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx
index 423dba64..17bad545 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterMentions = observer(function FilterMentions(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx
index 1ab8a3b1..9f7ecfcd 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx
@@ -10,7 +10,7 @@ import { observer } from "mobx-react";
import { useParams } from "@/app/hooks/navigation";
// components
import { ModuleOutline } from "@makeplane/propel/icons";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
import { useModule } from "@/hooks/store/use-module";
// ui
@@ -88,11 +88,11 @@ export const FilterModule = observer(function FilterModule(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx
index b9144031..94630a82 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// ui
import { Logo } from "@pace/propel/emoji-icon-picker";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
// hooks
@@ -89,11 +89,11 @@ export const FilterProjects = observer(function FilterProjects(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx
index a31b90aa..ab0c3c6e 100644
--- a/apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx
+++ b/apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx
@@ -11,7 +11,7 @@ import { EIconSize } from "@pace/constants";
import { StateGroupIcon } from "@pace/propel/icons";
import type { IState } from "@pace/types";
// components
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
// ui
// types
@@ -87,11 +87,11 @@ export const FilterState = observer(function FilterState(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
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 b8c340b5..48cb7d13 100644
--- a/apps/web/core/components/issues/issue-layouts/list/block.tsx
+++ b/apps/web/core/components/issues/issue-layouts/list/block.tsx
@@ -17,7 +17,8 @@ import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { TIssue, IIssueDisplayProperties, TIssueMap } from "@pace/types";
import { EIssueServiceType } from "@pace/types";
// ui
-import { Spinner, ControlLink, Row } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { ControlLink, Row } from "@pace/ui";
import { cn, generateWorkItemLink } from "@pace/utils";
// components
import { MultipleSelectEntityAction } from "@/components/core/multiple-select";
diff --git a/apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx
index aa8442ea..b29f0ac2 100644
--- a/apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx
+++ b/apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx
@@ -10,7 +10,7 @@ import useSWR from "swr";
// pace constants
import { ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@pace/constants";
import { EIssueLayoutTypes, EIssuesStoreType } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { ProjectLevelWorkItemFiltersHOC } from "@/components/work-item-filters/filters-hoc/project-level";
import { WorkItemFiltersRow } from "@/components/work-item-filters/filters-row";
diff --git a/apps/web/core/components/issues/issue-modal/components/description-editor.tsx b/apps/web/core/components/issues/issue-modal/components/description-editor.tsx
index 0bf80225..a0a9569a 100644
--- a/apps/web/core/components/issues/issue-modal/components/description-editor.tsx
+++ b/apps/web/core/components/issues/issue-modal/components/description-editor.tsx
@@ -16,7 +16,7 @@ import { useTranslation } from "@pace/i18n";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { TIssue } from "@pace/types";
import { EFileAssetType } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { getDescriptionPlaceholderI18n, getTabIndex } from "@pace/utils";
// components
import { GptAssistantPopover } from "@/components/core/modals/gpt-assistant-popover";
@@ -156,25 +156,25 @@ export const IssueDescriptionEditor = observer(function IssueDescriptionEditor(p
return (
{descriptionHtmlData === undefined || !projectId ? (
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
) : (
<>
-
-
-
-
-
+
+
+
+
+
+
) : (
<>
{issues.length === 0 ? (
diff --git a/apps/web/core/components/issues/peek-overview/loader.tsx b/apps/web/core/components/issues/peek-overview/loader.tsx
index e0bbee42..3c2a5efa 100644
--- a/apps/web/core/components/issues/peek-overview/loader.tsx
+++ b/apps/web/core/components/issues/peek-overview/loader.tsx
@@ -6,7 +6,7 @@
import { ArrowNarrowRightOutline } from "@makeplane/propel/icons";
import { Tooltip } from "@makeplane/propel/components/tooltip";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// hooks
import { usePlatformOS } from "@/hooks/use-platform-os";
@@ -20,7 +20,7 @@ export function IssuePeekOverviewLoader(props: TIssuePeekOverviewLoader) {
const { isMobile } = usePlatformOS();
return (
-
+
@@ -28,83 +28,83 @@ export function IssuePeekOverviewLoader(props: TIssuePeekOverviewLoader) {
-
+
-
-
-
-
+
+
+
+
{/* issue title and description and comments */}
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
{/* sub issues */}
-
-
+
+
{/* attachments */}
{/* properties */}
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
);
}
diff --git a/apps/web/core/components/labels/project-setting-label-list.tsx b/apps/web/core/components/labels/project-setting-label-list.tsx
index a54fde3c..ac01b7da 100644
--- a/apps/web/core/components/labels/project-setting-label-list.tsx
+++ b/apps/web/core/components/labels/project-setting-label-list.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from "@pace/i18n";
import { Button } from "@pace/propel/button";
import { EmptyStateCompact } from "@pace/propel/empty-state";
import type { IIssueLabel } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import type { TLabelOperationsCallbacks } from "@/components/labels";
import {
CreateUpdateLabelInline,
@@ -160,12 +160,12 @@ export const ProjectSettingsLabelList = observer(function ProjectSettingsLabelLi
)
) : (
!showLabelForm && (
-
-
-
-
-
-
+
+
+
+
+
+
)
)}
diff --git a/apps/web/core/components/license/modal/card/checkout-button.tsx b/apps/web/core/components/license/modal/card/checkout-button.tsx
index a53e8ab9..8f5b6649 100644
--- a/apps/web/core/components/license/modal/card/checkout-button.tsx
+++ b/apps/web/core/components/license/modal/card/checkout-button.tsx
@@ -8,7 +8,7 @@ import { observer } from "mobx-react";
// pace imports
import { Button } from "@pace/propel/button";
import type { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// local imports
import { DiscountInfo } from "./discount-info";
@@ -52,9 +52,9 @@ export const PlanCheckoutButton = observer(function PlanCheckoutButton(props: Pr
{isLoading ? (
-
-
-
+
+
+
) : (
per user per month
{isLoading ? (
-
-
-
+
+
+
) : (
{isLoading ? (
-
-
-
+
+
+
) : (
<>Quote on request>
)}
@@ -67,9 +67,9 @@ export const TalkToSalesCard = observer(function TalkToSalesCard(props: TalkToSa
per user per month
{isLoading ? (
-
-
-
+
+
+
) : (
diff --git a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
index 95c52b96..8e644983 100644
--- a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
+++ b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx
@@ -13,7 +13,8 @@ import { EEstimateSystem } from "@pace/constants";
import { useTranslation } from "@pace/i18n";
import type { TModulePlotType } from "@pace/types";
import { EIssuesStoreType } from "@pace/types";
-import { CustomSelect, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { CustomSelect } from "@pace/ui";
// components
// constants
// helpers
diff --git a/apps/web/core/components/modules/analytics-sidebar/root.tsx b/apps/web/core/components/modules/analytics-sidebar/root.tsx
index 9826ef7c..5555d538 100644
--- a/apps/web/core/components/modules/analytics-sidebar/root.tsx
+++ b/apps/web/core/components/modules/analytics-sidebar/root.tsx
@@ -26,7 +26,8 @@ import { ModuleStatusIcon } from "@pace/propel/icons";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { ILinkDetails, IModule, ModuleLink } from "@pace/types";
// pace ui
-import { Loader, CustomSelect } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { CustomSelect } from "@pace/ui";
import { TextArea } from "@makeplane/propel/components/text-area";
// components
// helpers
@@ -140,17 +141,17 @@ export const ModuleAnalyticsSidebar = observer(function ModuleAnalyticsSidebar(p
if (!moduleDetails)
return (
-
+
-
-
+
+
-
-
-
+
+
+
-
+
);
const moduleStatus = MODULE_STATUS.find((status) => status.value === moduleDetails.status);
diff --git a/apps/web/core/components/modules/dropdowns/filters/lead.tsx b/apps/web/core/components/modules/dropdowns/filters/lead.tsx
index d079d39f..2724147b 100644
--- a/apps/web/core/components/modules/dropdowns/filters/lead.tsx
+++ b/apps/web/core/components/modules/dropdowns/filters/lead.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterLead = observer(function FilterLead(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/modules/dropdowns/filters/members.tsx b/apps/web/core/components/modules/dropdowns/filters/members.tsx
index 0fcda9d1..3ec52cdc 100644
--- a/apps/web/core/components/modules/dropdowns/filters/members.tsx
+++ b/apps/web/core/components/modules/dropdowns/filters/members.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterMembers = observer(function FilterMembers(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/modules/module-card-item.tsx b/apps/web/core/components/modules/module-card-item.tsx
index b90b27be..87baa8e5 100644
--- a/apps/web/core/components/modules/module-card-item.tsx
+++ b/apps/web/core/components/modules/module-card-item.tsx
@@ -15,10 +15,11 @@ import { InfoOutline, UserAltOutline, WorkItemsOutline } from "@makeplane/propel
import { MODULE_STATUS, EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@pace/constants";
import { useLocalStorage } from "@pace/hooks";
import { LinearProgress } from "@makeplane/propel/components/linear-progress";
+import { Card } from "@pace/propel/card";
import { TOAST_TYPE, setPromiseToast, setToast } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { IModule } from "@pace/types";
-import { Card, FavoriteStar } from "@pace/ui";
+import { FavoriteStar } from "@pace/ui";
import { getDate, renderFormattedPayloadDate, generateQueryParams } from "@pace/utils";
// components
import { DateRangeDropdown } from "@/components/dropdowns/date-range";
diff --git a/apps/web/core/components/onboarding/create-workspace.tsx b/apps/web/core/components/onboarding/create-workspace.tsx
index 1bc56553..e458402f 100644
--- a/apps/web/core/components/onboarding/create-workspace.tsx
+++ b/apps/web/core/components/onboarding/create-workspace.tsx
@@ -17,7 +17,8 @@ import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IUser, IWorkspace, TOnboardingSteps } from "@pace/types";
// ui
-import { CustomSelect, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { CustomSelect } from "@pace/ui";
import { validateWorkspaceName, validateSlug } from "@pace/utils";
// hooks
import { useWorkspace } from "@/hooks/store/use-workspace";
diff --git a/apps/web/core/components/onboarding/invitations.tsx b/apps/web/core/components/onboarding/invitations.tsx
index 55192013..5bf18d01 100644
--- a/apps/web/core/components/onboarding/invitations.tsx
+++ b/apps/web/core/components/onboarding/invitations.tsx
@@ -12,7 +12,7 @@ import { Button } from "@pace/propel/button";
import type { IWorkspaceMemberInvitation } from "@pace/types";
// ui
import { Checkbox } from "@makeplane/propel/components/checkbox";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { truncateText } from "@pace/utils";
// constants
// helpers
diff --git a/apps/web/core/components/onboarding/invite-members.tsx b/apps/web/core/components/onboarding/invite-members.tsx
index fc2f8259..dd800e0e 100644
--- a/apps/web/core/components/onboarding/invite-members.tsx
+++ b/apps/web/core/components/onboarding/invite-members.tsx
@@ -30,7 +30,7 @@ import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IUser, IWorkspace } from "@pace/types";
// ui
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// services
import { WorkspaceService } from "@pace/services";
// components
diff --git a/apps/web/core/components/onboarding/profile-setup.tsx b/apps/web/core/components/onboarding/profile-setup.tsx
index da66cfda..e7717623 100644
--- a/apps/web/core/components/onboarding/profile-setup.tsx
+++ b/apps/web/core/components/onboarding/profile-setup.tsx
@@ -17,7 +17,8 @@ import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IUser, TUserProfile, TOnboardingSteps } from "@pace/types";
// ui
-import { PasswordStrengthIndicator, Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
+import { PasswordStrengthIndicator } from "@pace/ui";
// components
import { cn, getFileURL, getPasswordStrength, validatePersonName } from "@pace/utils";
import { UserImageUploadModal } from "@/components/core/modals/user-image-upload-modal";
diff --git a/apps/web/core/components/onboarding/steps/team/root.tsx b/apps/web/core/components/onboarding/steps/team/root.tsx
index 62261dda..de4fef3b 100644
--- a/apps/web/core/components/onboarding/steps/team/root.tsx
+++ b/apps/web/core/components/onboarding/steps/team/root.tsx
@@ -27,7 +27,7 @@ import { useTranslation } from "@pace/i18n";
import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { EOnboardingSteps } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// hooks
import { useWorkspace } from "@/hooks/store/use-workspace";
// services
diff --git a/apps/web/core/components/onboarding/steps/workspace/create.tsx b/apps/web/core/components/onboarding/steps/workspace/create.tsx
index 40984a4e..b270f027 100644
--- a/apps/web/core/components/onboarding/steps/workspace/create.tsx
+++ b/apps/web/core/components/onboarding/steps/workspace/create.tsx
@@ -14,7 +14,7 @@ import { useTranslation } from "@pace/i18n";
import { Button } from "@pace/propel/button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IUser, IWorkspace } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { cn, validateWorkspaceName, validateSlug } from "@pace/utils";
// hooks
import { useInstance } from "@/hooks/store/use-instance";
diff --git a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
index b1b23057..3adbd163 100644
--- a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
+++ b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx
@@ -10,7 +10,7 @@ import { ROLE } from "@pace/constants";
import { Button } from "@pace/propel/button";
import type { IWorkspaceMemberInvitation } from "@pace/types";
import { Checkbox } from "@makeplane/propel/components/checkbox";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { truncateText } from "@pace/utils";
// constants
import { WorkspaceLogo } from "@/components/workspace/logo";
diff --git a/apps/web/core/components/pages/loaders/page-content-loader.tsx b/apps/web/core/components/pages/loaders/page-content-loader.tsx
index 5834cdc5..134aca99 100644
--- a/apps/web/core/components/pages/loaders/page-content-loader.tsx
+++ b/apps/web/core/components/pages/loaders/page-content-loader.tsx
@@ -5,7 +5,7 @@
*/
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn } from "@pace/utils";
type Props = {
@@ -19,69 +19,69 @@ export function PageContentLoader(props: Props) {
{/* header */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{/* content */}
{/* editor loader */}
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
diff --git a/apps/web/core/components/pages/loaders/page-loader.tsx b/apps/web/core/components/pages/loaders/page-loader.tsx
index bda632f1..40293822 100644
--- a/apps/web/core/components/pages/loaders/page-loader.tsx
+++ b/apps/web/core/components/pages/loaders/page-loader.tsx
@@ -5,31 +5,31 @@
*/
import { range } from "lodash-es";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function PageLoader() {
return (
{range(10).map((i) => (
-
-
+
+
-
-
-
-
+
+
+
+
-
+
))}
diff --git a/apps/web/core/components/pages/version/editor.tsx b/apps/web/core/components/pages/version/editor.tsx
index 6dbbb531..899e45e5 100644
--- a/apps/web/core/components/pages/version/editor.tsx
+++ b/apps/web/core/components/pages/version/editor.tsx
@@ -9,7 +9,7 @@ import { useParams } from "@/app/hooks/navigation";
// pace imports
import type { TDisplayConfig } from "@pace/editor";
import type { JSONContent, TPageVersion } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { isJSONContentEmpty } from "@pace/utils";
// components
import { DocumentEditor } from "@/components/editor/document/editor";
@@ -45,42 +45,42 @@ export const PagesVersionEditor = observer(function PagesVersionEditor(props: TV
if (!versionDetails)
return (
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
);
diff --git a/apps/web/core/components/power-k/ui/pages/context-based/work-item/cycles-menu.tsx b/apps/web/core/components/power-k/ui/pages/context-based/work-item/cycles-menu.tsx
index d5493e26..5a57981c 100644
--- a/apps/web/core/components/power-k/ui/pages/context-based/work-item/cycles-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/context-based/work-item/cycles-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { ICycle, TIssue } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { PowerKCyclesMenu } from "@/components/power-k/menus/cycles";
// hooks
diff --git a/apps/web/core/components/power-k/ui/pages/context-based/work-item/estimates-menu.tsx b/apps/web/core/components/power-k/ui/pages/context-based/work-item/estimates-menu.tsx
index f5a5e9b0..24185e95 100644
--- a/apps/web/core/components/power-k/ui/pages/context-based/work-item/estimates-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/context-based/work-item/estimates-menu.tsx
@@ -11,7 +11,7 @@ import { Triangle } from "lucide-react";
import { useTranslation } from "@pace/i18n";
import { EEstimateSystem } from "@pace/types";
import type { TIssue } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
import { convertMinutesToHoursMinutesString } from "@pace/utils";
// hooks
import { useEstimate, useProjectEstimates } from "@/hooks/store/estimates";
diff --git a/apps/web/core/components/power-k/ui/pages/context-based/work-item/labels-menu.tsx b/apps/web/core/components/power-k/ui/pages/context-based/work-item/labels-menu.tsx
index e53cdbaa..cef5b7d4 100644
--- a/apps/web/core/components/power-k/ui/pages/context-based/work-item/labels-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/context-based/work-item/labels-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IIssueLabel, TIssue } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { PowerKLabelsMenu } from "@/components/power-k/menus/labels";
// hooks
diff --git a/apps/web/core/components/power-k/ui/pages/context-based/work-item/modules-menu.tsx b/apps/web/core/components/power-k/ui/pages/context-based/work-item/modules-menu.tsx
index a76e7bbe..412c2656 100644
--- a/apps/web/core/components/power-k/ui/pages/context-based/work-item/modules-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/context-based/work-item/modules-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IModule, TIssue } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { PowerKModulesMenu } from "@/components/power-k/menus/modules";
// hooks
diff --git a/apps/web/core/components/power-k/ui/pages/context-based/work-item/states-menu.tsx b/apps/web/core/components/power-k/ui/pages/context-based/work-item/states-menu.tsx
index 9e7cd457..aaf89c87 100644
--- a/apps/web/core/components/power-k/ui/pages/context-based/work-item/states-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/context-based/work-item/states-menu.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// pace types
import { useParams } from "@/app/hooks/navigation";
import type { TIssue } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// hooks
import { useProjectState } from "@/hooks/store/use-project-state";
// local imports
diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/project-cycles-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/project-cycles-menu.tsx
index dd02d3db..f1e9a883 100644
--- a/apps/web/core/components/power-k/ui/pages/open-entity/project-cycles-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/open-entity/project-cycles-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { ICycle } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import type { TPowerKContext } from "@/components/power-k/core/types";
import { PowerKCyclesMenu } from "@/components/power-k/menus/cycles";
diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/project-modules-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/project-modules-menu.tsx
index 5a8251b2..5bdedf57 100644
--- a/apps/web/core/components/power-k/ui/pages/open-entity/project-modules-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/open-entity/project-modules-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IModule } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import type { TPowerKContext } from "@/components/power-k/core/types";
import { PowerKModulesMenu } from "@/components/power-k/menus/modules";
diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/project-views-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/project-views-menu.tsx
index 1c525f57..c637e50b 100644
--- a/apps/web/core/components/power-k/ui/pages/open-entity/project-views-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/open-entity/project-views-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IProjectView } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import type { TPowerKContext } from "@/components/power-k/core/types";
// hooks
diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/projects-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/projects-menu.tsx
index 9e7327b4..c1633005 100644
--- a/apps/web/core/components/power-k/ui/pages/open-entity/projects-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/open-entity/projects-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IPartialProject } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { PowerKProjectsMenu } from "@/components/power-k/menus/projects";
// hooks
diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/workspaces-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/workspaces-menu.tsx
index 6c450a08..33091425 100644
--- a/apps/web/core/components/power-k/ui/pages/open-entity/workspaces-menu.tsx
+++ b/apps/web/core/components/power-k/ui/pages/open-entity/workspaces-menu.tsx
@@ -7,7 +7,7 @@
import { observer } from "mobx-react";
// pace types
import type { IWorkspace } from "@pace/types";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// components
import { PowerKWorkspacesMenu } from "@/components/power-k/menus/workspaces";
// hooks
diff --git a/apps/web/core/components/profile/overview/activity.tsx b/apps/web/core/components/profile/overview/activity.tsx
index de804cc4..3e3c06e4 100644
--- a/apps/web/core/components/profile/overview/activity.tsx
+++ b/apps/web/core/components/profile/overview/activity.tsx
@@ -10,8 +10,9 @@ import useSWR from "swr";
// ui
import { useTranslation } from "@pace/i18n";
import { Avatar } from "@pace/propel/avatar";
+import { Card } from "@pace/propel/card";
import { EmptyStateCompact } from "@pace/propel/empty-state";
-import { Loader, Card } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { calculateTimeAgo, getFileURL } from "@pace/utils";
// components
import { ActivityMessage, IssueLink } from "@/components/core/activity";
@@ -46,13 +47,13 @@ export const ProfileActivity = observer(function ProfileActivity() {
{t("profile.stats.recent_activity.title")}
{!userProfileActivity ? (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
) : Array.isArray(userProfileActivity.results) && userProfileActivity.results.length > 0 ? (
{userProfileActivity.results.map((activity) => (
diff --git a/apps/web/core/components/profile/overview/priority-distribution.tsx b/apps/web/core/components/profile/overview/priority-distribution.tsx
index ec418b8d..edca68ba 100644
--- a/apps/web/core/components/profile/overview/priority-distribution.tsx
+++ b/apps/web/core/components/profile/overview/priority-distribution.tsx
@@ -6,10 +6,11 @@
// pace imports
import { useTranslation } from "@pace/i18n";
+import { Card } from "@pace/propel/card";
import { BarChart } from "@pace/propel/charts/bar-chart";
import { EmptyStateCompact } from "@pace/propel/empty-state";
import type { IUserProfileData } from "@pace/types";
-import { Loader, Card } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { capitalizeFirstLetter } from "@pace/utils";
type Props = {
@@ -72,13 +73,13 @@ export function ProfilePriorityDistribution({ userProfile }: Props) {
) : (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
)}
diff --git a/apps/web/core/components/profile/overview/state-distribution.tsx b/apps/web/core/components/profile/overview/state-distribution.tsx
index ddf1770d..ac3d5bd0 100644
--- a/apps/web/core/components/profile/overview/state-distribution.tsx
+++ b/apps/web/core/components/profile/overview/state-distribution.tsx
@@ -7,10 +7,10 @@
// pace imports
import { STATE_GROUPS } from "@pace/constants";
import { useTranslation } from "@pace/i18n";
+import { Card } from "@pace/propel/card";
import { PieChart } from "@pace/propel/charts/pie-chart";
import { EmptyStateCompact } from "@pace/propel/empty-state";
import type { IUserProfileData, IUserStateDistribution } from "@pace/types";
-import { Card } from "@pace/ui";
import { capitalizeFirstLetter } from "@pace/utils";
type Props = {
diff --git a/apps/web/core/components/profile/overview/stats.tsx b/apps/web/core/components/profile/overview/stats.tsx
index 39703e7a..54a0e604 100644
--- a/apps/web/core/components/profile/overview/stats.tsx
+++ b/apps/web/core/components/profile/overview/stats.tsx
@@ -9,10 +9,11 @@ import { useParams } from "@/app/hooks/navigation";
// ui
import { useTranslation } from "@pace/i18n";
+import { Card, ECardDirection, ECardSpacing } from "@pace/propel/card";
import { LayerStackIcon } from "@pace/propel/icons";
import { AddOutline, UserOutline } from "@makeplane/propel/icons";
import type { IUserProfileData } from "@pace/types";
-import { Loader, Card, ECardSpacing, ECardDirection } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// types
type Props = {
@@ -65,11 +66,11 @@ export function ProfileStats({ userProfile }: Props) {
))}
) : (
-
-
-
-
-
+
+
+
+
+
)}
);
diff --git a/apps/web/core/components/profile/overview/workload.tsx b/apps/web/core/components/profile/overview/workload.tsx
index 89a8d7e0..8c48fda3 100644
--- a/apps/web/core/components/profile/overview/workload.tsx
+++ b/apps/web/core/components/profile/overview/workload.tsx
@@ -8,8 +8,8 @@
import { STATE_GROUPS } from "@pace/constants";
// types
import { useTranslation } from "@pace/i18n";
+import { Card, ECardDirection, ECardSpacing } from "@pace/propel/card";
import type { IUserStateDistribution } from "@pace/types";
-import { Card, ECardDirection, ECardSpacing } from "@pace/ui";
// constants
type Props = {
diff --git a/apps/web/core/components/profile/sidebar.tsx b/apps/web/core/components/profile/sidebar.tsx
index 9318a04f..9098a44e 100644
--- a/apps/web/core/components/profile/sidebar.tsx
+++ b/apps/web/core/components/profile/sidebar.tsx
@@ -16,7 +16,7 @@ import { IconButton } from "@pace/propel/icon-button";
import { ChevronDownOutline, EditOutline } from "@makeplane/propel/icons";
import { Tooltip } from "@makeplane/propel/components/tooltip";
import type { IUserProfileProjectSegregation } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn, renderFormattedDate, getFileURL } from "@pace/utils";
// components
import { CoverImage } from "@/components/common/cover-image";
@@ -280,16 +280,16 @@ export const ProfileSidebar = observer(function ProfileSidebar(props: TProfileSi
>
) : (
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
+
)}
);
diff --git a/apps/web/core/components/project-states/loader.tsx b/apps/web/core/components/project-states/loader.tsx
index 77e495ca..a4ba149b 100644
--- a/apps/web/core/components/project-states/loader.tsx
+++ b/apps/web/core/components/project-states/loader.tsx
@@ -4,15 +4,15 @@
* See the LICENSE file for details.
*/
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function ProjectStateLoader() {
return (
-
-
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/apps/web/core/components/project/dropdowns/filters/lead.tsx b/apps/web/core/components/project/dropdowns/filters/lead.tsx
index d079d39f..2724147b 100644
--- a/apps/web/core/components/project/dropdowns/filters/lead.tsx
+++ b/apps/web/core/components/project/dropdowns/filters/lead.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterLead = observer(function FilterLead(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/project/dropdowns/filters/members.tsx b/apps/web/core/components/project/dropdowns/filters/members.tsx
index 0fcda9d1..3ec52cdc 100644
--- a/apps/web/core/components/project/dropdowns/filters/members.tsx
+++ b/apps/web/core/components/project/dropdowns/filters/members.tsx
@@ -9,7 +9,7 @@ import { sortBy } from "lodash-es";
import { observer } from "mobx-react";
// pace ui
import { Avatar } from "@makeplane/propel/components/avatar";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// components
import { getFileURL } from "@pace/utils";
import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters";
@@ -103,11 +103,11 @@ export const FilterMembers = observer(function FilterMembers(props: Props) {
No matches found
)
) : (
-
-
-
-
-
+
+
+
+
+
)}
)}
diff --git a/apps/web/core/components/project/form-loader.tsx b/apps/web/core/components/project/form-loader.tsx
index f96f6b7b..7a84664f 100644
--- a/apps/web/core/components/project/form-loader.tsx
+++ b/apps/web/core/components/project/form-loader.tsx
@@ -5,61 +5,61 @@
*/
// components
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function ProjectDetailsFormLoader() {
return (
<>
Project name
-
-
-
+
+
+
Description
-
-
-
+
+
+
Identifier
-
-
-
+
+
+
Network
-
-
-
+
+
+
-
-
-
+
+
+
>
diff --git a/apps/web/core/components/project/project-settings-member-defaults.tsx b/apps/web/core/components/project/project-settings-member-defaults.tsx
index 45048a54..a4b47c8d 100644
--- a/apps/web/core/components/project/project-settings-member-defaults.tsx
+++ b/apps/web/core/components/project/project-settings-member-defaults.tsx
@@ -15,7 +15,7 @@ import { useTranslation } from "@pace/i18n";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IProject, IUserLite, IWorkspace } from "@pace/types";
import { Switch } from "@makeplane/propel/components/switch";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
// constants
import { PROJECT_DETAILS } from "@pace/constants";
// hooks
@@ -156,9 +156,9 @@ export const ProjectSettingsMemberDefaults = observer(function ProjectSettingsMe
)}
/>
) : (
-
-
-
+
+
+
)}
@@ -177,9 +177,9 @@ export const ProjectSettingsMemberDefaults = observer(function ProjectSettingsMe
)}
/>
) : (
-
-
-
+
+
+
)}
{currentProjectDetails && (
diff --git a/apps/web/core/components/project/publish-project/modal.tsx b/apps/web/core/components/project/publish-project/modal.tsx
index c72e7e47..103a75ec 100644
--- a/apps/web/core/components/project/publish-project/modal.tsx
+++ b/apps/web/core/components/project/publish-project/modal.tsx
@@ -17,7 +17,8 @@ import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { TProjectPublishLayouts, TProjectPublishSettings } from "@pace/types";
// ui
import { Switch } from "@makeplane/propel/components/switch";
-import { Loader, CustomSelect, ModalCore, EModalWidth } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { CustomSelect, ModalCore, EModalWidth } from "@pace/ui";
// helpers
import { copyTextToClipboard } from "@pace/utils";
// hooks
@@ -196,12 +197,12 @@ export const PublishProjectModal = observer(function PublishProjectModal(props:
{/* content */}
{fetchSettingsLoader ? (
-
-
-
-
-
-
+
+
+
+
+
+
) : (
{isProjectPublished && projectPublishSettings && (
diff --git a/apps/web/core/components/readonly/state.tsx b/apps/web/core/components/readonly/state.tsx
index 299c0106..9cf72d8d 100644
--- a/apps/web/core/components/readonly/state.tsx
+++ b/apps/web/core/components/readonly/state.tsx
@@ -9,7 +9,7 @@ import { observer } from "mobx-react";
// pace imports
import { useTranslation } from "@pace/i18n";
import { StateGroupIcon } from "@pace/propel/icons";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn } from "@pace/utils";
// hooks
import { useProjectState } from "@/hooks/store/use-project-state";
@@ -52,10 +52,10 @@ export const ReadonlyState = observer(function ReadonlyState(props: TReadonlySta
if (stateLoader) {
return (
-
-
-
-
+
+
+
+
);
}
diff --git a/apps/web/core/components/rich-filters/filter-item/loader.tsx b/apps/web/core/components/rich-filters/filter-item/loader.tsx
index 3ef59452..784b9b2d 100644
--- a/apps/web/core/components/rich-filters/filter-item/loader.tsx
+++ b/apps/web/core/components/rich-filters/filter-item/loader.tsx
@@ -4,12 +4,12 @@
* See the LICENSE file for details.
*/
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function FilterItemLoader() {
return (
-
-
-
+
+
+
);
}
diff --git a/apps/web/core/components/rich-filters/filters-row.tsx b/apps/web/core/components/rich-filters/filters-row.tsx
index 0ffa8b16..1ce69afd 100644
--- a/apps/web/core/components/rich-filters/filters-row.tsx
+++ b/apps/web/core/components/rich-filters/filters-row.tsx
@@ -12,7 +12,9 @@ import { Transition } from "@headlessui/react";
import { Button } from "@pace/propel/button";
import type { IFilterInstance } from "@pace/shared-state";
import type { TExternalFilter, TFilterProperty } from "@pace/types";
-import { cn, EHeaderVariant, Header, Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { EHeaderVariant, Header } from "@pace/ui";
+import { cn } from "@pace/utils";
// local imports
import type { TAddFilterButtonProps } from "./add-filters/button";
import { AddFilterButton } from "./add-filters/button";
@@ -128,9 +130,9 @@ export const FiltersRow = observer(function FiltersRow
-
-
-
+
+
+
);
}
diff --git a/apps/web/core/components/settings/heading.tsx b/apps/web/core/components/settings/heading.tsx
index 2bbd7a27..f90e0cdc 100644
--- a/apps/web/core/components/settings/heading.tsx
+++ b/apps/web/core/components/settings/heading.tsx
@@ -5,7 +5,7 @@
*/
// pace imports
-import { cn } from "@pace/ui";
+import { cn } from "@pace/utils";
type Props = {
className?: string;
diff --git a/apps/web/core/components/settings/profile/heading.tsx b/apps/web/core/components/settings/profile/heading.tsx
index a6938f49..24bdfaf1 100644
--- a/apps/web/core/components/settings/profile/heading.tsx
+++ b/apps/web/core/components/settings/profile/heading.tsx
@@ -5,7 +5,7 @@
*/
// pace imports
-import { cn } from "@pace/ui";
+import { cn } from "@pace/utils";
type Props = {
className?: string;
diff --git a/apps/web/core/components/stickies/layout/stickies-infinite.tsx b/apps/web/core/components/stickies/layout/stickies-infinite.tsx
index c773a49c..dc7689e9 100644
--- a/apps/web/core/components/stickies/layout/stickies-infinite.tsx
+++ b/apps/web/core/components/stickies/layout/stickies-infinite.tsx
@@ -9,7 +9,8 @@ import { observer } from "mobx-react";
import { useParams } from "@/app/hooks/navigation";
import useSWR from "swr";
import { STICKIES_PER_PAGE } from "@pace/constants";
-import { ContentWrapper, Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
+import { ContentWrapper } from "@pace/ui";
import { cn } from "@pace/utils";
import { useIntersectionObserver } from "@/hooks/use-intersection-observer";
import { useSticky } from "@/hooks/use-stickies";
@@ -55,9 +56,9 @@ export const StickiesInfinite = observer(function StickiesInfinite() {
id="intersection-element"
>
-
-
-
+
+
+
)
diff --git a/apps/web/core/components/stickies/layout/stickies-loader.tsx b/apps/web/core/components/stickies/layout/stickies-loader.tsx
index 764c42fa..deebed3c 100644
--- a/apps/web/core/components/stickies/layout/stickies-loader.tsx
+++ b/apps/web/core/components/stickies/layout/stickies-loader.tsx
@@ -5,48 +5,48 @@
*/
// pace ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
export function StickiesLoader() {
return (
{Array.from({ length: 4 }).map((_, index) => (
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
))}
);
diff --git a/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx
index cdca18b8..c38a06b6 100644
--- a/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx
+++ b/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx
@@ -6,7 +6,7 @@
import React from "react";
// ui
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { InboxSidebarLoader } from "./inbox-sidebar-loader";
export function InboxLayoutLoader() {
@@ -16,15 +16,15 @@ export function InboxLayoutLoader() {
-
+
-
-
-
-
+
+
+
+
-
-
+
+
);
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 74692f35..4afcf2ec 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
@@ -10,7 +10,7 @@ import { CheckDoneOutline, RefreshOutline } from "@makeplane/propel/icons";
import { ENotificationLoader, ENotificationQueryParamType } from "@pace/constants";
import { useTranslation } from "@pace/i18n";
import { Tooltip } from "@makeplane/propel/components/tooltip";
-import { Spinner } from "@pace/ui";
+import { Spinner } from "@pace/propel/spinners";
// hooks
import { useWorkspaceNotifications } from "@/hooks/store/notifications";
import { usePlatformOS } from "@/hooks/use-platform-os";
diff --git a/apps/web/core/components/workspace/sidebar/projects-list.tsx b/apps/web/core/components/workspace/sidebar/projects-list.tsx
index 5680a2eb..8dac3486 100644
--- a/apps/web/core/components/workspace/sidebar/projects-list.tsx
+++ b/apps/web/core/components/workspace/sidebar/projects-list.tsx
@@ -18,7 +18,7 @@ import { useTranslation } from "@pace/i18n";
import { IconButton } from "@pace/propel/icon-button";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import { Tooltip } from "@makeplane/propel/components/tooltip";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { copyUrlToClipboard, cn, orderJoinedProjects } from "@pace/utils";
// components
import { CreateProjectModal } from "@/components/project/create-project-modal";
@@ -228,11 +228,11 @@ export const SidebarProjectsList = observer(function SidebarProjectsList() {
leaveTo="transform scale-95 opacity-0"
>
{loader === "init-loader" && (
-
+
{Array.from({ length: 4 }).map((_, index) => (
-
+
))}
-
+
)}
{isAllProjectsListOpen && (
diff --git a/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx
index d3214d6b..ea9c67e9 100644
--- a/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx
+++ b/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx
@@ -15,7 +15,7 @@ import { Menu, Transition } from "@headlessui/react";
import { useTranslation } from "@pace/i18n";
import { TOAST_TYPE, setToast } from "@pace/propel/toast";
import type { IWorkspace } from "@pace/types";
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { orderWorkspacesList, cn } from "@pace/utils";
// helpers
import { AppSidebarItem } from "@/components/sidebar/sidebar-item";
@@ -178,10 +178,10 @@ export const WorkspaceMenuRoot = observer(function WorkspaceMenuRoot(props: Work
) : (
-
-
-
-
+
+
+
+
)}
diff --git a/apps/web/package.json b/apps/web/package.json
index d98c1629..5a77468e 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -1,6 +1,6 @@
{
"name": "web",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/package.json b/package.json
index 7a92945c..4a398755 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "pace",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "Project management that keeps pace with the work",
"license": "AGPL-3.0",
diff --git a/packages/codemods/package.json b/packages/codemods/package.json
index e0a2083a..8b4c7e41 100644
--- a/packages/codemods/package.json
+++ b/packages/codemods/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/codemods",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"scripts": {
"check:format": "oxfmt --check .",
@@ -10,6 +10,7 @@
"fix:lint": "oxlint --fix .",
"function-declaration": "jscodeshift -t ./function-declaration.ts --extensions=tsx --parser=tsx ../../apps/*/app ../../apps/*/core ../../apps/*/helpers ../../packages/*/src --ignore-pattern='**/node_modules/**' --ignore-pattern='**/dist/**' --ignore-pattern='**/build/**' --ignore-pattern='**/*.d.ts'",
"headlessui-v2-default-tags": "jscodeshift -t ./headlessui-v2-default-tags.ts --extensions=tsx --parser=tsx ../../apps/*/app ../../apps/*/core ../../apps/*/helpers ../../packages/*/src --ignore-pattern='**/node_modules/**' --ignore-pattern='**/dist/**' --ignore-pattern='**/build/**' --ignore-pattern='**/*.d.ts'",
+ "ui-loader-to-propel-skeleton": "jscodeshift -t ./ui-loader-to-propel-skeleton.ts --extensions=tsx --parser=tsx ../../apps/space/core ../../apps/web/app ../../apps/web/core ../../packages/editor/src --ignore-pattern='**/node_modules/**' --ignore-pattern='**/dist/**' --ignore-pattern='**/build/**' --ignore-pattern='**/*.d.ts'",
"remove-directives": "jscodeshift -t ./remove-directives.ts --extensions=ts,tsx --parser=tsx ../../apps/*/app ../../apps/*/core ../../apps/*/helpers ../../packages/*/src --ignore-pattern='**/node_modules/**' --ignore-pattern='**/dist/**' --ignore-pattern='**/build/**' --ignore-pattern='**/*.d.ts'",
"test": "vitest run"
},
diff --git a/packages/codemods/tests/ui-loader-to-propel-skeleton.spec.ts b/packages/codemods/tests/ui-loader-to-propel-skeleton.spec.ts
new file mode 100644
index 00000000..619e8985
--- /dev/null
+++ b/packages/codemods/tests/ui-loader-to-propel-skeleton.spec.ts
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2023-present Plane Software, Inc. and contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * See the LICENSE file for details.
+ */
+
+import { describe, it, expect } from "vitest";
+import { applyTransform } from "@hypermod/utils";
+import * as transformer from "../ui-loader-to-propel-skeleton";
+
+const apply = (source: string) =>
+ applyTransform(transformer, source, { parser: "tsx" });
+
+describe("ui-loader-to-propel-skeleton", () => {
+ it("moves a sole-specifier import and renames the element and its .Item", async () => {
+ const result = await apply(`
+ import { Loader } from "@pace/ui";
+
+ export const Placeholder = () => (
+
+
+
+ );
+ `);
+
+ expect(result).toContain(
+ `import { Skeleton } from "@pace/propel/skeleton";`
+ );
+ expect(result).not.toContain("@pace/ui");
+ expect(result).toContain(``);
+ expect(result).toContain(` `);
+ expect(result).toContain(" ");
+ });
+
+ it("splits Loader out and leaves the other @pace/ui specifiers in place", async () => {
+ const result = await apply(`
+ import { Loader, CustomMenu, Row } from "@pace/ui";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).toContain(
+ `import { Skeleton } from "@pace/propel/skeleton";`
+ );
+ expect(result).toContain(`import { CustomMenu, Row } from "@pace/ui";`);
+ });
+
+ it("removes a trailing Loader specifier without leaving a dangling comma", async () => {
+ const result = await apply(`
+ import { CustomMenu, Loader } from "@pace/ui";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).toContain(`import { CustomMenu } from "@pace/ui";`);
+ expect(result).not.toMatch(/,\s*\}/);
+ });
+
+ it("keeps the leading comment above both statements", async () => {
+ const result = await apply(`
+ // ui
+ import { Loader, Row } from "@pace/ui";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).toMatch(
+ /\/\/ ui\n\s*import \{ Skeleton \} from "@pace\/propel\/skeleton";\n\s*import \{ Row \} from "@pace\/ui";/
+ );
+ });
+
+ it("handles a multi-line specifier list", async () => {
+ const result = await apply(`
+ import {
+ CustomMenu,
+ Loader,
+ Row,
+ } from "@pace/ui";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).toContain("CustomMenu,");
+ expect(result).toContain("Row,");
+ expect(result).not.toMatch(/\bLoader\b/);
+ });
+
+ it("leaves a same-named local component alone when nothing comes from @pace/ui", async () => {
+ const result = await apply(`
+ import { Row } from "@pace/ui";
+
+ function Loader() {
+ return
;
+ }
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).not.toContain("@pace/propel/skeleton");
+ expect(result).toContain("function Loader()");
+ expect(result).toContain(" ");
+ });
+
+ it("leaves a file that imports no UI library untouched", async () => {
+ const result = await apply(`
+ import { Loader } from "@/components/loader";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).not.toContain("@pace/propel/skeleton");
+ expect(result).toContain(`import { Loader } from "@/components/loader";`);
+ });
+
+ it("does not rename a reference shadowed inside a function", async () => {
+ const result = await apply(`
+ import { Loader } from "@pace/ui";
+
+ export function render() {
+ const Loader = () => ;
+ return ;
+ }
+ `);
+
+ expect(result).toContain(
+ `import { Skeleton } from "@pace/propel/skeleton";`
+ );
+ expect(result).toContain("const Loader = () => ;");
+ expect(result).toContain("return ;");
+ });
+
+ it("keeps an aliased local name and renames nothing", async () => {
+ const result = await apply(`
+ import { Loader as UiLoader } from "@pace/ui";
+
+ export const Placeholder = () => ;
+ `);
+
+ expect(result).toContain(
+ `import { Skeleton as UiLoader } from "@pace/propel/skeleton";`
+ );
+ expect(result).toContain(" ");
+ });
+
+ it("preserves the type-only modifier", async () => {
+ const result = await apply(`
+ import type { Loader } from "@pace/ui";
+
+ export type Props = { loader: typeof Loader };
+ `);
+
+ expect(result).toContain(
+ `import type { Skeleton } from "@pace/propel/skeleton";`
+ );
+ expect(result).toContain("typeof Skeleton");
+ });
+
+ it("reprints nothing but the lines it edits, JSX comments included", async () => {
+ // This is the shape recast mangled on an earlier sweep: an oxlint directive inside the JSX, a
+ // self-closing element next to a text node, and blank lines between siblings.
+ const source = `import { Loader } from "@pace/ui";
+
+export const Placeholder = () => (
+
+ {/* oxlint-disable-next-line jsx-a11y/no-static-element-interactions */}
+
+ label
+
+
+
+
+);
+`;
+
+ // applyTransform trims what it returns, hence the trim on the expectation rather than on the input.
+ expect(await apply(source)).toBe(
+ source
+ .replaceAll("Loader", "Skeleton")
+ .replace(`from "@pace/ui"`, `from "@pace/propel/skeleton"`)
+ .trim()
+ );
+ });
+});
diff --git a/packages/codemods/ui-loader-to-propel-skeleton.ts b/packages/codemods/ui-loader-to-propel-skeleton.ts
new file mode 100644
index 00000000..ccc903fa
--- /dev/null
+++ b/packages/codemods/ui-loader-to-propel-skeleton.ts
@@ -0,0 +1,152 @@
+/**
+ * Copyright (c) 2023-present Plane Software, Inc. and contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * See the LICENSE file for details.
+ */
+
+import type {
+ API,
+ ASTPath,
+ FileInfo,
+ ImportDeclaration,
+ ImportSpecifier,
+} from "jscodeshift";
+
+/**
+ * `Loader` from `@pace/ui` -> `Skeleton` from `@pace/propel/skeleton`.
+ *
+ * The two are the same component under two names: both render `animate-pulse` + `role="status"` around their children and expose an `.Item` taking `height`/`width`/`className` with an `"auto"` default, and the class expressions are identical. Skeleton additionally sets `data-slot` and an `aria-label`, which is additive — no selector in the repo targets the old markup (`plane-ui-loader` appears only on the deleted component's own `displayName`).
+ *
+ * Everything keys off the import source, never off the name. `Loader` is a name several app files define for themselves, and one of them (`packages/editor/src/components/editors/document/loader.tsx`) both defines a `DocumentContentLoader` and imports the @pace/ui `Loader`. A transform that matched `` in JSX would rewrite first-party components in the files that never imported anything. The headlessui-v2-default-tags transform makes the same guard for the same reason.
+ *
+ * The AST is used only to locate character offsets; the replacement is spliced into the original text and the source string is returned instead of `root.toSource()`. Reprinting a mutated AST through recast is not byte-preserving — on a 531-file sweep in this repo it rewrote unrelated JSX in 7 files, because recast reprints a whole subtree when it cannot reconcile comment attachment and several files carry `// oxlint-disable-next-line` comments inside their JSX. Splicing keeps every hunk in the 80 files to the import lines and the bare identifier renames.
+ *
+ * Deliberately not done:
+ *
+ * - No merging into an existing `@pace/propel/skeleton` import, and no reordering. A file keeping other @pace/ui symbols gains a second import statement above the one it had; that is what the icons sweep does too, and both oxlint and oxfmt accept it.
+ * - An aliased import (`Loader as X`) keeps its local name — the new import becomes `Skeleton as X` and no reference is touched. There is none in the repo today, but renaming references would otherwise have to prove the alias is free at every use site.
+ * - A reference whose scope resolves to something other than the module-level import is left alone, which is what makes a shadowing `const Loader` inside a function safe.
+ */
+const FROM_SOURCE = "@pace/ui";
+const TO_SOURCE = "@pace/propel/skeleton";
+const FROM_NAME = "Loader";
+const TO_NAME = "Skeleton";
+
+type Splice = { start: number; end: number; text: string };
+
+/** Babel records these; ast-types does not declare them on the node types. */
+type Ranged = { start?: number; end?: number };
+
+const rangeOf = (node: unknown): [number, number] | undefined => {
+ const { start, end } = (node ?? {}) as Ranged;
+ return typeof start === "number" && typeof end === "number"
+ ? [start, end]
+ : undefined;
+};
+
+export default function transform(file: FileInfo, api: API) {
+ const j = api.jscodeshift;
+ const root = j(file.source);
+
+ const splices: Splice[] = [];
+ /** Local names bound to @pace/ui's `Loader` that are safe to rename at their use sites. */
+ const renamedLocals = new Set();
+
+ root
+ .find(j.ImportDeclaration, { source: { value: FROM_SOURCE } })
+ .forEach((path: ASTPath) => {
+ const specifiers = path.node.specifiers ?? [];
+ const index = specifiers.findIndex(
+ (specifier) =>
+ specifier.type === "ImportSpecifier" &&
+ // ast-types types both names as `string | IdentifierKind`; only the string form can be compared.
+ typeof specifier.imported?.name === "string" &&
+ specifier.imported.name === FROM_NAME
+ );
+ if (index === -1) return;
+
+ const specifier = specifiers[index] as ImportSpecifier;
+ const specifierRange = rangeOf(specifier);
+ const declarationRange = rangeOf(path.node);
+ if (!specifierRange || !declarationRange) return;
+
+ const localName =
+ typeof specifier.local?.name === "string"
+ ? specifier.local.name
+ : FROM_NAME;
+ // An alias only has to survive when it differs from both names; `Loader as Skeleton` already binds the target name.
+ const binding =
+ localName === FROM_NAME || localName === TO_NAME
+ ? TO_NAME
+ : `${TO_NAME} as ${localName}`;
+ // `import type { Loader }` binds no runtime value; the replacement has to keep the modifier or the emitted import stops type-checking.
+ const keyword =
+ path.node.importKind === "type" ? "import type" : "import";
+ const declaration = `${keyword} { ${binding} } from "${TO_SOURCE}";`;
+
+ if (specifiers.length === 1) {
+ // Nothing else came from @pace/ui, so the statement itself moves and the file loses the dependency.
+ splices.push({
+ start: declarationRange[0],
+ end: declarationRange[1],
+ text: declaration,
+ });
+ } else {
+ // Cutting to the next specifier's start (or back from the previous one's end when this is the last) takes the separating comma and whitespace with it, whatever the formatting.
+ const neighbour =
+ index + 1 < specifiers.length
+ ? rangeOf(specifiers[index + 1])
+ : rangeOf(specifiers[index - 1]);
+ if (!neighbour) return;
+ const [cutStart, cutEnd] =
+ index + 1 < specifiers.length
+ ? [specifierRange[0], neighbour[0]]
+ : [neighbour[1], specifierRange[1]];
+ splices.push({ start: cutStart, end: cutEnd, text: "" });
+ // Inserted at the `import` keyword, so a leading `// ui` style comment stays above both statements.
+ splices.push({
+ start: declarationRange[0],
+ end: declarationRange[0],
+ text: `${declaration}\n`,
+ });
+ }
+
+ if (localName === FROM_NAME) renamedLocals.add(localName);
+ });
+
+ if (splices.length === 0) return file.source;
+
+ // The scope hangs off Program, not off the File node the root path points at — `root.get().scope` is null, and comparing against null would have matched every unresolved identifier instead of none.
+ const moduleScope = root.find(j.Program).paths()[0]?.scope;
+
+ if (renamedLocals.size > 0 && moduleScope) {
+ const rename = (path: ASTPath<{ name?: unknown }>) => {
+ const name = path.node.name;
+ if (typeof name !== "string" || !renamedLocals.has(name)) return;
+ // The import specifier's own identifiers sit inside a range already being replaced.
+ if (path.parent?.node?.type === "ImportSpecifier") return;
+ // A JSX member expression's property (`Loader.Item` -> the `Item`) must not be touched.
+ if (
+ path.parent?.node?.type === "JSXMemberExpression" &&
+ path.parent.node.property === path.node
+ )
+ return;
+ if (path.scope?.lookup(name) !== moduleScope) return;
+ const range = rangeOf(path.node);
+ if (range)
+ splices.push({ start: range[0], end: range[1], text: TO_NAME });
+ };
+
+ // One pass, not two: ast-types declares JSXIdentifier as a subtype of Identifier, so this collection already contains the JSX element names. Searching both types would splice every one of them twice.
+ root.find(j.Identifier).forEach(rename);
+ }
+
+ // Back to front, so an earlier splice never invalidates a later offset.
+ let output = file.source;
+ for (const splice of splices.toSorted((a, b) => b.start - a.start)) {
+ output =
+ output.slice(0, splice.start) + splice.text + output.slice(splice.end);
+ }
+
+ return output;
+}
diff --git a/packages/constants/package.json b/packages/constants/package.json
index 1b7db1d7..04fd2cdc 100644
--- a/packages/constants/package.json
+++ b/packages/constants/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/constants",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/packages/editor/package.json b/packages/editor/package.json
index 0d79abfe..2e72827a 100644
--- a/packages/editor/package.json
+++ b/packages/editor/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/editor",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "Core Editor that powers Pace",
"keywords": [
diff --git a/packages/editor/src/components/editors/document/loader.tsx b/packages/editor/src/components/editors/document/loader.tsx
index a37dddf8..61461027 100644
--- a/packages/editor/src/components/editors/document/loader.tsx
+++ b/packages/editor/src/components/editors/document/loader.tsx
@@ -5,7 +5,7 @@
*/
// pace imports
-import { Loader } from "@pace/ui";
+import { Skeleton } from "@pace/propel/skeleton";
import { cn } from "@pace/utils";
type Props = {
@@ -17,41 +17,41 @@ export function DocumentContentLoader(props: Props) {
return (
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
);
}
diff --git a/packages/hooks/package.json b/packages/hooks/package.json
index 2486f499..6e7e1617 100644
--- a/packages/hooks/package.json
+++ b/packages/hooks/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/hooks",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "React hooks that are shared across multiple apps internally",
"license": "AGPL-3.0",
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index b250a04a..40a8fe4c 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/i18n",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "I18n shared across multiple apps internally",
"license": "AGPL-3.0",
diff --git a/packages/propel/package.json b/packages/propel/package.json
index cb7fffe5..9896d4ce 100644
--- a/packages/propel/package.json
+++ b/packages/propel/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/propel",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/packages/ui/src/avatar/avatar-group.tsx b/packages/propel/src/avatar/avatar-group.tsx
similarity index 94%
rename from packages/ui/src/avatar/avatar-group.tsx
rename to packages/propel/src/avatar/avatar-group.tsx
index 2b8162b5..edd416b5 100644
--- a/packages/ui/src/avatar/avatar-group.tsx
+++ b/packages/propel/src/avatar/avatar-group.tsx
@@ -6,12 +6,12 @@
import React from "react";
// ui
-import { Tooltip } from "@pace/propel/tooltip";
+import { Tooltip } from "../tooltip";
// helpers
import { cn } from "../utils";
// types
-import type { TAvatarSize } from "./helper";
-import { getSizeInfo, isAValidNumber } from "./helper";
+import type { TAvatarSize } from "./avatar";
+import { getSizeInfo, isAValidNumber } from "./avatar";
type Props = {
/**
diff --git a/packages/propel/src/avatar/avatar.tsx b/packages/propel/src/avatar/avatar.tsx
index e4ce720f..dc81d690 100644
--- a/packages/propel/src/avatar/avatar.tsx
+++ b/packages/propel/src/avatar/avatar.tsx
@@ -6,6 +6,7 @@
import React from "react";
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
+import { Tooltip } from "../tooltip";
import { cn } from "../utils/classname";
export type TAvatarSize = "sm" | "md" | "base" | "lg" | number;
@@ -15,7 +16,7 @@ type Props = {
fallbackBackgroundColor?: string; //The background color if the avatar image fails to load
fallbackText?: string;
fallbackTextColor?: string; //The text color if the avatar image fails to load
- showTooltip?: boolean;
+ showTooltip?: boolean; //Whether the name is surfaced as a hover tooltip. @default true
size?: TAvatarSize; //The size of the avatars
shape?: "circle" | "square";
src?: string; //The source of the avatar image
@@ -91,6 +92,7 @@ export function Avatar(props: Props) {
fallbackBackgroundColor,
fallbackText,
fallbackTextColor,
+ showTooltip = true,
size = "md",
shape = "circle",
src,
@@ -102,32 +104,41 @@ export function Avatar(props: Props) {
const fallbackLetter = name?.[0]?.toUpperCase() ?? fallbackText ?? "?";
return (
-
-
-
-
- {fallbackLetter}
-
-
-
+ // The tooltip is how an avatar says whose it is: the label is the only text the component renders beyond a single initial. `disabled` rather than a conditional wrapper keeps the DOM identical either way, so turning the tooltip off cannot reflow a row of avatars.
+
+
+
+ {/* `alt` carries the name for anyone not hovering: the tooltip is pointer-only, and an avatar image with no alt text reads as its URL. */}
+
+
+ {fallbackLetter}
+
+
+
+
);
}
diff --git a/packages/propel/src/avatar/index.ts b/packages/propel/src/avatar/index.ts
index 522264e6..af722d71 100644
--- a/packages/propel/src/avatar/index.ts
+++ b/packages/propel/src/avatar/index.ts
@@ -5,3 +5,4 @@
*/
export * from "./avatar";
+export * from "./avatar-group";
diff --git a/packages/propel/src/spinners/circular-spinner.tsx b/packages/propel/src/spinners/circular-spinner.tsx
index e64f8c08..ae742696 100644
--- a/packages/propel/src/spinners/circular-spinner.tsx
+++ b/packages/propel/src/spinners/circular-spinner.tsx
@@ -6,7 +6,7 @@
import * as React from "react";
// helpers
-import clsx from "clsx";
+import { cn } from "../utils/classname";
export interface ISpinner extends React.SVGAttributes {
height?: string;
@@ -21,7 +21,7 @@ export function Spinner({ height = "32px", width = "32px", className = "" }: ISp
aria-hidden="true"
height={height}
width={width}
- className={clsx("animate-spin text-secondary", className)}
+ className={cn("animate-spin fill-accent-primary text-secondary", className)}
viewBox="0 0 100 101"
fill="none"
xmlns="http://www.w3.org/2000/svg"
@@ -31,8 +31,8 @@ export function Spinner({ height = "32px", width = "32px", className = "" }: ISp
fill="currentColor"
/>
Loading...
diff --git a/packages/propel/src/tooltip/root.tsx b/packages/propel/src/tooltip/root.tsx
index ff5b20c9..4ea69301 100644
--- a/packages/propel/src/tooltip/root.tsx
+++ b/packages/propel/src/tooltip/root.tsx
@@ -32,12 +32,13 @@ export function Tooltip(props: ITooltipProps) {
const {
tooltipHeading,
tooltipContent,
- position = "top",
+ position,
children,
disabled = false,
className = "",
openDelay = 200,
- side = "bottom",
+ // `position` wins when it is given, so it must not be defaulted: with `position = "top"` in this list the branch below always took it and `side`/`align` were declared props that could never reach the positioner. The defaults live here instead, and "top"/"center" is exactly what `convertPlacementToSideAndAlign("top")` returned, so every existing call site that passes neither is placed where it was.
+ side = "top",
align = "center",
sideOffset = 10,
closeDelay,
diff --git a/packages/services/package.json b/packages/services/package.json
index 92c6b249..8ab1c903 100644
--- a/packages/services/package.json
+++ b/packages/services/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/services",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/packages/shared-state/package.json b/packages/shared-state/package.json
index 617271b5..ab0eed30 100644
--- a/packages/shared-state/package.json
+++ b/packages/shared-state/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/shared-state",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "Shared state shared across multiple apps internally",
"license": "AGPL-3.0",
diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json
index 21cb8df3..dd765770 100644
--- a/packages/tailwind-config/package.json
+++ b/packages/tailwind-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/tailwind-config",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "common tailwind configuration across monorepo",
"license": "AGPL-3.0",
diff --git a/packages/types/package.json b/packages/types/package.json
index cb393c37..455f6243 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/types",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"type": "module",
diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json
index 620771e7..fc2d195f 100644
--- a/packages/typescript-config/package.json
+++ b/packages/typescript-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/typescript-config",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"license": "AGPL-3.0",
"files": [
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 844132e2..5255048e 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/ui",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "UI components shared across multiple apps internally",
"license": "AGPL-3.0",
diff --git a/packages/ui/src/avatar/avatar.stories.tsx b/packages/ui/src/avatar/avatar.stories.tsx
deleted file mode 100644
index 9f96059f..00000000
--- a/packages/ui/src/avatar/avatar.stories.tsx
+++ /dev/null
@@ -1,24 +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 type { Meta, StoryObj } from "@storybook/react";
-import { Avatar } from "./avatar";
-
-const meta: Meta = {
- title: "Avatar",
- component: Avatar,
-};
-
-export default meta;
-type Story = StoryObj;
-
-export const Default: Story = {
- args: { name: "John Doe" },
-};
-
-export const Large: Story = {
- args: { name: "John Doe" },
-};
diff --git a/packages/ui/src/avatar/avatar.tsx b/packages/ui/src/avatar/avatar.tsx
deleted file mode 100644
index 1d29b047..00000000
--- a/packages/ui/src/avatar/avatar.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-// ui
-import { Tooltip } from "@pace/propel/tooltip";
-// helpers
-import { cn } from "../utils";
-import type { TAvatarSize } from "./helper";
-import { getBorderRadius, getSizeInfo, isAValidNumber } from "./helper";
-
-type Props = {
- /**
- * The name of the avatar which will be displayed on the tooltip
- */
- name?: string;
- /**
- * The background color if the avatar image fails to load
- */
- fallbackBackgroundColor?: string;
- /**
- * The text to display if the avatar image fails to load
- */
- fallbackText?: string;
- /**
- * The text color if the avatar image fails to load
- */
- fallbackTextColor?: string;
- /**
- * Whether to show the tooltip or not
- * @default true
- */
- showTooltip?: boolean;
- /**
- * The size of the avatars
- * Possible values: "sm", "md", "base", "lg"
- * @default "md"
- */
- size?: TAvatarSize;
- /**
- * The shape of the avatar
- * Possible values: "circle", "square"
- * @default "circle"
- */
- shape?: "circle" | "square";
- /**
- * The source of the avatar image
- */
- src?: string;
- /**
- * The custom CSS class name to apply to the component
- */
- className?: string;
-};
-
-export function Avatar(props: Props) {
- const {
- name,
- fallbackBackgroundColor,
- fallbackText,
- fallbackTextColor,
- showTooltip = true,
- size = "md",
- shape = "circle",
- src,
- className = "",
- } = props;
-
- // get size details based on the size prop
- const sizeInfo = getSizeInfo(size);
-
- return (
-
-
- {src ? (
-
- ) : (
-
- {name?.[0]?.toUpperCase() ?? fallbackText ?? "?"}
-
- )}
-
-
- );
-}
diff --git a/packages/ui/src/avatar/helper.tsx b/packages/ui/src/avatar/helper.tsx
deleted file mode 100644
index b72cbcc3..00000000
--- a/packages/ui/src/avatar/helper.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-export type TAvatarSize = "sm" | "md" | "base" | "lg" | number;
-
-/**
- * Get the size details based on the size prop
- * @param size The size of the avatar
- * @returns The size details
- */
-export const getSizeInfo = (size: TAvatarSize) => {
- switch (size) {
- case "sm":
- return {
- avatarSize: "h-4 w-4",
- fontSize: "text-11",
- spacing: "-space-x-1",
- };
- case "md":
- return {
- avatarSize: "h-5 w-5",
- fontSize: "text-11",
- spacing: "-space-x-1",
- };
- case "base":
- return {
- avatarSize: "h-6 w-6",
- fontSize: "text-13",
- spacing: "-space-x-1.5",
- };
- case "lg":
- return {
- avatarSize: "h-7 w-7",
- fontSize: "text-13",
- spacing: "-space-x-1.5",
- };
- default:
- return {
- avatarSize: "h-5 w-5",
- fontSize: "text-11",
- spacing: "-space-x-1",
- };
- }
-};
-
-/**
- * Get the border radius based on the shape prop
- * @param shape The shape of the avatar
- * @returns The border radius
- */
-export const getBorderRadius = (shape: "circle" | "square") => {
- switch (shape) {
- case "circle":
- return "rounded-full";
- case "square":
- return "rounded-sm";
- default:
- return "rounded-full";
- }
-};
-
-/**
- * Check if the value is a valid number
- * @param value The value to check
- * @returns Whether the value is a valid number or not
- */
-export const isAValidNumber = (value: unknown) => typeof value === "number" && !isNaN(value);
diff --git a/packages/ui/src/avatar/index.ts b/packages/ui/src/avatar/index.ts
deleted file mode 100644
index 2fbdafee..00000000
--- a/packages/ui/src/avatar/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-export * from "./avatar-group";
-export * from "./avatar";
diff --git a/packages/ui/src/card/card.tsx b/packages/ui/src/card/card.tsx
deleted file mode 100644
index 4ee7f7e7..00000000
--- a/packages/ui/src/card/card.tsx
+++ /dev/null
@@ -1,40 +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 * as React from "react";
-import { cn } from "../utils";
-import type { TCardDirection, TCardSpacing, TCardVariant } from "./helper";
-import { ECardDirection, ECardSpacing, ECardVariant, getCardStyle } from "./helper";
-
-export interface CardProps extends React.HTMLAttributes {
- variant?: TCardVariant;
- spacing?: TCardSpacing;
- direction?: TCardDirection;
- className?: string;
- children: React.ReactNode;
-}
-
-const Card = React.forwardRef(function Card(props: CardProps, ref: React.ForwardedRef) {
- const {
- variant = ECardVariant.WITH_SHADOW,
- direction = ECardDirection.COLUMN,
- className = "",
- spacing = ECardSpacing.LG,
- children,
- ...rest
- } = props;
-
- const style = getCardStyle(variant, spacing, direction);
- return (
-
- {children}
-
- );
-});
-
-Card.displayName = "plane-ui-card";
-
-export { Card, ECardVariant, ECardSpacing, ECardDirection };
diff --git a/packages/ui/src/card/helper.tsx b/packages/ui/src/card/helper.tsx
deleted file mode 100644
index cc914c5d..00000000
--- a/packages/ui/src/card/helper.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-export enum ECardVariant {
- WITHOUT_SHADOW = "without-shadow",
- WITH_SHADOW = "with-shadow",
-}
-export enum ECardDirection {
- ROW = "row",
- COLUMN = "column",
-}
-export enum ECardSpacing {
- SM = "sm",
- LG = "lg",
-}
-export type TCardVariant = ECardVariant.WITHOUT_SHADOW | ECardVariant.WITH_SHADOW;
-export type TCardDirection = ECardDirection.ROW | ECardDirection.COLUMN;
-export type TCardSpacing = ECardSpacing.SM | ECardSpacing.LG;
-
-export interface ICardProperties {
- [key: string]: string;
-}
-
-const DEFAULT_STYLE = "bg-surface-1 rounded-lg border-[0.5px] border-subtle w-full flex flex-col";
-export const containerStyle: ICardProperties = {
- [ECardVariant.WITHOUT_SHADOW]: "",
- [ECardVariant.WITH_SHADOW]: "hover:shadow-raised-200 duration-300",
-};
-export const spacings = {
- [ECardSpacing.SM]: "p-4",
- [ECardSpacing.LG]: "p-6",
-};
-export const directions = {
- [ECardDirection.ROW]: "flex-row space-x-3",
- [ECardDirection.COLUMN]: "flex-col space-y-3",
-};
-export const getCardStyle = (variant: TCardVariant, spacing: TCardSpacing, direction: TCardDirection) =>
- DEFAULT_STYLE + " " + directions[direction] + " " + containerStyle[variant] + " " + spacings[spacing];
diff --git a/packages/ui/src/card/index.ts b/packages/ui/src/card/index.ts
deleted file mode 100644
index 4260f850..00000000
--- a/packages/ui/src/card/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-export * from "./card";
diff --git a/packages/ui/src/form-fields/index.ts b/packages/ui/src/form-fields/index.ts
index 1ffa30fd..675fd3bd 100644
--- a/packages/ui/src/form-fields/index.ts
+++ b/packages/ui/src/form-fields/index.ts
@@ -4,7 +4,7 @@
* See the LICENSE file for details.
*/
-export * from "./input";
+// `./input` is deliberately not re-exported: @pace/propel/input is the same component and is what apps import now. The file stays because input-color-picker still composes it, and that one is a @pace/ui composite with no propel counterpart.
export * from "./textarea";
export * from "./input-color-picker";
export * from "./password";
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index e00a1604..0fc5f048 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -5,9 +5,7 @@
*/
export * from "./app-progress-bar";
-export * from "./avatar";
export * from "./breadcrumbs";
-export * from "./card";
export * from "./collapsible";
export * from "./content-wrapper";
export * from "./control-link";
@@ -19,12 +17,10 @@ export * from "./favorite-star";
export * from "./form-fields";
export * from "./header";
export * from "./link";
-export * from "./loader";
export * from "./modals";
export * from "./popovers";
export * from "./row";
export * from "./sortable";
-export * from "./spinners";
export * from "./tables";
export * from "./tag";
export * from "./utils";
diff --git a/packages/ui/src/loader.tsx b/packages/ui/src/loader.tsx
deleted file mode 100644
index 836a412b..00000000
--- a/packages/ui/src/loader.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 React from "react";
-// helpers
-import { cn } from "./utils";
-
-type Props = {
- children: React.ReactNode;
- className?: string;
-};
-
-function Loader({ children, className = "" }: Props) {
- return (
-
- {children}
-
- );
-}
-
-type ItemProps = {
- height?: string;
- width?: string;
- className?: string;
-};
-
-function Item({ height = "auto", width = "auto", className = "" }: ItemProps) {
- return
;
-}
-
-Loader.Item = Item;
-
-Loader.displayName = "plane-ui-loader";
-
-export { Loader };
diff --git a/packages/ui/src/spinners/circular-spinner.tsx b/packages/ui/src/spinners/circular-spinner.tsx
deleted file mode 100644
index 59aacd6c..00000000
--- a/packages/ui/src/spinners/circular-spinner.tsx
+++ /dev/null
@@ -1,41 +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 * as React from "react";
-// helpers
-import { cn } from "../utils";
-
-export interface ISpinner extends React.SVGAttributes {
- height?: string;
- width?: string;
- className?: string | undefined;
-}
-
-export function Spinner({ height = "32px", width = "32px", className = "" }: ISpinner) {
- return (
-
- );
-}
diff --git a/packages/ui/src/spinners/index.ts b/packages/ui/src/spinners/index.ts
deleted file mode 100644
index 6f87ad95..00000000
--- a/packages/ui/src/spinners/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright (c) 2023-present Plane Software, Inc. and contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- * See the LICENSE file for details.
- */
-
-export * from "./circular-spinner";
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 848cce38..639c2aa4 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@pace/utils",
- "version": "1.4.41",
+ "version": "1.4.44",
"private": true,
"description": "Helper functions shared across multiple apps internally",
"license": "AGPL-3.0",