fix: mostly UI imporvements
This commit is contained in:
@@ -18,6 +18,12 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ai-sdk/react": "^1.2.5",
|
"@ai-sdk/react": "^1.2.5",
|
||||||
|
"@codemirror/commands": "^6.7.0",
|
||||||
|
"@codemirror/lang-javascript": "^6.2.0",
|
||||||
|
"@codemirror/lang-json": "^6.0.1",
|
||||||
|
"@codemirror/state": "^6.4.0",
|
||||||
|
"@codemirror/theme-one-dark": "^6.1.3",
|
||||||
|
"@codemirror/view": "^6.35.0",
|
||||||
"@dnd-kit/core": "^6.3.1",
|
"@dnd-kit/core": "^6.3.1",
|
||||||
"@dnd-kit/sortable": "^10.0.0",
|
"@dnd-kit/sortable": "^10.0.0",
|
||||||
"@dnd-kit/utilities": "^3.2.2",
|
"@dnd-kit/utilities": "^3.2.2",
|
||||||
@@ -28,8 +34,8 @@
|
|||||||
"@number-flow/react": "0.5.10",
|
"@number-flow/react": "0.5.10",
|
||||||
"@openpanel/common": "workspace:^",
|
"@openpanel/common": "workspace:^",
|
||||||
"@openpanel/constants": "workspace:^",
|
"@openpanel/constants": "workspace:^",
|
||||||
"@openpanel/integrations": "workspace:^",
|
|
||||||
"@openpanel/importer": "workspace:^",
|
"@openpanel/importer": "workspace:^",
|
||||||
|
"@openpanel/integrations": "workspace:^",
|
||||||
"@openpanel/json": "workspace:*",
|
"@openpanel/json": "workspace:*",
|
||||||
"@openpanel/payments": "workspace:*",
|
"@openpanel/payments": "workspace:*",
|
||||||
"@openpanel/sdk-info": "workspace:^",
|
"@openpanel/sdk-info": "workspace:^",
|
||||||
@@ -84,12 +90,6 @@
|
|||||||
"@types/d3": "^7.4.3",
|
"@types/d3": "^7.4.3",
|
||||||
"ai": "^4.2.10",
|
"ai": "^4.2.10",
|
||||||
"bind-event-listener": "^3.0.0",
|
"bind-event-listener": "^3.0.0",
|
||||||
"@codemirror/commands": "^6.7.0",
|
|
||||||
"@codemirror/lang-javascript": "^6.2.0",
|
|
||||||
"@codemirror/lang-json": "^6.0.1",
|
|
||||||
"@codemirror/state": "^6.4.0",
|
|
||||||
"@codemirror/theme-one-dark": "^6.1.3",
|
|
||||||
"@codemirror/view": "^6.35.0",
|
|
||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^0.2.1",
|
"cmdk": "^0.2.1",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { getProfileName } from '@/utils/getters';
|
|||||||
import type { ColumnDef } from '@tanstack/react-table';
|
import type { ColumnDef } from '@tanstack/react-table';
|
||||||
|
|
||||||
import { ColumnCreatedAt } from '@/components/column-created-at';
|
import { ColumnCreatedAt } from '@/components/column-created-at';
|
||||||
|
import { ProfileAvatar } from '@/components/profiles/profile-avatar';
|
||||||
import { KeyValueGrid } from '@/components/ui/key-value-grid';
|
import { KeyValueGrid } from '@/components/ui/key-value-grid';
|
||||||
import type { IServiceEvent } from '@openpanel/db';
|
import type { IServiceEvent } from '@openpanel/db';
|
||||||
|
|
||||||
@@ -107,8 +108,9 @@ export function useColumns() {
|
|||||||
return (
|
return (
|
||||||
<ProjectLink
|
<ProjectLink
|
||||||
href={`/profiles/${encodeURIComponent(profile.id)}`}
|
href={`/profiles/${encodeURIComponent(profile.id)}`}
|
||||||
className="whitespace-nowrap font-medium hover:underline"
|
className="group whitespace-nowrap font-medium hover:underline row items-center gap-2"
|
||||||
>
|
>
|
||||||
|
<ProfileAvatar size="sm" {...profile} />
|
||||||
{getProfileName(profile)}
|
{getProfileName(profile)}
|
||||||
</ProjectLink>
|
</ProjectLink>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { ProfileAvatar } from '@/components/profiles/profile-avatar';
|
import { ProfileAvatar } from '@/components/profiles/profile-avatar';
|
||||||
import { SerieIcon } from '@/components/report-chart/common/serie-icon';
|
import { SerieIcon } from '@/components/report-chart/common/serie-icon';
|
||||||
|
import { Tooltiper } from '@/components/ui/tooltip';
|
||||||
import { pushModal } from '@/modals';
|
import { pushModal } from '@/modals';
|
||||||
import { cn } from '@/utils/cn';
|
import { cn } from '@/utils/cn';
|
||||||
import { formatTimeAgoOrDateTime } from '@/utils/date';
|
import { formatTimeAgoOrDateTime } from '@/utils/date';
|
||||||
@@ -115,7 +116,7 @@ export const EventItem = memo<EventItemProps>(
|
|||||||
)}
|
)}
|
||||||
{viewOptions.profileId !== false && (
|
{viewOptions.profileId !== false && (
|
||||||
<Pill
|
<Pill
|
||||||
className="@max-xl:ml-auto @max-lg:[&>span]:inline mx-4"
|
className="@max-xl:ml-auto @max-lg:[&>span]:inline"
|
||||||
icon={<ProfileAvatar size="xs" {...event.profile} />}
|
icon={<ProfileAvatar size="xs" {...event.profile} />}
|
||||||
>
|
>
|
||||||
{getProfileName(event.profile)}
|
{getProfileName(event.profile)}
|
||||||
@@ -164,7 +165,8 @@ function Pill({
|
|||||||
className,
|
className,
|
||||||
}: { children: React.ReactNode; icon?: React.ReactNode; className?: string }) {
|
}: { children: React.ReactNode; icon?: React.ReactNode; className?: string }) {
|
||||||
return (
|
return (
|
||||||
<div
|
<Tooltiper
|
||||||
|
content={children}
|
||||||
className={cn(
|
className={cn(
|
||||||
'shrink-0 whitespace-nowrap inline-flex gap-2 items-center rounded-full @3xl:text-muted-foreground h-6 text-xs font-mono',
|
'shrink-0 whitespace-nowrap inline-flex gap-2 items-center rounded-full @3xl:text-muted-foreground h-6 text-xs font-mono',
|
||||||
className,
|
className,
|
||||||
@@ -172,6 +174,6 @@ function Pill({
|
|||||||
>
|
>
|
||||||
{icon && <div className="size-4 center-center">{icon}</div>}
|
{icon && <div className="size-4 center-center">{icon}</div>}
|
||||||
<div className="hidden @3xl:inline">{children}</div>
|
<div className="hidden @3xl:inline">{children}</div>
|
||||||
</div>
|
</Tooltiper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
161
apps/start/src/components/facehash/avatar-fallback.tsx
Normal file
161
apps/start/src/components/facehash/avatar-fallback.tsx
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { useAvatarContext } from './avatar';
|
||||||
|
import { Facehash, type FacehashProps } from './facehash';
|
||||||
|
|
||||||
|
const WHITESPACE_REGEX = /\s+/;
|
||||||
|
|
||||||
|
export type AvatarFallbackProps = Omit<
|
||||||
|
React.HTMLAttributes<HTMLSpanElement>,
|
||||||
|
'children'
|
||||||
|
> & {
|
||||||
|
/**
|
||||||
|
* The name to derive initials and Facehash from.
|
||||||
|
*/
|
||||||
|
name?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay in milliseconds before showing the fallback.
|
||||||
|
* Useful to prevent flashing when images load quickly.
|
||||||
|
* @default 0
|
||||||
|
*/
|
||||||
|
delayMs?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom children to render instead of initials or Facehash.
|
||||||
|
*/
|
||||||
|
children?: React.ReactNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the Facehash component as fallback instead of initials.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
facehash?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use Tailwind group-hover for hover detection.
|
||||||
|
* When true, hover effect triggers when a parent with "group" class is hovered.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
groupHover?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Props to pass to the Facehash component.
|
||||||
|
*/
|
||||||
|
facehashProps?: Omit<FacehashProps, 'name'>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts initials from a name string.
|
||||||
|
*/
|
||||||
|
function getInitials(name: string): string {
|
||||||
|
const parts = name.trim().split(WHITESPACE_REGEX);
|
||||||
|
if (parts.length === 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
if (parts.length === 1) {
|
||||||
|
return parts[0]?.charAt(0).toUpperCase() || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const firstInitial = parts[0]?.charAt(0) || '';
|
||||||
|
const lastInitial = parts.at(-1)?.charAt(0) || '';
|
||||||
|
return (firstInitial + lastInitial).toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fallback component that displays when the image fails to load.
|
||||||
|
* Uses Facehash by default, can show initials or custom content.
|
||||||
|
*/
|
||||||
|
export const AvatarFallback = React.forwardRef<
|
||||||
|
HTMLSpanElement,
|
||||||
|
AvatarFallbackProps
|
||||||
|
>(
|
||||||
|
(
|
||||||
|
{
|
||||||
|
name = '',
|
||||||
|
delayMs = 0,
|
||||||
|
children,
|
||||||
|
facehash = true,
|
||||||
|
groupHover = false,
|
||||||
|
facehashProps,
|
||||||
|
className,
|
||||||
|
style,
|
||||||
|
...props
|
||||||
|
},
|
||||||
|
ref,
|
||||||
|
) => {
|
||||||
|
const { imageLoadingStatus } = useAvatarContext();
|
||||||
|
const [canRender, setCanRender] = React.useState(delayMs === 0);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
if (delayMs > 0) {
|
||||||
|
const timerId = window.setTimeout(() => setCanRender(true), delayMs);
|
||||||
|
return () => window.clearTimeout(timerId);
|
||||||
|
}
|
||||||
|
}, [delayMs]);
|
||||||
|
|
||||||
|
const initials = React.useMemo(() => getInitials(name), [name]);
|
||||||
|
|
||||||
|
const shouldRender =
|
||||||
|
canRender &&
|
||||||
|
imageLoadingStatus !== 'loaded' &&
|
||||||
|
imageLoadingStatus !== 'loading';
|
||||||
|
|
||||||
|
if (!shouldRender) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom children take precedence
|
||||||
|
if (children) {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
ref={ref}
|
||||||
|
className={className}
|
||||||
|
style={style}
|
||||||
|
data-avatar-fallback=""
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Facehash mode (default)
|
||||||
|
if (facehash) {
|
||||||
|
return (
|
||||||
|
<Facehash
|
||||||
|
ref={ref as React.Ref<HTMLDivElement>}
|
||||||
|
name={name || '?'}
|
||||||
|
size="100%"
|
||||||
|
groupHover={groupHover}
|
||||||
|
{...facehashProps}
|
||||||
|
style={{
|
||||||
|
...style,
|
||||||
|
}}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initials mode
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
ref={ref}
|
||||||
|
className={className}
|
||||||
|
style={{
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
...style,
|
||||||
|
}}
|
||||||
|
data-avatar-fallback=""
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{initials}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
AvatarFallback.displayName = 'AvatarFallback';
|
||||||
94
apps/start/src/components/facehash/avatar-image.tsx
Normal file
94
apps/start/src/components/facehash/avatar-image.tsx
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { useAvatarContext } from './avatar';
|
||||||
|
|
||||||
|
type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
|
||||||
|
|
||||||
|
export type AvatarImageProps = Omit<
|
||||||
|
React.ImgHTMLAttributes<HTMLImageElement>,
|
||||||
|
'src'
|
||||||
|
> & {
|
||||||
|
/**
|
||||||
|
* The image source URL. If empty or undefined, triggers error state.
|
||||||
|
*/
|
||||||
|
src?: string | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback when the image loading status changes.
|
||||||
|
*/
|
||||||
|
onLoadingStatusChange?: (status: ImageLoadingStatus) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Image component that syncs its loading state with the Avatar context.
|
||||||
|
* Automatically hides when loading fails, allowing fallback to show.
|
||||||
|
*/
|
||||||
|
export const AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(
|
||||||
|
(
|
||||||
|
{ src, alt = '', className, style, onLoadingStatusChange, ...props },
|
||||||
|
ref,
|
||||||
|
) => {
|
||||||
|
const { imageLoadingStatus, onImageLoadingStatusChange } =
|
||||||
|
useAvatarContext();
|
||||||
|
|
||||||
|
const imageRef = React.useRef<HTMLImageElement>(null);
|
||||||
|
React.useImperativeHandle(ref, () => imageRef.current!);
|
||||||
|
|
||||||
|
const updateStatus = React.useCallback(
|
||||||
|
(status: ImageLoadingStatus) => {
|
||||||
|
onImageLoadingStatusChange(status);
|
||||||
|
onLoadingStatusChange?.(status);
|
||||||
|
},
|
||||||
|
[onImageLoadingStatusChange, onLoadingStatusChange],
|
||||||
|
);
|
||||||
|
|
||||||
|
React.useLayoutEffect(() => {
|
||||||
|
if (!src) {
|
||||||
|
updateStatus('error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let isMounted = true;
|
||||||
|
const image = new Image();
|
||||||
|
|
||||||
|
const setStatus = (status: ImageLoadingStatus) => {
|
||||||
|
if (!isMounted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updateStatus(status);
|
||||||
|
};
|
||||||
|
|
||||||
|
setStatus('loading');
|
||||||
|
|
||||||
|
image.onload = () => setStatus('loaded');
|
||||||
|
image.onerror = () => setStatus('error');
|
||||||
|
image.src = src;
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
isMounted = false;
|
||||||
|
};
|
||||||
|
}, [src, updateStatus]);
|
||||||
|
|
||||||
|
if (imageLoadingStatus !== 'loaded') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<img
|
||||||
|
ref={imageRef}
|
||||||
|
src={src || undefined}
|
||||||
|
alt={alt}
|
||||||
|
className={className}
|
||||||
|
style={{
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
objectFit: 'cover',
|
||||||
|
...style,
|
||||||
|
}}
|
||||||
|
data-avatar-image=""
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
AvatarImage.displayName = 'AvatarImage';
|
||||||
78
apps/start/src/components/facehash/avatar.tsx
Normal file
78
apps/start/src/components/facehash/avatar.tsx
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
|
||||||
|
|
||||||
|
export type AvatarContextValue = {
|
||||||
|
imageLoadingStatus: ImageLoadingStatus;
|
||||||
|
onImageLoadingStatusChange: (status: ImageLoadingStatus) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const AvatarContext = React.createContext<AvatarContextValue | null>(null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook to access the Avatar context.
|
||||||
|
* Throws an error if used outside of Avatar.
|
||||||
|
*/
|
||||||
|
export const useAvatarContext = () => {
|
||||||
|
const context = React.useContext(AvatarContext);
|
||||||
|
if (!context) {
|
||||||
|
throw new Error(
|
||||||
|
'Avatar compound components must be rendered within an Avatar component',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type AvatarProps = React.HTMLAttributes<HTMLSpanElement> & {
|
||||||
|
/**
|
||||||
|
* Render as a different element using the asChild pattern.
|
||||||
|
* When true, Avatar renders its child and merges props.
|
||||||
|
*/
|
||||||
|
asChild?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Root avatar component that provides context for image loading state.
|
||||||
|
*/
|
||||||
|
export const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(
|
||||||
|
({ children, className, style, asChild = false, ...props }, ref) => {
|
||||||
|
const [imageLoadingStatus, setImageLoadingStatus] =
|
||||||
|
React.useState<ImageLoadingStatus>('idle');
|
||||||
|
|
||||||
|
const contextValue: AvatarContextValue = React.useMemo(
|
||||||
|
() => ({
|
||||||
|
imageLoadingStatus,
|
||||||
|
onImageLoadingStatusChange: setImageLoadingStatus,
|
||||||
|
}),
|
||||||
|
[imageLoadingStatus],
|
||||||
|
);
|
||||||
|
|
||||||
|
const Element = asChild ? React.Fragment : 'span';
|
||||||
|
const elementProps = asChild
|
||||||
|
? {}
|
||||||
|
: {
|
||||||
|
ref,
|
||||||
|
className,
|
||||||
|
style: {
|
||||||
|
position: 'relative' as const,
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
flexShrink: 0,
|
||||||
|
overflow: 'hidden',
|
||||||
|
...style,
|
||||||
|
},
|
||||||
|
'data-avatar': '',
|
||||||
|
'data-state': imageLoadingStatus,
|
||||||
|
...props,
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AvatarContext.Provider value={contextValue}>
|
||||||
|
<Element {...elementProps}>{children}</Element>
|
||||||
|
</AvatarContext.Provider>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
Avatar.displayName = 'Avatar';
|
||||||
417
apps/start/src/components/facehash/facehash.tsx
Normal file
417
apps/start/src/components/facehash/facehash.tsx
Normal file
@@ -0,0 +1,417 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { FACES } from './faces';
|
||||||
|
import { stringHash } from './utils/hash';
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Types
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
export type Intensity3D = 'none' | 'subtle' | 'medium' | 'dramatic';
|
||||||
|
export type Variant = 'gradient' | 'solid';
|
||||||
|
|
||||||
|
export type ColorScheme = 'light' | 'dark' | 'auto';
|
||||||
|
|
||||||
|
export interface FacehashProps
|
||||||
|
extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
|
||||||
|
/**
|
||||||
|
* String to generate a deterministic face from.
|
||||||
|
* Same string always produces the same face.
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size in pixels or CSS units.
|
||||||
|
* @default 40
|
||||||
|
*/
|
||||||
|
size?: number | string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Background style.
|
||||||
|
* - "gradient": Adds gradient overlay (default)
|
||||||
|
* - "solid": Plain background color
|
||||||
|
* @default "gradient"
|
||||||
|
*/
|
||||||
|
variant?: Variant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3D effect intensity.
|
||||||
|
* @default "dramatic"
|
||||||
|
*/
|
||||||
|
intensity3d?: Intensity3D;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable hover interaction.
|
||||||
|
* When true, face "looks straight" on hover.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
interactive?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use Tailwind group-hover for hover detection.
|
||||||
|
* When true, hover effect triggers when a parent with "group" class is hovered.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
groupHover?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show first letter of name below the face.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
showInitial?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hex color array for inline styles.
|
||||||
|
* Use this OR colorClasses, not both.
|
||||||
|
*/
|
||||||
|
colors?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Colors to use in light mode.
|
||||||
|
* Used when colorScheme is "light" or "auto".
|
||||||
|
*/
|
||||||
|
colorsLight?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Colors to use in dark mode.
|
||||||
|
* Used when colorScheme is "dark" or "auto".
|
||||||
|
*/
|
||||||
|
colorsDark?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which color scheme to use.
|
||||||
|
* - "light": Always use colorsLight
|
||||||
|
* - "dark": Always use colorsDark
|
||||||
|
* - "auto": Use CSS prefers-color-scheme media query
|
||||||
|
* @default "auto"
|
||||||
|
*/
|
||||||
|
colorScheme?: ColorScheme;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tailwind class array for background colors.
|
||||||
|
* Example: ["bg-pink-500 dark:bg-pink-600", "bg-blue-500 dark:bg-blue-600"]
|
||||||
|
* Use this OR colors, not both.
|
||||||
|
*/
|
||||||
|
colorClasses?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom gradient overlay class (Tailwind).
|
||||||
|
* When provided, replaces the default pure CSS gradient.
|
||||||
|
* Only used when variant="gradient".
|
||||||
|
*/
|
||||||
|
gradientOverlayClass?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Constants
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
const INTENSITY_PRESETS = {
|
||||||
|
none: {
|
||||||
|
rotateRange: 0,
|
||||||
|
translateZ: 0,
|
||||||
|
perspective: 'none',
|
||||||
|
},
|
||||||
|
subtle: {
|
||||||
|
rotateRange: 5,
|
||||||
|
translateZ: 4,
|
||||||
|
perspective: '800px',
|
||||||
|
},
|
||||||
|
medium: {
|
||||||
|
rotateRange: 10,
|
||||||
|
translateZ: 8,
|
||||||
|
perspective: '500px',
|
||||||
|
},
|
||||||
|
dramatic: {
|
||||||
|
rotateRange: 15,
|
||||||
|
translateZ: 12,
|
||||||
|
perspective: '300px',
|
||||||
|
},
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
const SPHERE_POSITIONS = [
|
||||||
|
{ x: -1, y: 1 }, // down-right
|
||||||
|
{ x: 1, y: 1 }, // up-right
|
||||||
|
{ x: 1, y: 0 }, // up
|
||||||
|
{ x: 0, y: 1 }, // right
|
||||||
|
{ x: -1, y: 0 }, // down
|
||||||
|
{ x: 0, y: 0 }, // center
|
||||||
|
{ x: 0, y: -1 }, // left
|
||||||
|
{ x: -1, y: -1 }, // down-left
|
||||||
|
{ x: 1, y: -1 }, // up-left
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
// Default color palettes
|
||||||
|
export const DEFAULT_COLORS = [
|
||||||
|
'#fce7f3', // pink-100
|
||||||
|
'#fef3c7', // amber-100
|
||||||
|
'#dbeafe', // blue-100
|
||||||
|
'#d1fae5', // emerald-100
|
||||||
|
'#ede9fe', // violet-100
|
||||||
|
'#fee2e2', // red-100
|
||||||
|
'#e0e7ff', // indigo-100
|
||||||
|
'#ccfbf1', // teal-100
|
||||||
|
];
|
||||||
|
|
||||||
|
export const DEFAULT_COLORS_LIGHT = DEFAULT_COLORS;
|
||||||
|
|
||||||
|
export const DEFAULT_COLORS_DARK = [
|
||||||
|
'#db2777', // pink-600
|
||||||
|
'#d97706', // amber-600
|
||||||
|
'#2563eb', // blue-600
|
||||||
|
'#059669', // emerald-600
|
||||||
|
'#7c3aed', // violet-600
|
||||||
|
'#dc2626', // red-600
|
||||||
|
'#4f46e5', // indigo-600
|
||||||
|
'#0d9488', // teal-600
|
||||||
|
];
|
||||||
|
|
||||||
|
// Default gradient as pure CSS (works without Tailwind)
|
||||||
|
const DEFAULT_GRADIENT_STYLE: React.CSSProperties = {
|
||||||
|
background:
|
||||||
|
'radial-gradient(ellipse 100% 100% at 50% 50%, rgba(255,255,255,0.15) 0%, transparent 60%)',
|
||||||
|
};
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Component
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Facehash - Deterministic avatar faces from any string.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Hook to detect system color scheme preference
|
||||||
|
*/
|
||||||
|
function useColorScheme(colorScheme: ColorScheme): 'light' | 'dark' {
|
||||||
|
const [systemScheme, setSystemScheme] = React.useState<'light' | 'dark'>(
|
||||||
|
() => {
|
||||||
|
if (typeof window === 'undefined') return 'light';
|
||||||
|
return window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||||
|
? 'dark'
|
||||||
|
: 'light';
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
if (colorScheme !== 'auto') return;
|
||||||
|
|
||||||
|
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
|
const handler = (e: MediaQueryListEvent) => {
|
||||||
|
setSystemScheme(e.matches ? 'dark' : 'light');
|
||||||
|
};
|
||||||
|
|
||||||
|
mediaQuery.addEventListener('change', handler);
|
||||||
|
return () => mediaQuery.removeEventListener('change', handler);
|
||||||
|
}, [colorScheme]);
|
||||||
|
|
||||||
|
if (colorScheme === 'auto') {
|
||||||
|
return systemScheme;
|
||||||
|
}
|
||||||
|
return colorScheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Facehash = React.forwardRef<HTMLDivElement, FacehashProps>(
|
||||||
|
(
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
size = 40,
|
||||||
|
variant = 'gradient',
|
||||||
|
intensity3d = 'dramatic',
|
||||||
|
interactive = true,
|
||||||
|
showInitial = true,
|
||||||
|
colors,
|
||||||
|
colorsLight,
|
||||||
|
colorsDark,
|
||||||
|
colorScheme = 'auto',
|
||||||
|
colorClasses,
|
||||||
|
gradientOverlayClass,
|
||||||
|
groupHover = false,
|
||||||
|
className,
|
||||||
|
style,
|
||||||
|
onMouseEnter,
|
||||||
|
onMouseLeave,
|
||||||
|
...props
|
||||||
|
},
|
||||||
|
ref,
|
||||||
|
) => {
|
||||||
|
const [isHovered, setIsHovered] = React.useState(false);
|
||||||
|
const resolvedScheme = useColorScheme(colorScheme);
|
||||||
|
|
||||||
|
// For group-hover, we use CSS instead of JS state
|
||||||
|
const usesCssHover = groupHover;
|
||||||
|
|
||||||
|
// Determine which colors to use based on scheme
|
||||||
|
const effectiveColors = React.useMemo(() => {
|
||||||
|
// If explicit colors prop is provided, use it
|
||||||
|
if (colors) return colors;
|
||||||
|
// If colorClasses is provided, don't use inline colors
|
||||||
|
if (colorClasses) return undefined;
|
||||||
|
|
||||||
|
// Use scheme-specific colors or defaults
|
||||||
|
const lightColors = colorsLight ?? DEFAULT_COLORS_LIGHT;
|
||||||
|
const darkColors = colorsDark ?? DEFAULT_COLORS_DARK;
|
||||||
|
|
||||||
|
return resolvedScheme === 'dark' ? darkColors : lightColors;
|
||||||
|
}, [colors, colorClasses, colorsLight, colorsDark, resolvedScheme]);
|
||||||
|
|
||||||
|
// Generate deterministic values from name
|
||||||
|
const { FaceComponent, colorIndex, rotation } = React.useMemo(() => {
|
||||||
|
const hash = stringHash(name);
|
||||||
|
const faceIndex = hash % FACES.length;
|
||||||
|
const colorsLength = colorClasses?.length ?? effectiveColors?.length ?? 1;
|
||||||
|
const _colorIndex = hash % colorsLength;
|
||||||
|
const positionIndex = hash % SPHERE_POSITIONS.length;
|
||||||
|
const position = SPHERE_POSITIONS[positionIndex] ?? { x: 0, y: 0 };
|
||||||
|
|
||||||
|
return {
|
||||||
|
FaceComponent: FACES[faceIndex] ?? FACES[0],
|
||||||
|
colorIndex: _colorIndex,
|
||||||
|
rotation: position,
|
||||||
|
};
|
||||||
|
}, [name, effectiveColors?.length, colorClasses?.length]);
|
||||||
|
|
||||||
|
// Get intensity preset
|
||||||
|
const preset = INTENSITY_PRESETS[intensity3d];
|
||||||
|
|
||||||
|
// Calculate 3D transforms
|
||||||
|
const { baseTransform, hoverTransform } = React.useMemo(() => {
|
||||||
|
if (intensity3d === 'none') {
|
||||||
|
return { baseTransform: undefined, hoverTransform: undefined };
|
||||||
|
}
|
||||||
|
|
||||||
|
const rotateX = rotation.x * preset.rotateRange;
|
||||||
|
const rotateY = rotation.y * preset.rotateRange;
|
||||||
|
|
||||||
|
return {
|
||||||
|
baseTransform: `rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateZ(${preset.translateZ}px)`,
|
||||||
|
hoverTransform: `rotateX(0deg) rotateY(0deg) translateZ(${preset.translateZ}px)`,
|
||||||
|
};
|
||||||
|
}, [intensity3d, rotation, preset]);
|
||||||
|
|
||||||
|
// For JS-based hover, apply transform based on hover state
|
||||||
|
const transform = React.useMemo(() => {
|
||||||
|
if (usesCssHover || !interactive) {
|
||||||
|
return baseTransform;
|
||||||
|
}
|
||||||
|
return isHovered ? hoverTransform : baseTransform;
|
||||||
|
}, [usesCssHover, interactive, isHovered, baseTransform, hoverTransform]);
|
||||||
|
|
||||||
|
// Size style
|
||||||
|
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
||||||
|
|
||||||
|
// Initial letter
|
||||||
|
const initial = name.charAt(0).toUpperCase();
|
||||||
|
|
||||||
|
// Background: either hex color (inline) or class
|
||||||
|
const bgColorClass = colorClasses?.[colorIndex];
|
||||||
|
const bgColorHex = effectiveColors?.[colorIndex];
|
||||||
|
|
||||||
|
// Event handlers (only used for JS-based hover, not group-hover)
|
||||||
|
const handleMouseEnter = React.useCallback(
|
||||||
|
(e: React.MouseEvent<HTMLDivElement>) => {
|
||||||
|
if (interactive && !usesCssHover) {
|
||||||
|
setIsHovered(true);
|
||||||
|
}
|
||||||
|
onMouseEnter?.(e);
|
||||||
|
},
|
||||||
|
[interactive, usesCssHover, onMouseEnter],
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleMouseLeave = React.useCallback(
|
||||||
|
(e: React.MouseEvent<HTMLDivElement>) => {
|
||||||
|
if (interactive && !usesCssHover) {
|
||||||
|
setIsHovered(false);
|
||||||
|
}
|
||||||
|
onMouseLeave?.(e);
|
||||||
|
},
|
||||||
|
[interactive, usesCssHover, onMouseLeave],
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
ref={ref}
|
||||||
|
role="img"
|
||||||
|
aria-label={`Avatar for ${name}`}
|
||||||
|
data-facehash-avatar=""
|
||||||
|
className={`${bgColorClass ?? ''} ${className ?? ''}`}
|
||||||
|
style={{
|
||||||
|
position: 'relative',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
width: sizeValue,
|
||||||
|
height: sizeValue,
|
||||||
|
perspective: preset.perspective,
|
||||||
|
color: 'currentColor',
|
||||||
|
...(bgColorHex && { backgroundColor: bgColorHex }),
|
||||||
|
...style,
|
||||||
|
}}
|
||||||
|
onMouseEnter={handleMouseEnter}
|
||||||
|
onMouseLeave={handleMouseLeave}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{/* Gradient overlay */}
|
||||||
|
{variant === 'gradient' && (
|
||||||
|
<div
|
||||||
|
className={gradientOverlayClass}
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
inset: 0,
|
||||||
|
pointerEvents: 'none',
|
||||||
|
...(gradientOverlayClass ? {} : DEFAULT_GRADIENT_STYLE),
|
||||||
|
}}
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* Face container with 3D transform */}
|
||||||
|
<div
|
||||||
|
data-facehash-avatar-face=""
|
||||||
|
className={
|
||||||
|
usesCssHover && interactive
|
||||||
|
? 'group-hover:[transform:var(--facehash-hover-transform)]'
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
inset: 0,
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
transform,
|
||||||
|
transition: interactive ? 'transform 0.2s ease-out' : undefined,
|
||||||
|
transformStyle: 'preserve-3d',
|
||||||
|
'--facehash-hover-transform': hoverTransform,
|
||||||
|
} as React.CSSProperties}
|
||||||
|
>
|
||||||
|
{/* Face SVG */}
|
||||||
|
<FaceComponent
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Initial letter */}
|
||||||
|
{showInitial && (
|
||||||
|
<span
|
||||||
|
data-facehash-avatar-initial=""
|
||||||
|
style={{
|
||||||
|
position: 'relative',
|
||||||
|
marginTop: '25%',
|
||||||
|
fontSize: `calc(${sizeValue} * 0.35)`,
|
||||||
|
fontWeight: 600,
|
||||||
|
lineHeight: 1,
|
||||||
|
userSelect: 'none',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{initial}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
Facehash.displayName = 'Facehash';
|
||||||
57
apps/start/src/components/facehash/faces.tsx
Normal file
57
apps/start/src/components/facehash/faces.tsx
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import type * as React from 'react';
|
||||||
|
|
||||||
|
export type FaceProps = {
|
||||||
|
className?: string;
|
||||||
|
style?: React.CSSProperties;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Round eyes face - simple circular eyes
|
||||||
|
*/
|
||||||
|
export const RoundFace: React.FC<FaceProps> = ({ className, style }) => (
|
||||||
|
<svg viewBox="0 0 100 100" className={className} style={style} aria-hidden="true">
|
||||||
|
<title>Round Eyes</title>
|
||||||
|
<circle cx="35" cy="45" r="8" fill="currentColor" />
|
||||||
|
<circle cx="65" cy="45" r="8" fill="currentColor" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cross eyes face - X-shaped eyes
|
||||||
|
*/
|
||||||
|
export const CrossFace: React.FC<FaceProps> = ({ className, style }) => (
|
||||||
|
<svg viewBox="0 0 100 100" className={className} style={style} aria-hidden="true">
|
||||||
|
<title>Cross Eyes</title>
|
||||||
|
<path d="M27 37 L43 53 M43 37 L27 53" stroke="currentColor" strokeWidth="4" strokeLinecap="round" />
|
||||||
|
<path d="M57 37 L73 53 M73 37 L57 53" stroke="currentColor" strokeWidth="4" strokeLinecap="round" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Line eyes face - horizontal line eyes
|
||||||
|
*/
|
||||||
|
export const LineFace: React.FC<FaceProps> = ({ className, style }) => (
|
||||||
|
<svg viewBox="0 0 100 100" className={className} style={style} aria-hidden="true">
|
||||||
|
<title>Line Eyes</title>
|
||||||
|
<line x1="27" y1="45" x2="43" y2="45" stroke="currentColor" strokeWidth="4" strokeLinecap="round" />
|
||||||
|
<line x1="57" y1="45" x2="73" y2="45" stroke="currentColor" strokeWidth="4" strokeLinecap="round" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Curved eyes face - sleepy/happy curved eyes
|
||||||
|
*/
|
||||||
|
export const CurvedFace: React.FC<FaceProps> = ({ className, style }) => (
|
||||||
|
<svg viewBox="0 0 100 100" className={className} style={style} aria-hidden="true">
|
||||||
|
<title>Curved Eyes</title>
|
||||||
|
<path d="M27 50 Q35 38 43 50" stroke="currentColor" strokeWidth="4" strokeLinecap="round" fill="none" />
|
||||||
|
<path d="M57 50 Q65 38 73 50" stroke="currentColor" strokeWidth="4" strokeLinecap="round" fill="none" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All available face components
|
||||||
|
*/
|
||||||
|
export const FACES = [RoundFace, CrossFace, LineFace, CurvedFace] as const;
|
||||||
|
|
||||||
|
export type FaceComponent = (typeof FACES)[number];
|
||||||
44
apps/start/src/components/facehash/index.ts
Normal file
44
apps/start/src/components/facehash/index.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
// ============================================================================
|
||||||
|
// Primary Export - This is what you want
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
export type { FacehashProps, Intensity3D, Variant, ColorScheme } from './facehash';
|
||||||
|
export {
|
||||||
|
Facehash,
|
||||||
|
DEFAULT_COLORS,
|
||||||
|
DEFAULT_COLORS_LIGHT,
|
||||||
|
DEFAULT_COLORS_DARK,
|
||||||
|
} from './facehash';
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Avatar Compound Components - For image + fallback pattern
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
export {
|
||||||
|
Avatar,
|
||||||
|
type AvatarContextValue,
|
||||||
|
type AvatarProps,
|
||||||
|
useAvatarContext,
|
||||||
|
} from './avatar';
|
||||||
|
export { AvatarFallback, type AvatarFallbackProps } from './avatar-fallback';
|
||||||
|
export { AvatarImage, type AvatarImageProps } from './avatar-image';
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Face Components - For custom compositions
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
export {
|
||||||
|
CrossFace,
|
||||||
|
CurvedFace,
|
||||||
|
FACES,
|
||||||
|
type FaceComponent,
|
||||||
|
type FaceProps,
|
||||||
|
LineFace,
|
||||||
|
RoundFace,
|
||||||
|
} from './faces';
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// Utilities
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
export { stringHash } from './utils/hash';
|
||||||
1
apps/start/src/components/facehash/readme.md
Normal file
1
apps/start/src/components/facehash/readme.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
based on https://www.facehash.dev/ but the npm package broke everything so just added the source here.
|
||||||
16
apps/start/src/components/facehash/utils/hash.ts
Normal file
16
apps/start/src/components/facehash/utils/hash.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Generates a consistent numeric hash from a string.
|
||||||
|
* Used to deterministically select faces and colors for avatars.
|
||||||
|
*
|
||||||
|
* @param str - The input string to hash
|
||||||
|
* @returns A positive 32-bit integer hash
|
||||||
|
*/
|
||||||
|
export function stringHash(str: string): number {
|
||||||
|
let hash = 0;
|
||||||
|
for (let i = 0; i < str.length; i++) {
|
||||||
|
const char = str.charCodeAt(i);
|
||||||
|
hash = (hash << 5) - hash + char;
|
||||||
|
hash &= hash; // Convert to 32bit integer
|
||||||
|
}
|
||||||
|
return Math.abs(hash);
|
||||||
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
|
import { Avatar, AvatarFallback, AvatarImage } from '@/components/facehash';
|
||||||
import { cn } from '@/utils/cn';
|
import { cn } from '@/utils/cn';
|
||||||
import { AvatarImage } from '@radix-ui/react-avatar';
|
import { type GetProfileNameProps, getProfileName } from '@/utils/getters';
|
||||||
import type { VariantProps } from 'class-variance-authority';
|
import type { VariantProps } from 'class-variance-authority';
|
||||||
import { cva } from 'class-variance-authority';
|
import { cva } from 'class-variance-authority';
|
||||||
|
|
||||||
import { type GetProfileNameProps, getProfileName } from '@/utils/getters';
|
|
||||||
import { Avatar, AvatarFallback } from '../ui/avatar';
|
|
||||||
|
|
||||||
interface ProfileAvatarProps
|
interface ProfileAvatarProps
|
||||||
extends VariantProps<typeof variants>,
|
extends VariantProps<typeof variants>,
|
||||||
GetProfileNameProps {
|
GetProfileNameProps {
|
||||||
@@ -33,27 +31,17 @@ export function ProfileAvatar({
|
|||||||
size,
|
size,
|
||||||
...profile
|
...profile
|
||||||
}: ProfileAvatarProps) {
|
}: ProfileAvatarProps) {
|
||||||
const name = getProfileName(profile);
|
const name = getProfileName({ ...profile, isExternal: true });
|
||||||
const isValidAvatar = avatar?.startsWith('http');
|
const isValidAvatar = avatar?.startsWith('http');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Avatar className={cn(variants({ className, size }), className)}>
|
<Avatar className={cn(variants({ className, size }), className)}>
|
||||||
{isValidAvatar && <AvatarImage src={avatar} className="rounded-full" />}
|
{isValidAvatar && <AvatarImage src={avatar} className="rounded-full" />}
|
||||||
<AvatarFallback
|
<AvatarFallback
|
||||||
className={cn(
|
name={name ?? 'Unknown'}
|
||||||
'rounded-full',
|
facehash
|
||||||
size === 'lg'
|
className="rounded-full"
|
||||||
? 'text-lg'
|
/>
|
||||||
: size === 'sm'
|
|
||||||
? 'text-sm'
|
|
||||||
: size === 'xs'
|
|
||||||
? 'text-[8px]'
|
|
||||||
: 'text-base',
|
|
||||||
'bg-def-200 text-muted-foreground',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{name?.at(0)?.toUpperCase() ?? '🧔♂️'}
|
|
||||||
</AvatarFallback>
|
|
||||||
</Avatar>
|
</Avatar>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const createImageIcon = (url: string) => {
|
|||||||
return (
|
return (
|
||||||
<img
|
<img
|
||||||
alt="serie icon"
|
alt="serie icon"
|
||||||
className="max-h-4 rounded-[2px] object-contain"
|
className="w-full max-h-4 rounded-[2px] object-contain"
|
||||||
src={context.apiUrl?.replace(/\/$/, '') + url}
|
src={context.apiUrl?.replace(/\/$/, '') + url}
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
decoding="async"
|
decoding="async"
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
const data = {
|
const data = {
|
||||||
amazon: 'https://upload.wikimedia.org/wikipedia/commons/4/4a/Amazon_icon.svg',
|
amazon: 'https://upload.wikimedia.org/wikipedia/commons/4/4a/Amazon_icon.svg',
|
||||||
'chromium os': 'https://upload.wikimedia.org/wikipedia/commons/2/28/Chromium_Logo.svg',
|
'chromium os': 'https://upload.wikimedia.org/wikipedia/commons/2/28/Chromium_Logo.svg',
|
||||||
'mac os': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/MacOS_logo.svg/1200px-MacOS_logo.svg.png',
|
'mac os': 'https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg',
|
||||||
|
'macos': 'https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg',
|
||||||
apple: 'https://sladesportfolio.wordpress.com/wp-content/uploads/2015/08/apple_logo_black-svg.png',
|
apple: 'https://sladesportfolio.wordpress.com/wp-content/uploads/2015/08/apple_logo_black-svg.png',
|
||||||
huawei: 'https://upload.wikimedia.org/wikipedia/en/0/04/Huawei_Standard_logo.svg',
|
huawei: 'https://upload.wikimedia.org/wikipedia/en/0/04/Huawei_Standard_logo.svg',
|
||||||
xiaomi: 'https://upload.wikimedia.org/wikipedia/commons/2/29/Xiaomi_logo.svg',
|
xiaomi: 'https://upload.wikimedia.org/wikipedia/commons/2/29/Xiaomi_logo.svg',
|
||||||
@@ -46,7 +47,7 @@ const data = {
|
|||||||
google: 'https://google.com',
|
google: 'https://google.com',
|
||||||
gsa: 'https://google.com', // Google Search App
|
gsa: 'https://google.com', // Google Search App
|
||||||
instagram: 'https://instagram.com',
|
instagram: 'https://instagram.com',
|
||||||
ios: 'https://cdn0.iconfinder.com/data/icons/flat-round-system/512/apple-1024.png',
|
ios: 'https://upload.wikimedia.org/wikipedia/commons/c/ca/IOS_logo.svg',
|
||||||
linkedin: 'https://linkedin.com',
|
linkedin: 'https://linkedin.com',
|
||||||
linux: 'https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg',
|
linux: 'https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg',
|
||||||
ubuntu: 'https://upload.wikimedia.org/wikipedia/commons/a/ab/Logo-ubuntu_cof-orange-hex.svg',
|
ubuntu: 'https://upload.wikimedia.org/wikipedia/commons/a/ab/Logo-ubuntu_cof-orange-hex.svg',
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { formatDateTime, formatTimeAgoOrDateTime } from '@/utils/date';
|
|||||||
import type { ColumnDef } from '@tanstack/react-table';
|
import type { ColumnDef } from '@tanstack/react-table';
|
||||||
|
|
||||||
import { ColumnCreatedAt } from '@/components/column-created-at';
|
import { ColumnCreatedAt } from '@/components/column-created-at';
|
||||||
|
import { ProfileAvatar } from '@/components/profiles/profile-avatar';
|
||||||
import { getProfileName } from '@/utils/getters';
|
import { getProfileName } from '@/utils/getters';
|
||||||
import { round } from '@openpanel/common';
|
import { round } from '@openpanel/common';
|
||||||
import type { IServiceSession } from '@openpanel/db';
|
import type { IServiceSession } from '@openpanel/db';
|
||||||
@@ -63,8 +64,9 @@ export function useColumns() {
|
|||||||
return (
|
return (
|
||||||
<ProjectLink
|
<ProjectLink
|
||||||
href={`/profiles/${encodeURIComponent(session.profile.id)}`}
|
href={`/profiles/${encodeURIComponent(session.profile.id)}`}
|
||||||
className="font-medium"
|
className="font-medium row gap-2 items-center"
|
||||||
>
|
>
|
||||||
|
<ProfileAvatar size="sm" {...session.profile} />
|
||||||
{getProfileName(session.profile)}
|
{getProfileName(session.profile)}
|
||||||
</ProjectLink>
|
</ProjectLink>
|
||||||
);
|
);
|
||||||
|
|||||||
342
pnpm-lock.yaml
generated
342
pnpm-lock.yaml
generated
@@ -6,18 +6,12 @@ settings:
|
|||||||
|
|
||||||
catalogs:
|
catalogs:
|
||||||
default:
|
default:
|
||||||
'@types/node':
|
|
||||||
specifier: ^24.7.1
|
|
||||||
version: 24.7.1
|
|
||||||
'@types/react':
|
'@types/react':
|
||||||
specifier: ^19.2.3
|
specifier: ^19.2.3
|
||||||
version: 19.2.7
|
version: 19.2.7
|
||||||
'@types/react-dom':
|
'@types/react-dom':
|
||||||
specifier: ^19.2.3
|
specifier: ^19.2.3
|
||||||
version: 19.2.3
|
version: 19.2.3
|
||||||
groupmq:
|
|
||||||
specifier: 1.1.1-next.2
|
|
||||||
version: 1.1.1-next.2
|
|
||||||
react:
|
react:
|
||||||
specifier: ^19.2.3
|
specifier: ^19.2.3
|
||||||
version: 19.2.3
|
version: 19.2.3
|
||||||
@@ -1916,12 +1910,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
|
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.23.10':
|
|
||||||
resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0
|
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.28.3':
|
'@babel/helper-create-class-features-plugin@7.28.3':
|
||||||
resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
|
resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -2023,10 +2011,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0
|
'@babel/core': ^7.0.0
|
||||||
|
|
||||||
'@babel/helper-simple-access@7.22.5':
|
|
||||||
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
|
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
|
||||||
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
|
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -2443,12 +2427,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0-0
|
'@babel/core': ^7.0.0-0
|
||||||
|
|
||||||
'@babel/plugin-transform-modules-commonjs@7.23.3':
|
|
||||||
resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/plugin-transform-modules-commonjs@7.27.1':
|
'@babel/plugin-transform-modules-commonjs@7.27.1':
|
||||||
resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
|
resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -2551,24 +2529,12 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0-0
|
'@babel/core': ^7.0.0-0
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-self@7.23.3':
|
|
||||||
resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-self@7.27.1':
|
'@babel/plugin-transform-react-jsx-self@7.27.1':
|
||||||
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
|
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0-0
|
'@babel/core': ^7.0.0-0
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-source@7.23.3':
|
|
||||||
resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-source@7.27.1':
|
'@babel/plugin-transform-react-jsx-source@7.27.1':
|
||||||
resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
|
resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -2635,12 +2601,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0-0
|
'@babel/core': ^7.0.0-0
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.23.6':
|
|
||||||
resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.28.0':
|
'@babel/plugin-transform-typescript@7.28.0':
|
||||||
resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
|
resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -3043,18 +3003,12 @@ packages:
|
|||||||
'@emnapi/core@1.3.1':
|
'@emnapi/core@1.3.1':
|
||||||
resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==}
|
resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==}
|
||||||
|
|
||||||
'@emnapi/core@1.5.0':
|
|
||||||
resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
|
|
||||||
|
|
||||||
'@emnapi/core@1.7.1':
|
'@emnapi/core@1.7.1':
|
||||||
resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
|
resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
|
||||||
|
|
||||||
'@emnapi/runtime@1.3.1':
|
'@emnapi/runtime@1.3.1':
|
||||||
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
|
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
|
||||||
|
|
||||||
'@emnapi/runtime@1.5.0':
|
|
||||||
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
|
|
||||||
|
|
||||||
'@emnapi/runtime@1.7.1':
|
'@emnapi/runtime@1.7.1':
|
||||||
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
|
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
|
||||||
|
|
||||||
@@ -4845,9 +4799,6 @@ packages:
|
|||||||
'@napi-rs/wasm-runtime@0.2.5':
|
'@napi-rs/wasm-runtime@0.2.5':
|
||||||
resolution: {integrity: sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==}
|
resolution: {integrity: sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==}
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.0.7':
|
|
||||||
resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
|
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.1.0':
|
'@napi-rs/wasm-runtime@1.1.0':
|
||||||
resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
|
resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
|
||||||
|
|
||||||
@@ -14170,6 +14121,7 @@ packages:
|
|||||||
next@16.0.7:
|
next@16.0.7:
|
||||||
resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==}
|
resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==}
|
||||||
engines: {node: '>=20.9.0'}
|
engines: {node: '>=20.9.0'}
|
||||||
|
deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details.
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@opentelemetry/api': ^1.1.0
|
'@opentelemetry/api': ^1.1.0
|
||||||
@@ -16174,9 +16126,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
shell-quote@1.8.1:
|
|
||||||
resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
|
|
||||||
|
|
||||||
shell-quote@1.8.3:
|
shell-quote@1.8.3:
|
||||||
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
|
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -16662,6 +16611,7 @@ packages:
|
|||||||
tar@7.4.3:
|
tar@7.4.3:
|
||||||
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
|
||||||
|
|
||||||
tdigest@0.1.2:
|
tdigest@0.1.2:
|
||||||
resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==}
|
resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==}
|
||||||
@@ -18032,6 +17982,7 @@ packages:
|
|||||||
whatwg-encoding@3.1.1:
|
whatwg-encoding@3.1.1:
|
||||||
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
|
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
|
||||||
|
|
||||||
whatwg-fetch@3.6.20:
|
whatwg-fetch@3.6.20:
|
||||||
resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
|
resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
|
||||||
@@ -18613,32 +18564,6 @@ snapshots:
|
|||||||
lru-cache: 5.1.1
|
lru-cache: 5.1.1
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
|
||||||
'@babel/helper-environment-visitor': 7.22.20
|
|
||||||
'@babel/helper-function-name': 7.23.0
|
|
||||||
'@babel/helper-member-expression-to-functions': 7.23.0
|
|
||||||
'@babel/helper-optimise-call-expression': 7.22.5
|
|
||||||
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.3)
|
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
|
|
||||||
'@babel/helper-split-export-declaration': 7.22.6
|
|
||||||
semver: 6.3.1
|
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.28.5)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.5
|
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
|
||||||
'@babel/helper-environment-visitor': 7.22.20
|
|
||||||
'@babel/helper-function-name': 7.23.0
|
|
||||||
'@babel/helper-member-expression-to-functions': 7.23.0
|
|
||||||
'@babel/helper-optimise-call-expression': 7.22.5
|
|
||||||
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5)
|
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
|
|
||||||
'@babel/helper-split-export-declaration': 7.22.6
|
|
||||||
semver: 6.3.1
|
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)':
|
'@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -18652,6 +18577,19 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
'@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
|
'@babel/helper-member-expression-to-functions': 7.27.1
|
||||||
|
'@babel/helper-optimise-call-expression': 7.27.1
|
||||||
|
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
|
||||||
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
|
'@babel/traverse': 7.28.5
|
||||||
|
semver: 6.3.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.3)':
|
'@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -18681,7 +18619,7 @@ snapshots:
|
|||||||
'@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.28.3)':
|
'@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
regexpu-core: 5.3.2
|
regexpu-core: 5.3.2
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
|
|
||||||
@@ -18781,17 +18719,10 @@ snapshots:
|
|||||||
'@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.28.3)':
|
'@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
'@babel/helper-environment-visitor': 7.22.20
|
'@babel/helper-environment-visitor': 7.22.20
|
||||||
'@babel/helper-wrap-function': 7.22.20
|
'@babel/helper-wrap-function': 7.22.20
|
||||||
|
|
||||||
'@babel/helper-replace-supers@7.22.20(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-environment-visitor': 7.22.20
|
|
||||||
'@babel/helper-member-expression-to-functions': 7.23.0
|
|
||||||
'@babel/helper-optimise-call-expression': 7.22.5
|
|
||||||
|
|
||||||
'@babel/helper-replace-supers@7.22.20(@babel/core@7.28.5)':
|
'@babel/helper-replace-supers@7.22.20(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.5
|
'@babel/core': 7.28.5
|
||||||
@@ -18817,10 +18748,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-simple-access@7.22.5':
|
|
||||||
dependencies:
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
|
|
||||||
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
|
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
@@ -18916,14 +18843,18 @@ snapshots:
|
|||||||
'@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.3)':
|
'@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.28.3)
|
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.3)
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.5)':
|
'@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.5
|
'@babel/core': 7.28.5
|
||||||
'@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.28.5)
|
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-proposal-decorators@7.23.9(@babel/core@7.28.3)':
|
'@babel/plugin-proposal-decorators@7.23.9(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -18946,6 +18877,12 @@ snapshots:
|
|||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3)
|
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3)
|
||||||
|
|
||||||
|
'@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
|
||||||
|
|
||||||
'@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.28.3)':
|
'@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -18954,7 +18891,7 @@ snapshots:
|
|||||||
|
|
||||||
'@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.28.3)':
|
'@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/compat-data': 7.23.5
|
'@babel/compat-data': 7.28.0
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-compilation-targets': 7.27.2
|
'@babel/helper-compilation-targets': 7.27.2
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
@@ -18980,8 +18917,19 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3)
|
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
|
'@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
|
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)':
|
'@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19077,6 +19025,11 @@ snapshots:
|
|||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
|
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.3)':
|
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -19102,6 +19055,11 @@ snapshots:
|
|||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
|
'@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.3)':
|
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -19149,7 +19107,7 @@ snapshots:
|
|||||||
'@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.28.3)':
|
'@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-module-imports': 7.25.9
|
'@babel/helper-module-imports': 7.27.1
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.3)
|
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -19195,14 +19153,16 @@ snapshots:
|
|||||||
'@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.3)':
|
'@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
'@babel/helper-compilation-targets': 7.27.2
|
'@babel/helper-compilation-targets': 7.27.2
|
||||||
'@babel/helper-environment-visitor': 7.22.20
|
'@babel/helper-environment-visitor': 7.22.20
|
||||||
'@babel/helper-function-name': 7.23.0
|
'@babel/helper-function-name': 7.23.0
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.3)
|
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3)
|
||||||
'@babel/helper-split-export-declaration': 7.22.6
|
'@babel/helper-split-export-declaration': 7.22.6
|
||||||
globals: 11.12.0
|
globals: 11.12.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.5)':
|
'@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19349,15 +19309,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3)
|
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
|
||||||
'@babel/helper-simple-access': 7.22.5
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)':
|
'@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -19468,16 +19419,20 @@ snapshots:
|
|||||||
'@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.28.3)':
|
'@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.28.3)
|
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.3)
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.28.3)':
|
'@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
'@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.28.3)
|
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.3)
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3)
|
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.28.3)':
|
'@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19506,21 +19461,11 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)':
|
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
|
||||||
|
|
||||||
'@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)':
|
'@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -19529,8 +19474,8 @@ snapshots:
|
|||||||
'@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.28.3)':
|
'@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
'@babel/helper-module-imports': 7.25.9
|
'@babel/helper-module-imports': 7.27.1
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3)
|
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3)
|
||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
@@ -19568,7 +19513,7 @@ snapshots:
|
|||||||
'@babel/plugin-transform-runtime@7.23.9(@babel/core@7.28.3)':
|
'@babel/plugin-transform-runtime@7.23.9(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-module-imports': 7.25.9
|
'@babel/helper-module-imports': 7.27.1
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.28.3)
|
babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.28.3)
|
||||||
babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.28.3)
|
babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.28.3)
|
||||||
@@ -19591,7 +19536,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-spread@7.23.3(@babel/core@7.28.5)':
|
'@babel/plugin-transform-spread@7.23.3(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19619,14 +19566,6 @@ snapshots:
|
|||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.23.6(@babel/core@7.28.3)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.28.3
|
|
||||||
'@babel/helper-annotate-as-pure': 7.22.5
|
|
||||||
'@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.28.3)
|
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
|
||||||
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3)
|
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)':
|
'@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
@@ -19638,6 +19577,28 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
'@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
|
'@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5)
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
|
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
|
'@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.3)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.3
|
||||||
|
'@babel/helper-annotate-as-pure': 7.27.3
|
||||||
|
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.3)
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||||
|
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
|
'@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.5
|
'@babel/core': 7.28.5
|
||||||
@@ -19758,12 +19719,12 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/preset-flow@7.23.3(@babel/core@7.28.3)':
|
'@babel/preset-flow@7.23.3(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
'@babel/helper-validator-option': 7.23.5
|
'@babel/helper-validator-option': 7.27.1
|
||||||
'@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.28.5)
|
||||||
|
|
||||||
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)':
|
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19795,9 +19756,20 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/register@7.23.7(@babel/core@7.28.3)':
|
'@babel/preset-typescript@7.27.1(@babel/core@7.28.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
|
'@babel/helper-validator-option': 7.27.1
|
||||||
|
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
|
||||||
|
'@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
|
||||||
|
'@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.5)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
|
'@babel/register@7.23.7(@babel/core@7.28.5)':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.28.5
|
||||||
clone-deep: 4.0.1
|
clone-deep: 4.0.1
|
||||||
find-cache-dir: 2.1.0
|
find-cache-dir: 2.1.0
|
||||||
make-dir: 2.1.0
|
make-dir: 2.1.0
|
||||||
@@ -20160,12 +20132,6 @@ snapshots:
|
|||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@emnapi/core@1.5.0':
|
|
||||||
dependencies:
|
|
||||||
'@emnapi/wasi-threads': 1.1.0
|
|
||||||
tslib: 2.8.1
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@emnapi/core@1.7.1':
|
'@emnapi/core@1.7.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@emnapi/wasi-threads': 1.1.0
|
'@emnapi/wasi-threads': 1.1.0
|
||||||
@@ -20177,11 +20143,6 @@ snapshots:
|
|||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@emnapi/runtime@1.5.0':
|
|
||||||
dependencies:
|
|
||||||
tslib: 2.8.1
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@emnapi/runtime@1.7.1':
|
'@emnapi/runtime@1.7.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
@@ -21476,14 +21437,14 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@jest/fake-timers': 29.7.0
|
'@jest/fake-timers': 29.7.0
|
||||||
'@jest/types': 29.6.3
|
'@jest/types': 29.6.3
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
jest-mock: 29.7.0
|
jest-mock: 29.7.0
|
||||||
|
|
||||||
'@jest/fake-timers@29.7.0':
|
'@jest/fake-timers@29.7.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/types': 29.6.3
|
'@jest/types': 29.6.3
|
||||||
'@sinonjs/fake-timers': 10.3.0
|
'@sinonjs/fake-timers': 10.3.0
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
jest-message-util: 29.7.0
|
jest-message-util: 29.7.0
|
||||||
jest-mock: 29.7.0
|
jest-mock: 29.7.0
|
||||||
jest-util: 29.7.0
|
jest-util: 29.7.0
|
||||||
@@ -21496,7 +21457,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/istanbul-lib-coverage': 2.0.6
|
'@types/istanbul-lib-coverage': 2.0.6
|
||||||
'@types/istanbul-reports': 3.0.4
|
'@types/istanbul-reports': 3.0.4
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
'@types/yargs': 15.0.19
|
'@types/yargs': 15.0.19
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
|
|
||||||
@@ -21505,7 +21466,7 @@ snapshots:
|
|||||||
'@jest/schemas': 29.6.3
|
'@jest/schemas': 29.6.3
|
||||||
'@types/istanbul-lib-coverage': 2.0.6
|
'@types/istanbul-lib-coverage': 2.0.6
|
||||||
'@types/istanbul-reports': 3.0.4
|
'@types/istanbul-reports': 3.0.4
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
'@types/yargs': 17.0.32
|
'@types/yargs': 17.0.32
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
|
|
||||||
@@ -21669,13 +21630,6 @@ snapshots:
|
|||||||
'@tybys/wasm-util': 0.9.0
|
'@tybys/wasm-util': 0.9.0
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.0.7':
|
|
||||||
dependencies:
|
|
||||||
'@emnapi/core': 1.5.0
|
|
||||||
'@emnapi/runtime': 1.5.0
|
|
||||||
'@tybys/wasm-util': 0.10.1
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.1.0':
|
'@napi-rs/wasm-runtime@1.1.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@emnapi/core': 1.7.1
|
'@emnapi/core': 1.7.1
|
||||||
@@ -24614,7 +24568,7 @@ snapshots:
|
|||||||
semver: 7.7.3
|
semver: 7.7.3
|
||||||
strip-ansi: 5.2.0
|
strip-ansi: 5.2.0
|
||||||
wcwidth: 1.0.1
|
wcwidth: 1.0.1
|
||||||
yaml: 2.3.4
|
yaml: 2.8.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- encoding
|
- encoding
|
||||||
|
|
||||||
@@ -24678,7 +24632,7 @@ snapshots:
|
|||||||
open: 6.4.0
|
open: 6.4.0
|
||||||
ora: 5.4.1
|
ora: 5.4.1
|
||||||
semver: 7.7.3
|
semver: 7.7.3
|
||||||
shell-quote: 1.8.1
|
shell-quote: 1.8.3
|
||||||
sudo-prompt: 9.2.1
|
sudo-prompt: 9.2.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- encoding
|
- encoding
|
||||||
@@ -24747,20 +24701,20 @@ snapshots:
|
|||||||
'@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-literals': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-literals': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.28.3)
|
'@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.28.3)
|
'@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.28.3)
|
'@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.28.3)
|
'@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-spread': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-spread': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.28.3)
|
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.3)
|
||||||
'@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.28.3)
|
||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
'@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.23.9(@babel/core@7.28.3))
|
'@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.23.9(@babel/core@7.28.3))
|
||||||
@@ -24953,7 +24907,7 @@ snapshots:
|
|||||||
|
|
||||||
'@rolldown/binding-wasm32-wasi@1.0.0-beta.43':
|
'@rolldown/binding-wasm32-wasi@1.0.0-beta.43':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@napi-rs/wasm-runtime': 1.0.7
|
'@napi-rs/wasm-runtime': 1.1.0
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43':
|
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43':
|
||||||
@@ -26728,7 +26682,6 @@ snapshots:
|
|||||||
'@types/node@24.10.1':
|
'@types/node@24.10.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 7.16.0
|
undici-types: 7.16.0
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@types/node@24.7.1':
|
'@types/node@24.7.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -27671,9 +27624,9 @@ snapshots:
|
|||||||
|
|
||||||
b4a@1.7.3: {}
|
b4a@1.7.3: {}
|
||||||
|
|
||||||
babel-core@7.0.0-bridge.0(@babel/core@7.28.3):
|
babel-core@7.0.0-bridge.0(@babel/core@7.28.5):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
|
|
||||||
babel-dead-code-elimination@1.0.10:
|
babel-dead-code-elimination@1.0.10:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -27686,7 +27639,7 @@ snapshots:
|
|||||||
|
|
||||||
babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.28.3):
|
babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.28.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/compat-data': 7.23.5
|
'@babel/compat-data': 7.28.0
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.3
|
||||||
'@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.28.3)
|
'@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.28.3)
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -28251,7 +28204,7 @@ snapshots:
|
|||||||
|
|
||||||
chrome-launcher@0.15.2:
|
chrome-launcher@0.15.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
is-wsl: 2.2.0
|
is-wsl: 2.2.0
|
||||||
lighthouse-logger: 1.4.2
|
lighthouse-logger: 1.4.2
|
||||||
@@ -28260,7 +28213,7 @@ snapshots:
|
|||||||
|
|
||||||
chromium-edge-launcher@1.0.0:
|
chromium-edge-launcher@1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
is-wsl: 2.2.0
|
is-wsl: 2.2.0
|
||||||
lighthouse-logger: 1.4.2
|
lighthouse-logger: 1.4.2
|
||||||
@@ -31496,7 +31449,7 @@ snapshots:
|
|||||||
'@jest/environment': 29.7.0
|
'@jest/environment': 29.7.0
|
||||||
'@jest/fake-timers': 29.7.0
|
'@jest/fake-timers': 29.7.0
|
||||||
'@jest/types': 29.6.3
|
'@jest/types': 29.6.3
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
jest-mock: 29.7.0
|
jest-mock: 29.7.0
|
||||||
jest-util: 29.7.0
|
jest-util: 29.7.0
|
||||||
|
|
||||||
@@ -31517,13 +31470,13 @@ snapshots:
|
|||||||
jest-mock@29.7.0:
|
jest-mock@29.7.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/types': 29.6.3
|
'@jest/types': 29.6.3
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
jest-util: 29.7.0
|
jest-util: 29.7.0
|
||||||
|
|
||||||
jest-util@29.7.0:
|
jest-util@29.7.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/types': 29.6.3
|
'@jest/types': 29.6.3
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
ci-info: 3.9.0
|
ci-info: 3.9.0
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
@@ -31540,7 +31493,7 @@ snapshots:
|
|||||||
|
|
||||||
jest-worker@29.7.0:
|
jest-worker@29.7.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 24.10.1
|
||||||
jest-util: 29.7.0
|
jest-util: 29.7.0
|
||||||
merge-stream: 2.0.0
|
merge-stream: 2.0.0
|
||||||
supports-color: 8.1.1
|
supports-color: 8.1.1
|
||||||
@@ -31598,17 +31551,17 @@ snapshots:
|
|||||||
|
|
||||||
jscodeshift@0.14.0(@babel/preset-env@7.23.9(@babel/core@7.28.3)):
|
jscodeshift@0.14.0(@babel/preset-env@7.23.9(@babel/core@7.28.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
'@babel/parser': 7.28.5
|
'@babel/parser': 7.28.5
|
||||||
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.28.3)
|
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.28.5)
|
||||||
'@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.28.3)
|
'@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.28.5)
|
||||||
'@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.28.3)
|
'@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.28.5)
|
||||||
'@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.28.3)
|
'@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
|
||||||
'@babel/preset-env': 7.23.9(@babel/core@7.28.3)
|
'@babel/preset-env': 7.23.9(@babel/core@7.28.3)
|
||||||
'@babel/preset-flow': 7.23.3(@babel/core@7.28.3)
|
'@babel/preset-flow': 7.23.3(@babel/core@7.28.5)
|
||||||
'@babel/preset-typescript': 7.27.1(@babel/core@7.28.3)
|
'@babel/preset-typescript': 7.27.1(@babel/core@7.28.5)
|
||||||
'@babel/register': 7.23.7(@babel/core@7.28.3)
|
'@babel/register': 7.23.7(@babel/core@7.28.5)
|
||||||
babel-core: 7.0.0-bridge.0(@babel/core@7.28.3)
|
babel-core: 7.0.0-bridge.0(@babel/core@7.28.5)
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
flow-parser: 0.206.0
|
flow-parser: 0.206.0
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
@@ -32388,7 +32341,7 @@ snapshots:
|
|||||||
|
|
||||||
metro-babel-transformer@0.80.6:
|
metro-babel-transformer@0.80.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
hermes-parser: 0.19.1
|
hermes-parser: 0.19.1
|
||||||
nullthrows: 1.1.1
|
nullthrows: 1.1.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -32474,7 +32427,7 @@ snapshots:
|
|||||||
|
|
||||||
metro-transform-plugins@0.80.6:
|
metro-transform-plugins@0.80.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
'@babel/generator': 7.28.5
|
'@babel/generator': 7.28.5
|
||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
'@babel/traverse': 7.28.5
|
'@babel/traverse': 7.28.5
|
||||||
@@ -32484,7 +32437,7 @@ snapshots:
|
|||||||
|
|
||||||
metro-transform-worker@0.80.6:
|
metro-transform-worker@0.80.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
'@babel/generator': 7.28.5
|
'@babel/generator': 7.28.5
|
||||||
'@babel/parser': 7.28.5
|
'@babel/parser': 7.28.5
|
||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
@@ -32505,7 +32458,7 @@ snapshots:
|
|||||||
metro@0.80.6:
|
metro@0.80.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.27.1
|
'@babel/code-frame': 7.27.1
|
||||||
'@babel/core': 7.28.3
|
'@babel/core': 7.28.5
|
||||||
'@babel/generator': 7.28.5
|
'@babel/generator': 7.28.5
|
||||||
'@babel/parser': 7.28.5
|
'@babel/parser': 7.28.5
|
||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
@@ -34597,7 +34550,7 @@ snapshots:
|
|||||||
|
|
||||||
react-devtools-core@4.28.5:
|
react-devtools-core@4.28.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
shell-quote: 1.8.1
|
shell-quote: 1.8.3
|
||||||
ws: 7.5.9
|
ws: 7.5.9
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
@@ -34836,7 +34789,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
object-assign: 4.1.1
|
object-assign: 4.1.1
|
||||||
react: 19.2.3
|
react: 19.2.3
|
||||||
react-is: 18.2.0
|
react-is: 18.3.1
|
||||||
|
|
||||||
react-simple-maps@3.0.0(prop-types@15.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
react-simple-maps@3.0.0(prop-types@15.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -35829,8 +35782,6 @@ snapshots:
|
|||||||
|
|
||||||
shebang-regex@3.0.0: {}
|
shebang-regex@3.0.0: {}
|
||||||
|
|
||||||
shell-quote@1.8.1: {}
|
|
||||||
|
|
||||||
shell-quote@1.8.3: {}
|
shell-quote@1.8.3: {}
|
||||||
|
|
||||||
shiki@3.17.0:
|
shiki@3.17.0:
|
||||||
@@ -36849,8 +36800,7 @@ snapshots:
|
|||||||
|
|
||||||
undici-types@7.14.0: {}
|
undici-types@7.14.0: {}
|
||||||
|
|
||||||
undici-types@7.16.0:
|
undici-types@7.16.0: {}
|
||||||
optional: true
|
|
||||||
|
|
||||||
undici@7.14.0: {}
|
undici@7.14.0: {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user