mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 17:38:10 +00:00
Feature/ add video 5 (#49)
* add all the new buttons preliminarily, new trim scrubber ironout the positioning bugs of the Area Scrubber styling of area scrubber is now perfect trim area and trim duration toggle button works perfect now * repeat button and events works now * optimized the trimscrubber and trimduration button, fix data plumbing bug of trimdata
This commit is contained in:
14 files changed
+680
-230
No files matched your search
@@ -14,7 +14,6 @@ import { ButtonSubmitAdd } from "./ButtonSumbitAdd";
|
||||
|
||||
import { DialogAddMediaStatuses } from "./enums";
|
||||
import { LoadingScreens } from "./LoadingScreens";
|
||||
// import { useRenderCounter } from "~/hooks/useRenderCounter";
|
||||
|
||||
import { ApiResponse } from "~/Classes/ApiManager/ApiManager";
|
||||
import { MediaFile } from "~/Classes/ApiManager/models/MediaFile";
|
||||
@@ -97,7 +96,7 @@ export const DialogAddVideo = ({
|
||||
onFileStaged={(file) => {
|
||||
setStates((curr) => ({ ...curr, file }));
|
||||
}}
|
||||
trimData={trimData}
|
||||
trimDataSignal={trimData}
|
||||
onTrimChange={(newTrimData: TrimData) => {
|
||||
trimData.value = newTrimData;
|
||||
}}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useCallback, useState } from "react";
|
||||
import { Signal } from "@preact/signals-react";
|
||||
import { useCallback, useState, useRef } from "react";
|
||||
import { signal, Signal } from "@preact/signals-react";
|
||||
|
||||
import { FileUploader } from "../FileUploader";
|
||||
import { VideoControls } from "./VideoControls";
|
||||
@@ -14,15 +14,14 @@ export const QuickTrimVideoUploader = ({
|
||||
file,
|
||||
onFileStaged,
|
||||
onTrimChange,
|
||||
trimData,
|
||||
trimDataSignal,
|
||||
}: {
|
||||
file: File | null;
|
||||
onFileStaged: (newFile: File | null) => void;
|
||||
onTrimChange: (trimData: TrimData) => void;
|
||||
trimData?: Signal<TrimData | undefined>;
|
||||
trimDataSignal: Signal<TrimData | undefined>;
|
||||
}) => {
|
||||
const [vidEl, setVidEl] = useState<HTMLVideoElement | undefined>(undefined);
|
||||
|
||||
const videoRefCallback = useCallback(
|
||||
(node: HTMLVideoElement) => {
|
||||
if (node !== null) {
|
||||
@@ -62,10 +61,14 @@ export const QuickTrimVideoUploader = ({
|
||||
src={URL.createObjectURL(file)}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex w-full items-center justify-center bg-gray-100">
|
||||
<VideoControls vidEl={vidEl} className="w-fit" />
|
||||
<div className="my-1 flex w-full items-center justify-center gap-2 bg-gray-100">
|
||||
<VideoControls
|
||||
className="w-fit"
|
||||
vidEl={vidEl}
|
||||
trimDataSignal={trimDataSignal}
|
||||
/>
|
||||
<TrimmerPlaybar
|
||||
trimData={trimData?.value}
|
||||
trimDataSignal={trimDataSignal}
|
||||
vidEl={vidEl}
|
||||
className="grow"
|
||||
onTrimChange={onTrimChange}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import { faStopwatch } from "@fortawesome/pro-solid-svg-icons";
|
||||
import { Button, Tooltip } from "~/components/ui";
|
||||
|
||||
export const ButtonTrimDuration = ({
|
||||
trimDurationMs,
|
||||
onChange,
|
||||
}: {
|
||||
trimDurationMs: number;
|
||||
onChange: (newTrimDuration: number) => void;
|
||||
}) => {
|
||||
const handleOnClick = () => {
|
||||
if (trimDurationMs === 6000) {
|
||||
onChange(3000);
|
||||
return;
|
||||
}
|
||||
if (trimDurationMs === 3000) {
|
||||
onChange(1000);
|
||||
return;
|
||||
}
|
||||
onChange(6000);
|
||||
return;
|
||||
};
|
||||
return (
|
||||
<Tooltip tip="Change max trim time">
|
||||
<Button className="h-8" icon={faStopwatch} onClick={handleOnClick}>
|
||||
<span className="-ml-1 mt-0.5 w-4">{trimDurationMs / 1000}s</span>
|
||||
</Button>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
@@ -92,7 +92,7 @@ export const PlayProgressCursor = ({
|
||||
className={twMerge(
|
||||
verticalPositionStyles,
|
||||
buttonStyles,
|
||||
"size-5 -translate-x-1/2 rounded-full",
|
||||
"z-20 size-5 -translate-x-1/2 rounded-full",
|
||||
isScrubbing && "cursor-grabbing",
|
||||
)}
|
||||
onMouseDown={handleScrubbingCurrentTime}
|
||||
|
||||
@@ -0,0 +1,171 @@
|
||||
import { useCallback, useEffect, useState, useRef } from "react";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import { faGripDots } from "@fortawesome/pro-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
|
||||
import { formatSecondsToHHMMSSCS, ONE_MIN } from "./utilities";
|
||||
import { Tooltip } from "~/components/ui";
|
||||
|
||||
export const TrimAreaScrubber = ({
|
||||
className,
|
||||
onChange,
|
||||
trimStartMs,
|
||||
trimDurationMs,
|
||||
totalDurationMs,
|
||||
}: {
|
||||
className?: string;
|
||||
onChange: (newPosMs: number) => void;
|
||||
trimStartMs: number;
|
||||
trimDurationMs: number;
|
||||
totalDurationMs: number;
|
||||
}) => {
|
||||
const trimPosPercent = (trimStartMs / totalDurationMs) * 100;
|
||||
|
||||
const [state, setState] = useState<{
|
||||
isScrubbing: boolean;
|
||||
scrubPosPercent: number;
|
||||
}>({
|
||||
isScrubbing: false,
|
||||
scrubPosPercent: trimPosPercent,
|
||||
});
|
||||
const { isScrubbing, scrubPosPercent } = state;
|
||||
const containerRef = useRef<HTMLElement | null>(null);
|
||||
const scrubberRef = useRef<HTMLDivElement | null>(null);
|
||||
const mountCallback = useCallback((node: HTMLDivElement) => {
|
||||
if (node) {
|
||||
scrubberRef.current = node;
|
||||
containerRef.current = node.parentElement;
|
||||
}
|
||||
}, []);
|
||||
const scrubPosPercentRef = useRef(scrubPosPercent);
|
||||
|
||||
const handleScrubbing = useCallback(
|
||||
(e: React.MouseEvent<HTMLDivElement>) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
if (containerRef.current === null || scrubberRef.current === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const calcPosition = makeTrimPositionCalculator({
|
||||
parentEl: containerRef.current,
|
||||
mouseOffset:
|
||||
e.clientX -
|
||||
scrubberRef.current.offsetLeft -
|
||||
containerRef.current.offsetLeft,
|
||||
trimDurationMs: trimDurationMs,
|
||||
totalDurationMs: totalDurationMs,
|
||||
});
|
||||
|
||||
setState({
|
||||
isScrubbing: true,
|
||||
scrubPosPercent: calcPosition(e),
|
||||
});
|
||||
|
||||
const handleMouseMove = (e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
setState({
|
||||
isScrubbing: true,
|
||||
scrubPosPercent: calcPosition(e),
|
||||
});
|
||||
};
|
||||
const handleMouseUp = (e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
setState((prev) => {
|
||||
scrubPosPercentRef.current = prev.scrubPosPercent;
|
||||
return {
|
||||
...prev,
|
||||
isScrubbing: false,
|
||||
};
|
||||
});
|
||||
|
||||
window.removeEventListener("mousemove", handleMouseMove);
|
||||
window.removeEventListener("mouseup", handleMouseUp);
|
||||
};
|
||||
window.addEventListener("mousemove", handleMouseMove);
|
||||
window.addEventListener("mouseup", handleMouseUp);
|
||||
},
|
||||
[trimDurationMs, totalDurationMs],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isScrubbing) {
|
||||
const newTrimMs = (scrubPosPercentRef.current / 100) * totalDurationMs;
|
||||
onChange(newTrimMs);
|
||||
}
|
||||
}, [isScrubbing]);
|
||||
|
||||
// this determines if trimmer is its taking value
|
||||
//from parent's control or user's mouse movement
|
||||
const positionPercent = isScrubbing ? scrubPosPercent : trimPosPercent;
|
||||
const leftOffset = `${positionPercent}%`;
|
||||
// the rest are values that dervied from that position
|
||||
const trimStartTime = formatSecondsToHHMMSSCS(
|
||||
(positionPercent / 100) * totalDurationMs,
|
||||
);
|
||||
const displayedTrimStartTime =
|
||||
totalDurationMs >= ONE_MIN * 60
|
||||
? trimStartTime.substring(3, 8)
|
||||
: totalDurationMs >= ONE_MIN
|
||||
? trimStartTime.substring(0, 5)
|
||||
: trimStartTime.substring(3, 8);
|
||||
const tip = `Trim ${Math.round(trimDurationMs / 1000)}s from ${displayedTrimStartTime}`;
|
||||
|
||||
return (
|
||||
<Tooltip tip={tip} forceShow={isScrubbing}>
|
||||
<div
|
||||
ref={mountCallback}
|
||||
className={twMerge(
|
||||
"absolute top-0 -translate-y-1",
|
||||
"z-10 h-9 w-4 items-center justify-center",
|
||||
"rounded-b-md border-x-2 border-b-2 border-white shadow-md",
|
||||
isScrubbing ? "cursor-grabbing" : "cursor-grab",
|
||||
className,
|
||||
)}
|
||||
onMouseDown={handleScrubbing}
|
||||
style={{
|
||||
width: `${(trimDurationMs / totalDurationMs) * 100}%`,
|
||||
left: leftOffset,
|
||||
}}
|
||||
>
|
||||
<FontAwesomeIcon
|
||||
icon={faGripDots}
|
||||
className="w-full -translate-x-[2px] -translate-y-2 rounded-t-md border-x-2 border-white bg-white"
|
||||
/>
|
||||
</div>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
||||
function makeTrimPositionCalculator({
|
||||
parentEl,
|
||||
mouseOffset,
|
||||
trimDurationMs,
|
||||
totalDurationMs,
|
||||
}: {
|
||||
parentEl: HTMLElement;
|
||||
mouseOffset: number;
|
||||
trimDurationMs: number;
|
||||
totalDurationMs: number;
|
||||
}) {
|
||||
const parentWidth = parentEl.getBoundingClientRect().width;
|
||||
const maxMs =
|
||||
totalDurationMs - trimDurationMs > 0 ? totalDurationMs - trimDurationMs : 0;
|
||||
const maxPercent = Math.floor((maxMs / totalDurationMs) * 10000) / 100;
|
||||
|
||||
return (currE: MouseEvent | React.MouseEvent<HTMLDivElement>) => {
|
||||
const result =
|
||||
((currE.clientX - mouseOffset - parentEl.offsetLeft) / parentWidth) * 100;
|
||||
|
||||
if (result < 0) {
|
||||
return 0;
|
||||
}
|
||||
if (result > maxPercent) {
|
||||
return maxPercent;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
}
|
||||
@@ -1,15 +1,11 @@
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import {
|
||||
faBracketCurly,
|
||||
faBracketCurlyRight,
|
||||
} from "@fortawesome/pro-solid-svg-icons";
|
||||
|
||||
import { MAX_TRIM_DURATION } from "./utilities";
|
||||
|
||||
import { ButtonTrimDuration } from "./ButtonTrimDuration";
|
||||
import { TrimmingPlaybarLoading } from "./TrimmerPlaybarLoading";
|
||||
import { PlayProgressCursor } from "./PlayProgressCursor";
|
||||
import { TrimScrubber } from "./TrimScrubber";
|
||||
import { TrimAreaScrubber } from "./TrimAreaScrubber";
|
||||
|
||||
import { TrimData } from "./utilities";
|
||||
|
||||
export const TrimmerPlaybarCore = ({
|
||||
@@ -28,18 +24,24 @@ export const TrimmerPlaybarCore = ({
|
||||
currentTimeMs: number | undefined;
|
||||
trimStartMs: number | undefined;
|
||||
trimEndMs: number | undefined;
|
||||
trimDurationMs: number;
|
||||
}>({
|
||||
durationMs: undefined,
|
||||
currentTimeMs: undefined,
|
||||
trimStartMs: undefined,
|
||||
trimEndMs: undefined,
|
||||
trimDurationMs: 6000,
|
||||
});
|
||||
const { durationMs, currentTimeMs, trimStartMs, trimEndMs, trimDurationMs } =
|
||||
states;
|
||||
|
||||
const { durationMs, currentTimeMs, trimStartMs, trimEndMs } = states;
|
||||
const handleChangeTrimDuration = (newTrimDurationMs: number) => {
|
||||
setStates((curr) => ({ ...curr, trimDurationMs: newTrimDurationMs }));
|
||||
};
|
||||
|
||||
const setTrimStartMs = useCallback((newTrimMs: number) => {
|
||||
const setTrimStartMs = (newTrimMs: number) => {
|
||||
setStates((prev) => {
|
||||
if (prev.trimEndMs === undefined) {
|
||||
if (prev.trimEndMs === undefined || prev.durationMs === undefined) {
|
||||
if (import.meta.env.DEV) {
|
||||
console.warn("Logical Error in Trim Start Setting");
|
||||
}
|
||||
@@ -49,30 +51,42 @@ export const TrimmerPlaybarCore = ({
|
||||
...prev,
|
||||
trimStartMs: newTrimMs,
|
||||
trimEndMs:
|
||||
prev.trimEndMs - newTrimMs >= MAX_TRIM_DURATION
|
||||
? newTrimMs + MAX_TRIM_DURATION
|
||||
: prev.trimEndMs,
|
||||
trimDurationMs >= prev.durationMs
|
||||
? prev.durationMs
|
||||
: newTrimMs + trimDurationMs,
|
||||
};
|
||||
});
|
||||
}, []);
|
||||
const setTrimEndMs = useCallback((newTrimMs: number) => {
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setStates((prev) => {
|
||||
if (prev.trimStartMs === undefined) {
|
||||
if (import.meta.env.DEV) {
|
||||
console.warn("Logical Error in Trim End Setting");
|
||||
}
|
||||
if (prev.trimStartMs === undefined || prev.durationMs === undefined) {
|
||||
// video is not ready, no data
|
||||
return prev;
|
||||
}
|
||||
// normal case
|
||||
if (prev.trimStartMs + trimDurationMs <= prev.durationMs) {
|
||||
return {
|
||||
...prev,
|
||||
trimEndMs: prev.trimStartMs + trimDurationMs,
|
||||
};
|
||||
}
|
||||
// not enough duration to fit
|
||||
if (trimDurationMs >= prev.durationMs) {
|
||||
return {
|
||||
...prev,
|
||||
trimStartMs: 0,
|
||||
trimEndMs: prev.durationMs,
|
||||
};
|
||||
}
|
||||
// shimmy the area to left
|
||||
return {
|
||||
...prev,
|
||||
trimEndMs: newTrimMs,
|
||||
trimStartMs:
|
||||
newTrimMs - prev.trimStartMs >= MAX_TRIM_DURATION
|
||||
? newTrimMs - MAX_TRIM_DURATION
|
||||
: prev.trimStartMs,
|
||||
trimStartMs: prev.durationMs - trimDurationMs,
|
||||
trimEndMs: prev.durationMs,
|
||||
};
|
||||
});
|
||||
}, []);
|
||||
}, [trimDurationMs]);
|
||||
|
||||
useEffect(() => {
|
||||
if (trimStartMs !== undefined && trimEndMs !== undefined) {
|
||||
@@ -89,8 +103,8 @@ export const TrimmerPlaybarCore = ({
|
||||
trimStartMs: trimData?.trimStartMs ?? 0,
|
||||
trimEndMs: trimData?.trimEndMs
|
||||
? trimData.trimEndMs
|
||||
: vidEl.duration * 1000 >= MAX_TRIM_DURATION
|
||||
? MAX_TRIM_DURATION
|
||||
: vidEl.duration * 1000 >= trimDurationMs
|
||||
? trimDurationMs
|
||||
: vidEl.duration * 1000,
|
||||
}));
|
||||
};
|
||||
@@ -120,35 +134,30 @@ export const TrimmerPlaybarCore = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className={twMerge(
|
||||
"relative mx-4 h-10 w-full border-l border-r border-dotted border-l-ui-border border-r-ui-border",
|
||||
className,
|
||||
)}
|
||||
>
|
||||
<div className="mt-3 h-4 w-full bg-secondary-300" />
|
||||
<PlayProgressCursor
|
||||
vidEl={vidEl}
|
||||
currentTimePercent={(currentTimeMs / durationMs) * 100}
|
||||
/>
|
||||
<TrimScrubber
|
||||
// trim start scrubber
|
||||
icon={faBracketCurly}
|
||||
className="-translate-x-full"
|
||||
trimPosMs={trimStartMs}
|
||||
maxTrimPosMs={trimEndMs}
|
||||
minTrimPosMs={0}
|
||||
totalDurationMs={durationMs}
|
||||
onChange={setTrimStartMs}
|
||||
/>
|
||||
<TrimScrubber
|
||||
// trim end scrubber
|
||||
icon={faBracketCurlyRight}
|
||||
trimPosMs={trimEndMs}
|
||||
maxTrimPosMs={durationMs}
|
||||
minTrimPosMs={trimStartMs}
|
||||
totalDurationMs={durationMs}
|
||||
onChange={setTrimEndMs}
|
||||
<div className="mx-2 flex grow items-center gap-2">
|
||||
<div
|
||||
className={twMerge(
|
||||
"relative h-10 w-full border-l border-r border-dotted border-l-ui-border border-r-ui-border",
|
||||
className,
|
||||
)}
|
||||
>
|
||||
<div className="mt-3 h-4 w-full bg-secondary-300" />
|
||||
<PlayProgressCursor
|
||||
vidEl={vidEl}
|
||||
currentTimePercent={(currentTimeMs / durationMs) * 100}
|
||||
/>
|
||||
<TrimAreaScrubber
|
||||
trimStartMs={trimStartMs}
|
||||
trimDurationMs={
|
||||
durationMs > trimDurationMs ? trimDurationMs : durationMs
|
||||
}
|
||||
totalDurationMs={durationMs}
|
||||
onChange={setTrimStartMs}
|
||||
/>
|
||||
</div>
|
||||
<ButtonTrimDuration
|
||||
trimDurationMs={trimDurationMs}
|
||||
onChange={handleChangeTrimDuration}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import { Signal } from "@preact/signals-react";
|
||||
import { TrimmerPlaybarCore } from "./TrimmerPlaybarCore";
|
||||
import { TrimmingPlaybarLoading } from "./TrimmerPlaybarLoading";
|
||||
import { TrimData } from "./utilities";
|
||||
export type { TrimData };
|
||||
export const TrimmerPlaybar = ({
|
||||
vidEl,
|
||||
trimData,
|
||||
trimDataSignal,
|
||||
className,
|
||||
onTrimChange,
|
||||
}: {
|
||||
vidEl: HTMLVideoElement | undefined;
|
||||
className?: string;
|
||||
trimData?: TrimData;
|
||||
trimDataSignal: Signal<TrimData | undefined>;
|
||||
onTrimChange: (trimData: TrimData) => void;
|
||||
}) => {
|
||||
if (!vidEl) {
|
||||
@@ -20,7 +21,7 @@ export const TrimmerPlaybar = ({
|
||||
<TrimmerPlaybarCore
|
||||
vidEl={vidEl}
|
||||
className={className}
|
||||
trimData={trimData}
|
||||
trimData={trimDataSignal.value}
|
||||
onTrimChange={onTrimChange}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
export const buttonStyles = "border border-ui-border bg-ui-panel cursor-grab";
|
||||
export const verticalPositionStyles = "absolute top-1/2 -translate-y-1/2";
|
||||
export const MAX_TRIM_DURATION = 6000;
|
||||
export const ONE_MIN = 1000 * 60;
|
||||
export enum MouseState {
|
||||
IDLE = "idle",
|
||||
DRAGGING = "dragging",
|
||||
@@ -10,10 +11,15 @@ export type TrimData = {
|
||||
trimEndMs: number;
|
||||
};
|
||||
|
||||
export function formatSecondsToHHMMSSCS(seconds: number) {
|
||||
//example of the ISO String: 1970-01-01T00:01:40.774Z
|
||||
const isoString = new Date(Math.round(seconds * 1000)).toISOString();
|
||||
if (seconds > 3600)
|
||||
export function formatSecondsToHHMMSSCS(msArg: number) {
|
||||
//example of the ISO String: 1970-01-01T 00:01:40.77 4Z
|
||||
// index count=01234567890 12345678901 23
|
||||
const milisecond = isNaN(msArg) ? 0 : msArg;
|
||||
if (isNaN(milisecond) && import.meta.env.DEV) {
|
||||
console.warn("formatSecondsToHHMMSSCS recieved a NaN");
|
||||
}
|
||||
const isoString = new Date(Math.round(milisecond)).toISOString();
|
||||
if (milisecond >= ONE_MIN * 60)
|
||||
return isoString.substring(11, 19) + "." + isoString.substring(20, 22);
|
||||
else return isoString.substring(14, 19) + "." + isoString.substring(20, 22);
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import { useEffect, useState } from "react";
|
||||
import { faVolumeSlash, faVolume } from "@fortawesome/pro-solid-svg-icons";
|
||||
|
||||
import { Button } from "~/components/ui";
|
||||
|
||||
import { Tooltip } from "~/components/ui";
|
||||
export function ButtonMute({ vidEl }: { vidEl: HTMLVideoElement }) {
|
||||
const [isMuted, setIsMuted] = useState<boolean>(vidEl.muted || false);
|
||||
|
||||
@@ -26,11 +26,13 @@ export function ButtonMute({ vidEl }: { vidEl: HTMLVideoElement }) {
|
||||
}, [vidEl]);
|
||||
|
||||
return (
|
||||
<Button
|
||||
className="w-10"
|
||||
icon={isMuted ? faVolumeSlash : faVolume}
|
||||
variant="secondary"
|
||||
onClick={toggleMute}
|
||||
/>
|
||||
<Tooltip tip={isMuted ? "Unmute" : "Mute"}>
|
||||
<Button
|
||||
className="size-8"
|
||||
icon={isMuted ? faVolumeSlash : faVolume}
|
||||
variant="secondary"
|
||||
onClick={toggleMute}
|
||||
/>
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
@@ -46,7 +46,7 @@ export function ButtonPlaypause({ vidEl }: { vidEl: HTMLVideoElement }) {
|
||||
|
||||
return (
|
||||
<Button
|
||||
className="w-10"
|
||||
className="h-8 w-12"
|
||||
icon={getIcon()}
|
||||
variant={playpause === PlayPauseStatus.PLAYING ? "secondary" : "primary"}
|
||||
onClick={togglePlaypause}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
import { useCallback, useEffect, useState, useRef } from "react";
|
||||
import { Signal } from "@preact/signals-react";
|
||||
import { faRepeat } from "@fortawesome/pro-solid-svg-icons";
|
||||
import { Button, Tooltip } from "~/components/ui";
|
||||
import { TrimData } from "../TrimmerPlaybar";
|
||||
|
||||
export const ButtonRepeat = ({
|
||||
vidEl,
|
||||
trimDataSignal,
|
||||
}: {
|
||||
vidEl: HTMLVideoElement | undefined;
|
||||
trimDataSignal: Signal<TrimData | undefined>;
|
||||
}) => {
|
||||
const [isRepeatOn, setIsRepeatOn] = useState<boolean>(true);
|
||||
|
||||
const resetVideoToTrimStart = useCallback(
|
||||
(vidEl: HTMLVideoElement, trimData: TrimData) => {
|
||||
if (
|
||||
vidEl.currentTime < trimData.trimStartMs / 1000 ||
|
||||
vidEl.currentTime > trimData.trimEndMs / 1000
|
||||
) {
|
||||
vidEl.currentTime = (trimData.trimStartMs + 1) / 1000;
|
||||
}
|
||||
},
|
||||
[],
|
||||
);
|
||||
const handleOnClick = useCallback(() => {
|
||||
setIsRepeatOn((curr) => {
|
||||
if (!curr && vidEl && trimDataSignal.value) {
|
||||
resetVideoToTrimStart(vidEl, trimDataSignal.value);
|
||||
}
|
||||
return !curr;
|
||||
});
|
||||
}, []);
|
||||
|
||||
// helper function for listeners need to be defined for reference for removal
|
||||
const handleOnTimeupdate = useCallback(() => {
|
||||
if (isRepeatOn && trimDataSignal.value && vidEl) {
|
||||
resetVideoToTrimStart(vidEl, trimDataSignal.value);
|
||||
}
|
||||
}, [isRepeatOn, vidEl]);
|
||||
// record previous vidEl and its listener incase of re-render
|
||||
const prevVidEl = useRef<HTMLVideoElement | undefined>(undefined);
|
||||
const prevhandleOnTimeupdate = useRef(handleOnTimeupdate);
|
||||
useEffect(() => {
|
||||
// if vidEl changed, remove old listender and attach new listenHandler
|
||||
if (vidEl && prevVidEl.current !== vidEl) {
|
||||
prevVidEl.current?.removeEventListener(
|
||||
"timeupdate",
|
||||
prevhandleOnTimeupdate.current,
|
||||
);
|
||||
vidEl.addEventListener("timeupdate", handleOnTimeupdate);
|
||||
}
|
||||
// remove and reattached listener if the listenHandler has changed
|
||||
if (vidEl && handleOnTimeupdate !== prevhandleOnTimeupdate.current) {
|
||||
vidEl.removeEventListener("timeupdate", prevhandleOnTimeupdate.current);
|
||||
vidEl.addEventListener("timeupdate", handleOnTimeupdate);
|
||||
}
|
||||
// remove listener on dismount
|
||||
return () => {
|
||||
vidEl?.removeEventListener("timeupdate", handleOnTimeupdate);
|
||||
};
|
||||
}, [vidEl, handleOnTimeupdate]);
|
||||
|
||||
return (
|
||||
<Tooltip tip={isRepeatOn ? "Turn off repeat" : "Repeat in trim"}>
|
||||
<Button
|
||||
className="size-8"
|
||||
icon={faRepeat}
|
||||
variant={isRepeatOn ? "primary" : "secondary"}
|
||||
onClick={handleOnClick}
|
||||
/>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
@@ -1,17 +1,22 @@
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { Signal } from "@preact/signals-react";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import { Spinner } from "~/components/ui";
|
||||
import { VIDEO_STATE_STATUSES } from "./enum";
|
||||
import { TrimData } from "../TrimmerPlaybar";
|
||||
import { ButtonPlaypause } from "./ButtonPlayPause";
|
||||
import { ButtonMute } from "./ButtonMute";
|
||||
import { LabelTimeDuration } from "./LabelTimeDuration";
|
||||
import { Spinner } from "~/components/ui";
|
||||
import { ButtonRepeat } from "./ButtonRepeat";
|
||||
|
||||
export const VideoControls = ({
|
||||
vidEl,
|
||||
trimDataSignal,
|
||||
className,
|
||||
}: {
|
||||
vidEl: HTMLVideoElement | undefined;
|
||||
trimDataSignal: Signal<TrimData | undefined>;
|
||||
className?: string;
|
||||
}) => {
|
||||
const prevVidEl = useRef<HTMLVideoElement | undefined>(undefined);
|
||||
@@ -54,9 +59,9 @@ export const VideoControls = ({
|
||||
return (
|
||||
<div className={wrapperClass}>
|
||||
<ButtonPlaypause vidEl={vidEl} />
|
||||
<ButtonRepeat trimDataSignal={trimDataSignal} vidEl={vidEl} />
|
||||
<ButtonMute vidEl={vidEl} />
|
||||
<LabelTimeDuration vidEl={vidEl} />
|
||||
<div className="grow"></div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,10 @@ export const Button = ({
|
||||
);
|
||||
|
||||
const className = twMerge(
|
||||
"text-sm font-medium rounded-lg px-3 py-2 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 transition-all duration-150 flex gap-2 items-center justify-center",
|
||||
"text-sm font-medium rounded-lg px-3 py-2 shadow-sm",
|
||||
"flex gap-2 items-center justify-center",
|
||||
"transition-all duration-150",
|
||||
"focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
|
||||
getVariantClassNames(propsVariant),
|
||||
propsClassName,
|
||||
disabledClass,
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz"
|
||||
integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==
|
||||
|
||||
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.24.5":
|
||||
"@babel/core@^7.24.5":
|
||||
version "7.25.2"
|
||||
resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz"
|
||||
integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==
|
||||
@@ -222,9 +222,119 @@
|
||||
resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz"
|
||||
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
|
||||
|
||||
"@esbuild/aix-ppc64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
|
||||
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
|
||||
|
||||
"@esbuild/android-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
|
||||
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
|
||||
|
||||
"@esbuild/android-arm@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
|
||||
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
|
||||
|
||||
"@esbuild/android-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
|
||||
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
|
||||
|
||||
"@esbuild/darwin-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
|
||||
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
|
||||
|
||||
"@esbuild/darwin-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
|
||||
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
|
||||
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
|
||||
|
||||
"@esbuild/freebsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
|
||||
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
|
||||
|
||||
"@esbuild/linux-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
|
||||
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
|
||||
|
||||
"@esbuild/linux-arm@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
|
||||
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
|
||||
|
||||
"@esbuild/linux-ia32@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
|
||||
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
|
||||
|
||||
"@esbuild/linux-loong64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
|
||||
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
|
||||
|
||||
"@esbuild/linux-mips64el@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
|
||||
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
|
||||
|
||||
"@esbuild/linux-ppc64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
|
||||
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
|
||||
|
||||
"@esbuild/linux-riscv64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
|
||||
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
|
||||
|
||||
"@esbuild/linux-s390x@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
|
||||
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
|
||||
|
||||
"@esbuild/linux-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
|
||||
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
|
||||
|
||||
"@esbuild/netbsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
|
||||
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
|
||||
|
||||
"@esbuild/openbsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
|
||||
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
|
||||
|
||||
"@esbuild/sunos-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
|
||||
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
|
||||
|
||||
"@esbuild/win32-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
|
||||
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
|
||||
|
||||
"@esbuild/win32-ia32@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
|
||||
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
|
||||
|
||||
"@esbuild/win32-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
|
||||
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
|
||||
@@ -263,7 +373,7 @@
|
||||
minimatch "^3.1.2"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@eslint/js@^9.9.0", "@eslint/js@9.9.1":
|
||||
"@eslint/js@9.9.1", "@eslint/js@^9.9.0":
|
||||
version "9.9.1"
|
||||
resolved "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz"
|
||||
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
|
||||
@@ -314,7 +424,7 @@
|
||||
resolved "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/6.6.0/fontawesome-common-types-6.6.0.tgz"
|
||||
integrity sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==
|
||||
|
||||
"@fortawesome/fontawesome-svg-core@^6.6.0", "@fortawesome/fontawesome-svg-core@~1 || ~6":
|
||||
"@fortawesome/fontawesome-svg-core@^6.6.0":
|
||||
version "6.6.0"
|
||||
resolved "https://npm.fontawesome.com/@fortawesome/fontawesome-svg-core/-/6.6.0/fontawesome-svg-core-6.6.0.tgz"
|
||||
integrity sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==
|
||||
@@ -412,7 +522,7 @@
|
||||
"@nodelib/fs.stat" "2.0.5"
|
||||
run-parallel "^1.1.9"
|
||||
|
||||
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||
@@ -734,10 +844,85 @@
|
||||
resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz"
|
||||
integrity sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.21.1":
|
||||
version "4.21.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz"
|
||||
integrity sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==
|
||||
"@rollup/rollup-android-arm-eabi@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54"
|
||||
integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e"
|
||||
integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f"
|
||||
integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz"
|
||||
integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb"
|
||||
integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3"
|
||||
integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496"
|
||||
integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065"
|
||||
integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d"
|
||||
integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983"
|
||||
integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58"
|
||||
integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b"
|
||||
integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127"
|
||||
integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5"
|
||||
integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2"
|
||||
integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.24.0":
|
||||
version "4.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818"
|
||||
integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==
|
||||
|
||||
"@sigstore/bundle@^2.3.2":
|
||||
version "2.3.2"
|
||||
@@ -860,12 +1045,12 @@
|
||||
resolved "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.4.tgz"
|
||||
integrity sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA==
|
||||
|
||||
"@types/estree@1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
"@types/estree@1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz"
|
||||
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
|
||||
|
||||
"@types/node@^18.0.0 || >=20.0.0", "@types/node@>=13.7.0":
|
||||
"@types/node@>=13.7.0":
|
||||
version "22.5.5"
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz"
|
||||
integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==
|
||||
@@ -912,7 +1097,7 @@
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@8.3.0":
|
||||
"@typescript-eslint/parser@8.3.0":
|
||||
version "8.3.0"
|
||||
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz"
|
||||
integrity sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==
|
||||
@@ -1004,7 +1189,7 @@ acorn-jsx@^5.3.2:
|
||||
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.12.0:
|
||||
acorn@^8.12.0:
|
||||
version "8.12.1"
|
||||
resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz"
|
||||
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
|
||||
@@ -1051,14 +1236,7 @@ ansi-styles@^3.2.1:
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
ansi-styles@^4.0.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||
dependencies:
|
||||
color-convert "^2.0.1"
|
||||
|
||||
ansi-styles@^4.1.0:
|
||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||
@@ -1225,12 +1403,7 @@ bin-links@^4.0.4:
|
||||
read-cmd-shim "^4.0.0"
|
||||
write-file-atomic "^5.0.0"
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
|
||||
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
|
||||
|
||||
binary-extensions@^2.3.0:
|
||||
binary-extensions@^2.0.0, binary-extensions@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
|
||||
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
|
||||
@@ -1257,7 +1430,7 @@ braces@^3.0.3, braces@~3.0.2:
|
||||
dependencies:
|
||||
fill-range "^7.1.1"
|
||||
|
||||
browserslist@^4.23.1, browserslist@^4.23.3, "browserslist@>= 4.21.0":
|
||||
browserslist@^4.23.1, browserslist@^4.23.3:
|
||||
version "4.23.3"
|
||||
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz"
|
||||
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
|
||||
@@ -1407,16 +1580,16 @@ color-convert@^2.0.1:
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
|
||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
commander@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz"
|
||||
@@ -1497,7 +1670,7 @@ data-view-byte-offset@^1.0.0:
|
||||
es-errors "^1.3.0"
|
||||
is-data-view "^1.0.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@4:
|
||||
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
|
||||
version "4.3.6"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz"
|
||||
integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==
|
||||
@@ -1827,12 +2000,7 @@ eslint-scope@^8.0.2:
|
||||
esrecurse "^4.3.0"
|
||||
estraverse "^5.2.0"
|
||||
|
||||
eslint-visitor-keys@^3.3.0:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
|
||||
eslint-visitor-keys@^3.4.3:
|
||||
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
@@ -1842,7 +2010,7 @@ eslint-visitor-keys@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz"
|
||||
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
|
||||
|
||||
"eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.9.0, eslint@>=7:
|
||||
eslint@^9.9.0:
|
||||
version "9.9.1"
|
||||
resolved "https://registry.npmjs.org/eslint/-/eslint-9.9.1.tgz"
|
||||
integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==
|
||||
@@ -2029,6 +2197,8 @@ fs-extra@^11.1.0:
|
||||
|
||||
fs-minipass@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
|
||||
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
@@ -2039,6 +2209,11 @@ fs-minipass@^3.0.0, fs-minipass@^3.0.3:
|
||||
dependencies:
|
||||
minipass "^7.0.3"
|
||||
|
||||
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
function-bind@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||
@@ -2084,7 +2259,7 @@ get-symbol-description@^1.0.2:
|
||||
es-errors "^1.3.0"
|
||||
get-intrinsic "^1.2.4"
|
||||
|
||||
glob-parent@^5.1.2:
|
||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
@@ -2098,13 +2273,6 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@^10.2.2, glob@^10.3.10, glob@^10.4.5:
|
||||
version "10.4.5"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz"
|
||||
@@ -2152,12 +2320,7 @@ gopd@^1.0.1:
|
||||
dependencies:
|
||||
get-intrinsic "^1.1.3"
|
||||
|
||||
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||
version "4.2.11"
|
||||
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
|
||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||
|
||||
graceful-fs@^4.2.11, graceful-fs@^4.2.6:
|
||||
graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6:
|
||||
version "4.2.11"
|
||||
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
|
||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||
@@ -2549,6 +2712,8 @@ isexe@^2.0.0:
|
||||
|
||||
isexe@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz"
|
||||
integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
|
||||
|
||||
iterator.prototype@^1.1.2:
|
||||
version "1.1.2"
|
||||
@@ -2570,7 +2735,7 @@ jackspeak@^3.1.2:
|
||||
optionalDependencies:
|
||||
"@pkgjs/parseargs" "^0.11.0"
|
||||
|
||||
jiti@*, jiti@^1.21.0:
|
||||
jiti@^1.21.0:
|
||||
version "1.21.6"
|
||||
resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz"
|
||||
integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
|
||||
@@ -2934,17 +3099,21 @@ minipass-sized@^1.0.3:
|
||||
|
||||
minipass@^3.0.0:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz"
|
||||
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minipass@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz"
|
||||
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
|
||||
|
||||
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.1, minipass@^7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
|
||||
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
|
||||
|
||||
minipass@^5.0.0:
|
||||
version "5.0.0"
|
||||
|
||||
minizlib@^2.1.1, minizlib@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
|
||||
@@ -2958,16 +3127,16 @@ mkdirp@^1.0.3:
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
ms@^2.1.2:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
ms@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
ms@^2.1.2:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
mute-stream@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz"
|
||||
@@ -3384,10 +3553,10 @@ path-scurry@^1.11.1:
|
||||
lru-cache "^10.2.0"
|
||||
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz"
|
||||
integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
|
||||
picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz"
|
||||
integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
version "2.3.1"
|
||||
@@ -3445,15 +3614,7 @@ postcss-nested@^6.0.1:
|
||||
dependencies:
|
||||
postcss-selector-parser "^6.1.1"
|
||||
|
||||
postcss-selector-parser@^6.0.10:
|
||||
version "6.1.2"
|
||||
resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz"
|
||||
integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==
|
||||
dependencies:
|
||||
cssesc "^3.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1:
|
||||
postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1:
|
||||
version "6.1.2"
|
||||
resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz"
|
||||
integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==
|
||||
@@ -3466,14 +3627,14 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^
|
||||
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.41, postcss@>=8.0.9:
|
||||
version "8.4.41"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz"
|
||||
integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==
|
||||
postcss@^8.4.23, postcss@^8.4.41, postcss@^8.4.43:
|
||||
version "8.4.47"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz"
|
||||
integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
|
||||
dependencies:
|
||||
nanoid "^3.3.7"
|
||||
picocolors "^1.0.1"
|
||||
source-map-js "^1.2.0"
|
||||
picocolors "^1.1.0"
|
||||
source-map-js "^1.2.1"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
@@ -3485,7 +3646,7 @@ prettier-plugin-tailwindcss@^0.6.6:
|
||||
resolved "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.6.tgz"
|
||||
integrity sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==
|
||||
|
||||
prettier@^3.0, prettier@^3.3.3:
|
||||
prettier@^3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz"
|
||||
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
|
||||
@@ -3577,7 +3738,7 @@ react-colorful@^5.6.1:
|
||||
resolved "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz"
|
||||
integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==
|
||||
|
||||
"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18, react-dom@^18.0.0, react-dom@^18.3.1, "react-dom@>= 16.8.0", react-dom@>=16.4.0, react-dom@>=16.8, react-dom@>=16.8.0:
|
||||
react-dom@^18.3.1:
|
||||
version "18.3.1"
|
||||
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
|
||||
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
|
||||
@@ -3601,7 +3762,7 @@ react-easy-crop@^5.0.8:
|
||||
normalize-wheel "^1.0.1"
|
||||
tslib "^2.0.1"
|
||||
|
||||
react-is@^16.13.1, react-is@^16.7.0, "react-is@>= 16.8.0":
|
||||
react-is@^16.13.1, react-is@^16.7.0:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
@@ -3626,7 +3787,7 @@ react-router@6.26.1:
|
||||
dependencies:
|
||||
"@remix-run/router" "1.19.1"
|
||||
|
||||
"react@^16.14.0 || 17.x || 18.x", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", react@^18, react@^18.0.0, react@^18.3.1, "react@>= 16.8.0", react@>=16.3, react@>=16.4.0, react@>=16.8, react@>=16.8.0:
|
||||
react@^18.3.1:
|
||||
version "18.3.1"
|
||||
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
|
||||
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
|
||||
@@ -3695,16 +3856,7 @@ resolve-from@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve@^1.1.7:
|
||||
version "1.22.8"
|
||||
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
|
||||
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||
dependencies:
|
||||
is-core-module "^2.13.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^1.22.2:
|
||||
resolve@^1.1.7, resolve@^1.22.2:
|
||||
version "1.22.8"
|
||||
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
|
||||
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||
@@ -3733,28 +3885,28 @@ reusify@^1.0.4:
|
||||
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
||||
|
||||
rollup@^4.20.0:
|
||||
version "4.21.1"
|
||||
resolved "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz"
|
||||
integrity sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==
|
||||
version "4.24.0"
|
||||
resolved "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz"
|
||||
integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==
|
||||
dependencies:
|
||||
"@types/estree" "1.0.5"
|
||||
"@types/estree" "1.0.6"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.21.1"
|
||||
"@rollup/rollup-android-arm64" "4.21.1"
|
||||
"@rollup/rollup-darwin-arm64" "4.21.1"
|
||||
"@rollup/rollup-darwin-x64" "4.21.1"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.21.1"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.21.1"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.21.1"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.21.1"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.21.1"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.21.1"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.21.1"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.21.1"
|
||||
"@rollup/rollup-linux-x64-musl" "4.21.1"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.21.1"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.21.1"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.21.1"
|
||||
"@rollup/rollup-android-arm-eabi" "4.24.0"
|
||||
"@rollup/rollup-android-arm64" "4.24.0"
|
||||
"@rollup/rollup-darwin-arm64" "4.24.0"
|
||||
"@rollup/rollup-darwin-x64" "4.24.0"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.24.0"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.24.0"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.24.0"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.24.0"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.24.0"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.24.0"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.24.0"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.24.0"
|
||||
"@rollup/rollup-linux-x64-musl" "4.24.0"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.24.0"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.24.0"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.24.0"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
run-parallel@^1.1.9:
|
||||
@@ -3800,12 +3952,7 @@ semver@^6.3.1:
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.6.3:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
|
||||
semver@^7.6.0:
|
||||
semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.6.0, semver@^7.6.3:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
@@ -3898,10 +4045,10 @@ socks@^2.8.3:
|
||||
ip-address "^9.0.5"
|
||||
smart-buffer "^4.2.0"
|
||||
|
||||
source-map-js@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
|
||||
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
|
||||
source-map-js@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
|
||||
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
|
||||
|
||||
spdx-correct@^3.0.0:
|
||||
version "3.2.0"
|
||||
@@ -3918,6 +4065,8 @@ spdx-exceptions@^2.1.0:
|
||||
|
||||
spdx-expression-parse@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"
|
||||
integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
|
||||
dependencies:
|
||||
spdx-exceptions "^2.1.0"
|
||||
spdx-license-ids "^3.0.0"
|
||||
@@ -3931,7 +4080,9 @@ spdx-expression-parse@^4.0.0:
|
||||
spdx-license-ids "^3.0.0"
|
||||
|
||||
spdx-license-ids@^3.0.0:
|
||||
version "3.0.18"
|
||||
version "3.0.20"
|
||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89"
|
||||
integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==
|
||||
|
||||
sprintf-js@^1.1.3:
|
||||
version "1.1.3"
|
||||
@@ -4059,7 +4210,7 @@ strip-json-comments@^3.1.1:
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
styled-components@^5.3.0, "styled-components@>= 2":
|
||||
styled-components@^5.3.0:
|
||||
version "5.3.11"
|
||||
resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz"
|
||||
integrity sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==
|
||||
@@ -4162,12 +4313,7 @@ tar@^6.1.11, tar@^6.2.1:
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
text-table@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
|
||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||
|
||||
text-table@~0.2.0:
|
||||
text-table@^0.2.0, text-table@~0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
|
||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||
@@ -4297,7 +4443,7 @@ typescript-eslint@^8.0.1:
|
||||
"@typescript-eslint/parser" "8.3.0"
|
||||
"@typescript-eslint/utils" "8.3.0"
|
||||
|
||||
typescript@^5.0.0, typescript@^5.5.3, typescript@>=4.2.0:
|
||||
typescript@^5.5.3:
|
||||
version "5.5.4"
|
||||
resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz"
|
||||
integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
|
||||
@@ -4398,13 +4544,13 @@ vite-tsconfig-paths@^5.0.1:
|
||||
globrex "^0.1.2"
|
||||
tsconfck "^3.0.3"
|
||||
|
||||
vite@*, "vite@^4.2.0 || ^5.0.0", vite@^5.0.0, vite@^5.4.1:
|
||||
version "5.4.2"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz"
|
||||
integrity sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==
|
||||
vite@^5.4.1:
|
||||
version "5.4.8"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz"
|
||||
integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==
|
||||
dependencies:
|
||||
esbuild "^0.21.3"
|
||||
postcss "^8.4.41"
|
||||
postcss "^8.4.43"
|
||||
rollup "^4.20.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.3"
|
||||
|
||||
Reference in new issue
Block a user