chore: folder structure updates

This commit is contained in:
guru_sainath 2024-05-23 15:37:25 +05:30
parent 67b9d4a8f2
commit d6325320e9
31 changed files with 300 additions and 84 deletions

View File

@ -5,7 +5,7 @@ import { IEstimate } from "@plane/types";
// store hooks
import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui";
import { EmptyState } from "@/components/empty-state";
import { CreateUpdateEstimateModal, DeleteEstimateModal, EstimateListItem } from "@/components/estimates";
import { CreateUpdateEstimateModal, DeleteEstimateModal, EstimateListItem } from "@/components/estimates-legacy";
import { EmptyStateType } from "@/constants/empty-state";
import { orderArrayBy } from "@/helpers/array.helper";
import { useEstimate, useProject } from "@/hooks/store";

View File

@ -0,0 +1,4 @@
export * from "./create-update-estimate-modal";
export * from "./delete-estimate-modal";
export * from "./estimate-list-item";
export * from "./estimates-list";

View File

@ -6,12 +6,11 @@ import { IEstimate } from "@plane/types";
import { Button } from "@plane/ui";
// components
import { EModalPosition, EModalWidth, ModalCore } from "@/components/core";
import { EstimateCreateStageOne, EstimateCreateStageTwo } from "@/components/estimates";
import { TEstimateSystemKeys, EEstimateSystem, TEstimateSystemKeyObject } from "@/components/estimates/types";
// constants
import { ESTIMATE_SYSTEMS } from "@/constants/estimates";
// ee components
import { EstimateCreateStageOne, EstimateCreateStageTwo } from "@/ee/components/estimates";
// types
import { TEstimateSystemKeys, EEstimateSystem, TEstimateSystemKeyObject } from "@/ee/components/estimates/types";
type Props = {
isOpen: boolean;

View File

@ -4,7 +4,7 @@ import { RadioInput } from "@/components/radio-group";
// constants
import { ESTIMATE_SYSTEMS } from "@/constants/estimates";
// types
import { TEstimateSystemKeys } from "@/ee/components/estimates/types";
import { TEstimateSystemKeys } from "@/components/estimates/types";
type TEstimateCreateStageOne = {
estimateSystem: TEstimateSystemKeys;

View File

@ -2,18 +2,17 @@ import { FC } from "react";
import { Plus } from "lucide-react";
import { Button } from "@plane/ui";
// components
import { Sortable } from "@/components/sortable/sortable";
// constants
import { ESTIMATE_SYSTEMS } from "@/constants/estimates";
import { EstimateItem } from "@/ee/components/estimates";
// types
import { EstimateItem } from "@/components/estimates";
import {
EEstimateSystem,
TEstimatePointNumeric,
TEstimatePointString,
TEstimateSystemKeyObject,
TEstimateSystemKeys,
} from "@/ee/components/estimates/types";
} from "@/components/estimates/types";
import { Sortable } from "@/components/sortable/sortable";
// constants
import { ESTIMATE_SYSTEMS } from "@/constants/estimates";
type TEstimateCreateStageTwo = {
estimateSystem: EEstimateSystem;

View File

@ -0,0 +1,39 @@
import { FC } from "react";
import Image from "next/image";
import { useTheme } from "next-themes";
import { Button } from "@plane/ui";
type TEstimateEmptyScreen = {
onButtonClick: () => void;
};
export const EstimateEmptyScreen: FC<TEstimateEmptyScreen> = (props) => {
// props
const { onButtonClick } = props;
const { resolvedTheme } = useTheme();
const emptyScreenImage = `/empty-state/project-settings/estimates-${
resolvedTheme === "light" ? "light" : "dark"
}.webp`;
return (
<div className="relative flex flex-col justify-center items-center text-center gap-8 border border-custom-border-300 rounded bg-custom-background-90 py-20">
<div className="flex-shrink-0 w-[120px] h-[120px] overflow-hidden relative flex justify-center items-center">
<Image
src={emptyScreenImage}
alt="Empty estimate image"
width={100}
height={100}
className="object-contain w-full h-full"
/>
</div>
<div className="space-y-2">
<h3 className="text-xl font-medium text-custom-text-100">No estimate systems yet</h3>
<p className="text-base text-custom-text-300">Explain estimates system here</p>
</div>
<div>
<Button onClick={onButtonClick}>Add Estimate System</Button>
</div>
</div>
);
};

View File

@ -1,4 +1,12 @@
export * from "./create-update-estimate-modal";
export * from "./delete-estimate-modal";
export * from "./estimate-list-item";
export * from "./estimates-list";
export * from "./root";
export * from "./empty-screen";
export * from "./estimate-search";
export * from "./estimate-disable";
export * from "./estimate-item";
// estimate create
export * from "./create";
// estimate update
// estimate delete

View File

@ -4,11 +4,11 @@ import { IEstimate } from "@plane/types";
import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui";
// components
import { EmptyState } from "@/components/empty-state";
import { DeleteEstimateModal, EstimateListItem } from "@/components/estimates";
import { CreateEstimateModal, EstimateEmptyScreen } from "@/components/estimates";
import { DeleteEstimateModal, EstimateListItem } from "@/components/estimates-legacy";
// constants
import { EmptyStateType } from "@/constants/empty-state";
// ee components
import { CreateEstimateModal } from "@/ee/components/estimates";
// hooks
import { useProject, useProjectEstimates } from "@/hooks/store";
@ -23,13 +23,16 @@ export const EstimateRoot: FC<TEstimateRoot> = (props) => {
const { updateProject, currentProjectDetails } = useProject();
const { loader, projectEstimateIds, estimateById, getAllEstimates } = useProjectEstimates(projectId);
// states
const [isEstimateCreateModalOpen, setIsEstimateCreateModalOpen] = useState(true);
const [isEstimateCreateModalOpen, setIsEstimateCreateModalOpen] = useState(false);
const [isEstimateDeleteModalOpen, setIsEstimateDeleteModalOpen] = useState<string | null>(null);
const [estimateToUpdate, setEstimateToUpdate] = useState<IEstimate | undefined>();
console.log("workspaceSlug", workspaceSlug);
console.log("projectId", projectId);
const { isLoading: isSWRLoading } = useSWR(
workspaceSlug && projectId ? `PROJECT_ESTIMATES_${workspaceSlug}_${projectId}` : null,
workspaceSlug && projectId ? () => getAllEstimates() : null
async () => workspaceSlug && projectId && getAllEstimates()
);
const editEstimate = (estimate: IEstimate) => {
@ -57,32 +60,9 @@ export const EstimateRoot: FC<TEstimateRoot> = (props) => {
});
};
if (!workspaceSlug || !projectId) return <></>;
return (
<div>
{/* modals */}
{/* create modal */}
<CreateEstimateModal
isOpen={isEstimateCreateModalOpen}
data={estimateToUpdate}
handleClose={() => {
setIsEstimateCreateModalOpen(false);
setEstimateToUpdate(undefined);
}}
/>
{/* edit modal */}
{/* delete modal */}
<DeleteEstimateModal
isOpen={!!isEstimateDeleteModalOpen}
handleClose={() => setIsEstimateDeleteModalOpen(null)}
data={
null
// getProjectEstimateById(isEstimateDeleteModalOpen!)
}
/>
{/* handling the estimates list */}
<EstimateEmptyScreen onButtonClick={() => {}} />
{loader === "init-loader" || isSWRLoading ? (
<Loader className="mt-5 space-y-5">
<Loader.Item height="40px" />
@ -140,6 +120,23 @@ export const EstimateRoot: FC<TEstimateRoot> = (props) => {
)}
</>
)}
<CreateEstimateModal
isOpen={isEstimateCreateModalOpen}
data={estimateToUpdate}
handleClose={() => {
setIsEstimateCreateModalOpen(false);
setEstimateToUpdate(undefined);
}}
/>
<DeleteEstimateModal
isOpen={!!isEstimateDeleteModalOpen}
handleClose={() => setIsEstimateDeleteModalOpen(null)}
data={
null
// getProjectEstimateById(isEstimateDeleteModalOpen!)
}
/>
</div>
);
};

View File

@ -5,7 +5,7 @@ import { Button } from "@plane/ui";
// components
import { EModalPosition, EModalWidth, ModalCore } from "@/components/core";
// types
import { TEstimateSystemKeys, TEstimateSystemKeyObject } from "@/ee/components/estimates/types";
import { TEstimateSystemKeys, TEstimateSystemKeyObject } from "@/components/estimates/types";
type Props = {
isOpen: boolean;

View File

@ -37,8 +37,6 @@ const RadioInput = ({
aria = "radio-input";
}
// return <h1>Hello</h1>;
return (
<RadioGroup value={selected} onChange={setSelected} aria-label={aria} className={className}>
<Label className={cn(`mb-2`, inputLabelClassName)}>{inputLabel}</Label>

View File

@ -1,4 +1,4 @@
import { TEstimateSystems } from "@/ee/components/estimates/types";
import { TEstimateSystems } from "@/components/estimates/types";
export const ESTIMATE_SYSTEMS: TEstimateSystems = {
points: {

View File

@ -1,11 +0,0 @@
export * from "./root";
export * from "./estimate-search";
export * from "./estimate-disable";
export * from "./estimate-item";
// estimate create
export * from "./create";
// estimate update
// estimate delete

View File

@ -16,7 +16,7 @@
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^1.3.0",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
"@blueprintjs/popover2": "^1.13.3",
"@headlessui/react": "^1.7.3",
"@headlessui/react": "^2.0.3",
"@hello-pangea/dnd": "^16.3.0",
"@nivo/bar": "0.80.0",
"@nivo/calendar": "0.80.0",
@ -83,4 +83,4 @@
"tsconfig": "*",
"typescript": "4.7.4"
}
}
}

View File

@ -1,33 +1,38 @@
import { ReactElement } from "react";
import { observer } from "mobx-react";
// hooks
import { useRouter } from "next/router";
// components
import { PageHead } from "@/components/core";
import { EstimatesList } from "@/components/estimates";
import { EstimateRoot } from "@/components/estimates";
import { ProjectSettingHeader } from "@/components/headers";
// constants
import { EUserProjectRoles } from "@/constants/project";
// hooks
import { useUser, useProject } from "@/hooks/store";
// layouts
import { AppLayout } from "@/layouts/app-layout";
import { ProjectSettingLayout } from "@/layouts/settings-layout";
// components
// types
import { NextPageWithLayout } from "@/lib/types";
// constants
const EstimatesSettingsPage: NextPageWithLayout = observer(() => {
const router = useRouter();
const { workspaceSlug, projectId } = router.query;
const {
membership: { currentProjectRole },
} = useUser();
const { currentProjectDetails } = useProject();
// derived values
const isAdmin = currentProjectRole === EUserProjectRoles.ADMIN;
const pageTitle = currentProjectDetails?.name ? `${currentProjectDetails?.name} - Estimates` : undefined;
if (!workspaceSlug || !projectId) return <></>;
return (
<>
<PageHead title={pageTitle} />
<div className={`w-full overflow-y-auto py-8 pr-9 ${isAdmin ? "" : "pointer-events-none opacity-60"}`}>
<EstimatesList />
<EstimateRoot workspaceSlug={workspaceSlug?.toString()} projectId={projectId?.toString()} />
</div>
</>
);

View File

@ -0,0 +1,79 @@
// types
import { IEstimate } from "@plane/types";
// helpers
import { API_BASE_URL } from "@/helpers/common.helper";
// services
import { APIService } from "@/services/api.service";
export class EstimateService extends APIService {
constructor() {
super(API_BASE_URL);
}
// fetching the estimates in workspace level
async fetchWorkspacesList(workspaceSlug: string): Promise<IEstimate[] | undefined> {
try {
const { data } = await this.get(`/api/workspaces/${workspaceSlug}/estimates/`);
return data || undefined;
} catch (error) {
throw error;
}
}
async fetchAll(workspaceSlug: string, projectId: string): Promise<IEstimate[] | undefined> {
try {
const { data } = await this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/estimates/`);
return data || undefined;
} catch (error) {
throw error;
}
}
async fetchById(workspaceSlug: string, projectId: string, estimateId: string): Promise<IEstimate | undefined> {
try {
const { data } = await this.get(
`/api/workspaces/${workspaceSlug}/projects/${projectId}/estimates/${estimateId}/`
);
return data || undefined;
} catch (error) {
throw error;
}
}
async create(workspaceSlug: string, projectId: string, payload: Partial<IEstimate>): Promise<IEstimate | undefined> {
try {
const { data } = await this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/estimates/`, payload);
return data || undefined;
} catch (error) {
throw error;
}
}
async update(
workspaceSlug: string,
projectId: string,
estimateId: string,
payload: Partial<IEstimate>
): Promise<IEstimate | undefined> {
try {
const { data } = await this.patch(
`/api/workspaces/${workspaceSlug}/projects/${projectId}/estimates/${estimateId}/`,
payload
);
return data || undefined;
} catch (error) {
throw error;
}
}
async remove(workspaceSlug: string, projectId: string, estimateId: string): Promise<void> {
try {
const { data } = await this.delete(
`/api/workspaces/${workspaceSlug}/projects/${projectId}/estimates/${estimateId}/`
);
return data || undefined;
} catch (error) {
throw error;
}
}
}

View File

@ -1,5 +1,6 @@
export * from "./project.service";
export * from "./project-estimate.service";
export * from "./estimate.service";
export * from "./project-export.service";
export * from "./project-member.service";
export * from "./project-state.service";

View File

@ -25,6 +25,7 @@ export interface IProjectEstimateStore {
projectEstimateIds: string[] | undefined;
estimateById: (estimateId: string) => IEstimate | undefined;
// actions
getWorkspaceAllEstimates: () => Promise<IEstimateType[] | undefined>;
getAllEstimates: () => Promise<IEstimateType[] | undefined>;
getEstimateById: (estimateId: string) => Promise<IEstimateType | undefined>;
createEstimate: (data: Partial<IEstimateType>) => Promise<IEstimateType | undefined>;
@ -48,6 +49,7 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
// computed
projectEstimateIds: computed,
// actions
getWorkspaceAllEstimates: action,
getAllEstimates: action,
getEstimateById: action,
createEstimate: action,
@ -79,7 +81,7 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
* @description fetch all estimates for a project
* @returns { IEstimateType[] | undefined }
*/
async getWorkspaceAllEstimates(): Promise<IEstimateType[] | undefined> {
getWorkspaceAllEstimates = async (): Promise<IEstimateType[] | undefined> => {
try {
const { workspaceSlug } = this.store.router;
if (!workspaceSlug) return;
@ -99,9 +101,9 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
message: "Error fetching estimates",
};
}
}
};
async getAllEstimates(): Promise<IEstimateType[] | undefined> {
getAllEstimates = async (): Promise<IEstimateType[] | undefined> => {
try {
const { workspaceSlug, projectId } = this.store.router;
if (!workspaceSlug || !projectId) return;
@ -121,14 +123,14 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
message: "Error fetching estimates",
};
}
}
};
/**
* @description update an estimate for a project
* @param { string } estimateId
* @returns IEstimateType | undefined
*/
async getEstimateById(estimateId: string): Promise<IEstimateType | undefined> {
getEstimateById = async (estimateId: string): Promise<IEstimateType | undefined> => {
try {
const { workspaceSlug, projectId } = this.store.router;
if (!workspaceSlug || !projectId) return;
@ -149,14 +151,14 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
message: "Error fetching estimate by id",
};
}
}
};
/**
* @description create an estimate for a project
* @param { Partial<IEstimateType> } data
* @returns
*/
async createEstimate(data: Partial<IEstimateType>): Promise<IEstimateType | undefined> {
createEstimate = async (data: Partial<IEstimateType>): Promise<IEstimateType | undefined> => {
try {
const { workspaceSlug, projectId } = this.store.router;
if (!workspaceSlug || !projectId) return;
@ -174,14 +176,14 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
message: "Error creating estimate",
};
}
}
};
/**
* @description delete an estimate for a project
* @param { string } estimateId
* @returns void
*/
async deleteEstimate(estimateId: string): Promise<void> {
deleteEstimate = async (estimateId: string): Promise<void> => {
try {
const { workspaceSlug, projectId } = this.store.router;
if (!workspaceSlug || !projectId) return;
@ -196,5 +198,5 @@ export class ProjectEstimateStore implements IProjectEstimateStore {
message: "Error deleting estimate",
};
}
}
};
}

114
yarn.lock
View File

@ -1579,7 +1579,7 @@
dependencies:
"@floating-ui/dom" "^1.0.0"
"@floating-ui/react@^0.26.4":
"@floating-ui/react@^0.26.13", "@floating-ui/react@^0.26.4":
version "0.26.16"
resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.16.tgz#3415a087f452165161c2d313d1d57e8142894679"
integrity sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==
@ -1593,7 +1593,7 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5"
integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==
"@headlessui/react@^1.7.13", "@headlessui/react@^1.7.17", "@headlessui/react@^1.7.19", "@headlessui/react@^1.7.3":
"@headlessui/react@^1.7.13", "@headlessui/react@^1.7.17", "@headlessui/react@^1.7.19":
version "1.7.19"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40"
integrity sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==
@ -1601,6 +1601,16 @@
"@tanstack/react-virtual" "^3.0.0-beta.60"
client-only "^0.0.1"
"@headlessui/react@^2.0.3":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.0.3.tgz#7506d808a6f3abc307f35354d34b8d642ecfd692"
integrity sha512-Xd1h0YZgfhxZ7W1w4TvK0/TZ1c4qaX4liYVUkAXqW1HCLcXSqnMeYAUGJS/BBroBAUL9HErjyFcRpCWRQZ/0lA==
dependencies:
"@floating-ui/react" "^0.26.13"
"@react-aria/focus" "^3.16.2"
"@react-aria/interactions" "^3.21.1"
"@tanstack/react-virtual" "3.5.0"
"@hello-pangea/dnd@^16.3.0":
version "16.6.0"
resolved "https://registry.yarnpkg.com/@hello-pangea/dnd/-/dnd-16.6.0.tgz#7509639c7bd13f55e537b65a9dcfcd54e7c99ac7"
@ -2207,6 +2217,45 @@
dependencies:
"@babel/runtime" "^7.13.10"
"@react-aria/focus@^3.16.2":
version "3.17.1"
resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.17.1.tgz#c796a188120421e2fedf438cadacdf463c77ad29"
integrity sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==
dependencies:
"@react-aria/interactions" "^3.21.3"
"@react-aria/utils" "^3.24.1"
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
clsx "^2.0.0"
"@react-aria/interactions@^3.21.1", "@react-aria/interactions@^3.21.3":
version "3.21.3"
resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.21.3.tgz#a2a3e354a8b894bed7a46e1143453f397f2538d7"
integrity sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==
dependencies:
"@react-aria/ssr" "^3.9.4"
"@react-aria/utils" "^3.24.1"
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
"@react-aria/ssr@^3.9.4":
version "3.9.4"
resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.4.tgz#9da8b10342c156e816dbfa4c9e713b21f274d7ab"
integrity sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==
dependencies:
"@swc/helpers" "^0.5.0"
"@react-aria/utils@^3.24.1":
version "3.24.1"
resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.24.1.tgz#9d16023f07c23c41793c9030a9bd203a9c8cf0a7"
integrity sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==
dependencies:
"@react-aria/ssr" "^3.9.4"
"@react-stately/utils" "^3.10.1"
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
clsx "^2.0.0"
"@react-spring/animated@~9.4.5":
version "9.4.5"
resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.5.tgz#dd9921c716a4f4a3ed29491e0c0c9f8ca0eb1a54"
@ -2253,6 +2302,18 @@
"@react-spring/shared" "~9.4.5"
"@react-spring/types" "~9.4.5"
"@react-stately/utils@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.1.tgz#dc8685b4994bef0dc10c37b024074be8afbfba62"
integrity sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==
dependencies:
"@swc/helpers" "^0.5.0"
"@react-types/shared@^3.23.1":
version "3.23.1"
resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.23.1.tgz#2f23c81d819d0ef376df3cd4c944be4d6bce84c3"
integrity sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==
"@remirror/core-constants@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-2.0.2.tgz#f05eccdc69e3a65e7d524b52548f567904a11a1a"
@ -3390,6 +3451,13 @@
"@swc/counter" "^0.1.3"
tslib "^2.4.0"
"@swc/helpers@^0.5.0":
version "0.5.11"
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.11.tgz#5bab8c660a6e23c13b2d23fcd1ee44a2db1b0cb7"
integrity sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==
dependencies:
tslib "^2.4.0"
"@swc/types@0.1.7":
version "0.1.7"
resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.7.tgz#ea5d658cf460abff51507ca8d26e2d391bafb15e"
@ -3407,7 +3475,7 @@
lodash.merge "^4.6.2"
postcss-selector-parser "6.0.10"
"@tanstack/react-virtual@^3.0.0-beta.60":
"@tanstack/react-virtual@3.5.0", "@tanstack/react-virtual@^3.0.0-beta.60":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.5.0.tgz#873b5b77cf78af563a4a11e6251ed51ee8868132"
integrity sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==
@ -10177,7 +10245,7 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
"prettier-fallback@npm:prettier@^3", prettier@^3.1.1, prettier@^3.2.5, prettier@latest:
"prettier-fallback@npm:prettier@^3":
version "3.2.5"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
@ -10204,6 +10272,11 @@ prettier@^2.8.8:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
prettier@^3.1.1, prettier@^3.2.5, prettier@latest:
version "3.2.5"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
@ -11607,8 +11680,16 @@ string-argv@0.3.2:
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
name string-width-cjs
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@ -11704,7 +11785,14 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@ -13100,8 +13188,16 @@ workbox-window@6.6.1, workbox-window@^6.5.4:
"@types/trusted-types" "^2.0.2"
workbox-core "6.6.1"
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
name wrap-ansi-cjs
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==