This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,6 +5,7 @@ node_modules/
|
||||
dist/
|
||||
build/
|
||||
coverage/
|
||||
storybook-static/
|
||||
|
||||
# Vite / tooling caches
|
||||
.vite/
|
||||
@@ -47,4 +48,4 @@ crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based HTTP Client
|
||||
http-client.private.env.json
|
||||
http-client.private.env.json
|
||||
|
||||
19
.storybook/main.ts
Normal file
19
.storybook/main.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import type { StorybookConfig } from '@storybook/react-vite';
|
||||
|
||||
const config: StorybookConfig = {
|
||||
stories: ['../src/**/*.stories.@(ts|tsx|mdx)'],
|
||||
addons: [
|
||||
'@storybook/addon-docs',
|
||||
'@storybook/addon-a11y',
|
||||
'@storybook/addon-themes'
|
||||
],
|
||||
framework: {
|
||||
name: '@storybook/react-vite',
|
||||
options: {}
|
||||
},
|
||||
docs: {
|
||||
autodocs: 'tag'
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
||||
8
.storybook/preview.css
Normal file
8
.storybook/preview.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
body {
|
||||
background-color: var(--bg-page);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
27
.storybook/preview.tsx
Normal file
27
.storybook/preview.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { Preview } from '@storybook/react';
|
||||
import { MemoryRouter } from 'react-router-dom';
|
||||
import '@mdxeditor/editor/style.css';
|
||||
import './preview.css';
|
||||
import '../src/styles/base.css';
|
||||
import '../src/styles/components.css';
|
||||
|
||||
const preview: Preview = {
|
||||
decorators: [
|
||||
(Story) => (
|
||||
<MemoryRouter>
|
||||
<Story />
|
||||
</MemoryRouter>
|
||||
)
|
||||
],
|
||||
parameters: {
|
||||
controls: {
|
||||
matchers: {
|
||||
color: /(background|color)$/i,
|
||||
date: /Date$/i
|
||||
}
|
||||
},
|
||||
layout: 'centered'
|
||||
}
|
||||
};
|
||||
|
||||
export default preview;
|
||||
12
package.json
12
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@panic/web-ui",
|
||||
"version": "0.1.5",
|
||||
"version": "0.1.6",
|
||||
"license": "AGPL-3.0-only",
|
||||
"description": "Core components for panic.haus web applications",
|
||||
"type": "module",
|
||||
@@ -27,6 +27,8 @@
|
||||
"scripts": {
|
||||
"clean": "rm -rf dist",
|
||||
"build": "yarn clean && vite build && tsc -p tsconfig.build.json && mkdir -p dist/styles && cp src/styles/base.css dist/styles/base.css && tailwindcss -c tailwind.build.config.cjs -i src/styles/components.css -o dist/styles/components.css --minify && tailwindcss -c tailwind.build.config.cjs -i src/styles/utilities.css -o dist/styles/utilities.css --minify && cp tailwind-preset.cjs dist/tailwind-preset.cjs",
|
||||
"storybook": "storybook dev -p 6006",
|
||||
"build-storybook": "storybook build",
|
||||
"prepublishOnly": "yarn build",
|
||||
"publish:nexus": "npm publish --registry ${NEXUS_NPM_REGISTRY:-https://nexus.beatrice.wtf/repository/npm-hosted/}"
|
||||
},
|
||||
@@ -47,16 +49,24 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/addon-a11y": "^10.2.10",
|
||||
"@storybook/addon-docs": "^10.2.10",
|
||||
"@storybook/addon-themes": "^10.2.10",
|
||||
"@storybook/react": "^10.2.10",
|
||||
"@storybook/react-vite": "^10.2.10",
|
||||
"@codemirror/language": "^6.11.3",
|
||||
"@heroicons/react": "^2.2.0",
|
||||
"@lezer/highlight": "^1.2.1",
|
||||
"@mdxeditor/editor": "^3.52.4",
|
||||
"@testing-library/dom": "^10.4.1",
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-dom": "^19.0.0",
|
||||
"@vitejs/plugin-react": "^5.0.0",
|
||||
"postcss": "^8.4.49",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-router-dom": "^7.0.0",
|
||||
"storybook": "^10.2.10",
|
||||
"tailwindcss": "^3.4.16",
|
||||
"typescript": "^5.6.2",
|
||||
"vite": "^7.0.0",
|
||||
|
||||
7
postcss.config.cjs
Normal file
7
postcss.config.cjs
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {
|
||||
config: './tailwind.storybook.config.cjs'
|
||||
}
|
||||
}
|
||||
};
|
||||
136
src/components/Button.stories.tsx
Normal file
136
src/components/Button.stories.tsx
Normal file
@@ -0,0 +1,136 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { PlusIcon } from '@heroicons/react/24/solid';
|
||||
import { Button } from './Button';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Button',
|
||||
component: Button,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Polymorphic button component: renders a native `<button>` or a React Router `<Link>` when `to` is provided.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
label: {
|
||||
description: 'Visible button label text.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
type: {
|
||||
description: 'Base visual style.',
|
||||
options: ['solid', 'outlined', 'noborder'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'solid' | 'outlined' | 'noborder'" } }
|
||||
},
|
||||
variant: {
|
||||
description: 'Color variant. If omitted: `primary` for `solid`, `secondary` for the other types.',
|
||||
options: ['primary', 'secondary', 'important'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'primary' | 'secondary' | 'important'" } }
|
||||
},
|
||||
size: {
|
||||
description: 'Button size.',
|
||||
options: ['sm', 'md', 'lg', 'full'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'sm' | 'md' | 'lg' | 'full'" } }
|
||||
},
|
||||
to: {
|
||||
description: 'Navigation path. When set, the component renders a `<Link>`.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
htmlType: {
|
||||
description: 'HTML button type used when rendering a native `<button>`.',
|
||||
options: ['button', 'submit', 'reset'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'button' | 'submit' | 'reset'" } }
|
||||
},
|
||||
disabled: {
|
||||
description: 'Disables interaction and hover/click states.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
icon: {
|
||||
description: 'Optional icon component (for example Heroicons).',
|
||||
control: false,
|
||||
table: { type: { summary: 'ElementType' } }
|
||||
},
|
||||
ariaLabel: {
|
||||
description: 'Accessible label. Falls back to `label` when not provided.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the root element.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
onClick: {
|
||||
description: 'Click handler callback.',
|
||||
action: 'clicked',
|
||||
table: { type: { summary: 'MouseEventHandler<HTMLElement>' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
type: 'solid',
|
||||
variant: 'primary',
|
||||
size: 'md',
|
||||
label: 'Save'
|
||||
}
|
||||
} satisfies Meta<typeof Button>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const SolidPrimary: Story = {};
|
||||
|
||||
export const SolidImportant: Story = {
|
||||
args: {
|
||||
type: 'solid',
|
||||
variant: 'important',
|
||||
label: 'Delete'
|
||||
}
|
||||
};
|
||||
|
||||
export const OutlinedSecondary: Story = {
|
||||
args: {
|
||||
type: 'outlined',
|
||||
variant: 'secondary',
|
||||
label: 'Cancel'
|
||||
}
|
||||
};
|
||||
|
||||
export const IconOnly: Story = {
|
||||
args: {
|
||||
icon: PlusIcon,
|
||||
label: undefined,
|
||||
ariaLabel: 'Add item'
|
||||
}
|
||||
};
|
||||
|
||||
export const LinkButton: Story = {
|
||||
args: {
|
||||
to: '/demo',
|
||||
label: 'Go to demo'
|
||||
}
|
||||
};
|
||||
|
||||
export const Disabled: Story = {
|
||||
args: {
|
||||
disabled: true
|
||||
}
|
||||
};
|
||||
|
||||
export const SizeMatrix: Story = {
|
||||
render: (args) => (
|
||||
<div className="grid grid-cols-1 gap-3">
|
||||
<Button {...args} size="sm" label="Small" />
|
||||
<Button {...args} size="md" label="Medium" />
|
||||
<Button {...args} size="lg" label="Large" />
|
||||
<Button {...args} size="full" label="Full width" />
|
||||
</div>
|
||||
)
|
||||
};
|
||||
83
src/components/Chip.stories.tsx
Normal file
83
src/components/Chip.stories.tsx
Normal file
@@ -0,0 +1,83 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Chip } from './Chip';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Chip',
|
||||
component: Chip,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Compact badge/chip component with solid or outlined style. `tone` accepts a Tailwind color token (for example `cyan-700`) and resolves it to the correct border/background/text color at runtime.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
variant: {
|
||||
description: 'Chip visual style.',
|
||||
options: ['solid', 'outlined'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'solid' | 'outlined'" } }
|
||||
},
|
||||
tone: {
|
||||
description: 'Tailwind color token (format: `<color>-<shade>`, for example `cyan-700`, `indigo-600`, `rose-500`).',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
as: {
|
||||
description: "Root tag or component to render (for example `'span'`, `'a'`, `'button'`).",
|
||||
control: false,
|
||||
table: { type: { summary: 'ElementType' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the root element.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
children: {
|
||||
description: 'Text or React node rendered inside the chip.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'ReactNode' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
children: 'Published',
|
||||
variant: 'solid'
|
||||
}
|
||||
} satisfies Meta<typeof Chip>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const SolidDefault: Story = {};
|
||||
|
||||
export const OutlinedIndigo: Story = {
|
||||
args: {
|
||||
variant: 'outlined',
|
||||
tone: 'indigo-700',
|
||||
children: 'Draft'
|
||||
}
|
||||
};
|
||||
|
||||
export const OutlinedCyan: Story = {
|
||||
args: {
|
||||
variant: 'outlined',
|
||||
tone: 'cyan-700',
|
||||
children: 'Archived'
|
||||
}
|
||||
};
|
||||
|
||||
export const ToneMatrix: Story = {
|
||||
render: () => (
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<Chip variant="solid">Default</Chip>
|
||||
<Chip variant="solid" tone="indigo-700">Indigo</Chip>
|
||||
<Chip variant="solid" tone="cyan-700">Cyan</Chip>
|
||||
<Chip variant="solid" tone="rose-600">Rose</Chip>
|
||||
<Chip variant="outlined">Default</Chip>
|
||||
<Chip variant="outlined" tone="indigo-700">Indigo</Chip>
|
||||
<Chip variant="outlined" tone="cyan-700">Cyan</Chip>
|
||||
<Chip variant="outlined" tone="rose-600">Rose</Chip>
|
||||
</div>
|
||||
)
|
||||
};
|
||||
@@ -1,11 +1,12 @@
|
||||
import type { ElementType, ReactNode } from 'react';
|
||||
import * as tailwindColors from 'tailwindcss/colors';
|
||||
import type { CSSProperties, ElementType, ReactNode } from 'react';
|
||||
|
||||
type ChipVariant = 'solid' | 'outlined';
|
||||
type ChipTone = 'neutral' | 'indigo' | 'cyan';
|
||||
|
||||
type ChipProps<T extends ElementType> = {
|
||||
variant?: ChipVariant;
|
||||
tone?: ChipTone;
|
||||
// Tailwind color token, e.g. "cyan-700", "indigo-500", "rose-600".
|
||||
tone?: string;
|
||||
as?: T;
|
||||
className?: string;
|
||||
children: ReactNode;
|
||||
@@ -16,21 +17,49 @@ const variantClassMap: Record<ChipVariant, string> = {
|
||||
outlined: 'chip-outlined'
|
||||
};
|
||||
|
||||
const toneClassMap: Record<ChipTone, string> = {
|
||||
neutral: 'chip-neutral',
|
||||
indigo: 'chip-indigo',
|
||||
cyan: 'chip-cyan'
|
||||
};
|
||||
type TailwindPalette = Record<string, string>;
|
||||
|
||||
function resolveTailwindToneColor(tone: string | undefined): string | null {
|
||||
const normalizedTone = tone?.trim().toLowerCase();
|
||||
if (normalizedTone == null || normalizedTone === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const colorSource = tailwindColors as Record<string, unknown>;
|
||||
const lastDashIndex = normalizedTone.lastIndexOf('-');
|
||||
|
||||
if (lastDashIndex === -1) {
|
||||
const direct = colorSource[normalizedTone];
|
||||
return typeof direct === 'string' ? direct : null;
|
||||
}
|
||||
|
||||
const colorName = normalizedTone.slice(0, lastDashIndex);
|
||||
const shade = normalizedTone.slice(lastDashIndex + 1);
|
||||
const palette = colorSource[colorName];
|
||||
|
||||
if (palette == null || typeof palette !== 'object') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const shadeColor = (palette as TailwindPalette)[shade];
|
||||
return typeof shadeColor === 'string' ? shadeColor : null;
|
||||
}
|
||||
|
||||
export function Chip<T extends ElementType = 'span'>({
|
||||
variant = 'solid',
|
||||
tone = 'neutral',
|
||||
tone,
|
||||
as,
|
||||
className = '',
|
||||
children
|
||||
}: Readonly<ChipProps<T>>) {
|
||||
const Component = as ?? 'span' as ElementType;
|
||||
const classes = `chip-root ${variantClassMap[variant]} ${toneClassMap[tone]} ${className}`.trim();
|
||||
const toneColor = resolveTailwindToneColor(tone);
|
||||
const toneStyle: CSSProperties | undefined = toneColor == null
|
||||
? undefined
|
||||
: variant === 'solid'
|
||||
? { borderColor: toneColor, backgroundColor: toneColor, color: '#ffffff' }
|
||||
: { borderColor: toneColor, color: toneColor };
|
||||
const classes = `chip-root ${variantClassMap[variant]} ${className}`.trim();
|
||||
|
||||
return <Component className={classes}>{children}</Component>;
|
||||
return <Component className={classes} style={toneStyle}>{children}</Component>;
|
||||
}
|
||||
|
||||
153
src/components/Dropdown.stories.tsx
Normal file
153
src/components/Dropdown.stories.tsx
Normal file
@@ -0,0 +1,153 @@
|
||||
import { useState } from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Dropdown } from './Dropdown';
|
||||
|
||||
const choices = [
|
||||
{ id: 'draft', label: 'Draft' },
|
||||
{ id: 'review', label: 'In review' },
|
||||
{ id: 'published', label: 'Published' }
|
||||
];
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Dropdown',
|
||||
component: Dropdown,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Styled select component with label, error state, stacked/inline layout, and multiple sizes.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
label: {
|
||||
description: 'Label text shown above (stacked) or on the left (inline).',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
value: {
|
||||
description: 'Current selected value (must match one `choices[].id`).',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
choices: {
|
||||
description: "Options list in `{ id: string; label: string }` format.",
|
||||
control: 'object',
|
||||
table: { type: { summary: 'Array<{ id: string; label: string }>' } }
|
||||
},
|
||||
size: {
|
||||
description: 'Control size.',
|
||||
options: ['sm', 'md', 'lg', 'full'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'sm' | 'md' | 'lg' | 'full'" } }
|
||||
},
|
||||
layout: {
|
||||
description: 'Label/control layout mode.',
|
||||
options: ['stacked', 'inline'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'stacked' | 'inline'" } }
|
||||
},
|
||||
disabled: {
|
||||
description: 'Disables the field.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
required: {
|
||||
description: 'Sets the native HTML `required` attribute.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
error: {
|
||||
description: 'Error message shown below the field.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the wrapper.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
selectClassName: {
|
||||
description: 'Extra CSS classes for the `<select>` element.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
onChange: {
|
||||
description: 'Callback fired with the newly selected value.',
|
||||
action: 'changed',
|
||||
table: { type: { summary: '(value: string) => void' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
label: 'Status',
|
||||
value: 'draft',
|
||||
choices,
|
||||
size: 'md',
|
||||
layout: 'stacked'
|
||||
}
|
||||
} satisfies Meta<typeof Dropdown>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Stacked: Story = {
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState(args.value);
|
||||
return (
|
||||
<Dropdown
|
||||
{...args}
|
||||
value={value}
|
||||
onChange={(next) => {
|
||||
setValue(next);
|
||||
args.onChange?.(next);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const Inline: Story = {
|
||||
args: {
|
||||
layout: 'inline',
|
||||
size: 'sm'
|
||||
},
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState(args.value);
|
||||
return (
|
||||
<Dropdown
|
||||
{...args}
|
||||
value={value}
|
||||
onChange={(next) => {
|
||||
setValue(next);
|
||||
args.onChange?.(next);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const Disabled: Story = {
|
||||
args: {
|
||||
disabled: true
|
||||
}
|
||||
};
|
||||
|
||||
export const WithError: Story = {
|
||||
args: {
|
||||
error: 'Please choose a valid status'
|
||||
}
|
||||
};
|
||||
|
||||
export const SizeMatrix: Story = {
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState(args.value);
|
||||
return (
|
||||
<div className="grid grid-cols-1 gap-3">
|
||||
<Dropdown {...args} value={value} size="sm" label="Small" onChange={setValue} />
|
||||
<Dropdown {...args} value={value} size="md" label="Medium" onChange={setValue} />
|
||||
<Dropdown {...args} value={value} size="lg" label="Large" onChange={setValue} />
|
||||
<Dropdown {...args} value={value} size="full" label="Full" onChange={setValue} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -44,7 +44,7 @@ export function Dropdown({
|
||||
}[size];
|
||||
|
||||
const selectSizeClass = {
|
||||
sm: 'h-8 text-xs',
|
||||
sm: 'h-8 !text-xs',
|
||||
md: 'h-10 text-sm',
|
||||
lg: 'h-12 text-sm',
|
||||
full: 'h-10 text-sm'
|
||||
@@ -58,7 +58,7 @@ export function Dropdown({
|
||||
? 'inline-flex w-auto items-center gap-2'
|
||||
: 'block w-full gap-1';
|
||||
|
||||
const selectWrapperClass = 'relative';
|
||||
const selectWrapperClass = layout === 'inline' ? 'relative' : 'relative mt-1';
|
||||
const labelClass = layout === 'inline' ? 'text-xs ui-body-secondary' : '';
|
||||
|
||||
return (
|
||||
|
||||
101
src/components/Form.stories.tsx
Normal file
101
src/components/Form.stories.tsx
Normal file
@@ -0,0 +1,101 @@
|
||||
import { useState } from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Button } from './Button';
|
||||
import { Dropdown } from './Dropdown';
|
||||
import { Form } from './Form';
|
||||
import { InputField } from './InputField';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Form',
|
||||
component: Form,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Surface container with a title bar and a responsive content grid, intended for CMS forms.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
title: {
|
||||
description: 'Form title displayed in the header bar.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
titleBarRight: {
|
||||
description: 'Optional node rendered on the right side of the title bar.',
|
||||
control: false,
|
||||
table: { type: { summary: 'ReactNode' } }
|
||||
},
|
||||
children: {
|
||||
description: 'Form content rendered inside the responsive grid.',
|
||||
control: false,
|
||||
table: { type: { summary: 'ReactNode' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the root container.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
title: 'Post details'
|
||||
}
|
||||
} satisfies Meta<typeof Form>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Basic: Story = {
|
||||
args: {
|
||||
children: (
|
||||
<>
|
||||
<InputField label="Title" type="text" value="A short post title" />
|
||||
<Dropdown
|
||||
label="Status"
|
||||
value="draft"
|
||||
choices={[
|
||||
{ id: 'draft', label: 'Draft' },
|
||||
{ id: 'published', label: 'Published' }
|
||||
]}
|
||||
/>
|
||||
<InputField label="Slug" type="text" value="a-short-post-title" />
|
||||
</>
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
export const WithActions: Story = {
|
||||
render: (args) => {
|
||||
const [title, setTitle] = useState('Storybook powered CMS');
|
||||
const [status, setStatus] = useState('draft');
|
||||
|
||||
return (
|
||||
<Form
|
||||
{...args}
|
||||
titleBarRight={<Button type="solid" size="sm" label="Save" />}
|
||||
>
|
||||
<div className="col-span-2">
|
||||
<InputField
|
||||
label="Title"
|
||||
type="text"
|
||||
value={title}
|
||||
onChange={(event) => setTitle(event.target.value)}
|
||||
size="full"
|
||||
/>
|
||||
</div>
|
||||
<Dropdown
|
||||
label="Status"
|
||||
value={status}
|
||||
onChange={setStatus}
|
||||
choices={[
|
||||
{ id: 'draft', label: 'Draft' },
|
||||
{ id: 'review', label: 'In review' },
|
||||
{ id: 'published', label: 'Published' }
|
||||
]}
|
||||
/>
|
||||
<InputField label="Slug" type="text" value="storybook-powered-cms" />
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
};
|
||||
215
src/components/InputField.stories.tsx
Normal file
215
src/components/InputField.stories.tsx
Normal file
@@ -0,0 +1,215 @@
|
||||
import { useState } from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { MagnifyingGlassIcon } from '@heroicons/react/24/solid';
|
||||
import { InputField } from './InputField';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/InputField',
|
||||
component: InputField,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Text input field with optional label, validation state, size/layout variants, and password visibility toggle.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
label: {
|
||||
description: 'Label text shown above (stacked) or on the left (inline).',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
placeholder: {
|
||||
description: 'Input placeholder text.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
type: {
|
||||
description: 'Native input type.',
|
||||
options: ['text', 'password', 'email'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'text' | 'password' | 'email'" } }
|
||||
},
|
||||
size: {
|
||||
description: 'Input size.',
|
||||
options: ['sm', 'md', 'lg', 'full'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'sm' | 'md' | 'lg' | 'full'" } }
|
||||
},
|
||||
layout: {
|
||||
description: 'Label/input layout mode.',
|
||||
options: ['stacked', 'inline'],
|
||||
control: 'inline-radio',
|
||||
table: { type: { summary: "'stacked' | 'inline'" } }
|
||||
},
|
||||
value: {
|
||||
description: 'Controlled input value.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
name: {
|
||||
description: 'Native input `name` attribute.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
disabled: {
|
||||
description: 'Disables the input.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
required: {
|
||||
description: 'Sets the native HTML `required` attribute.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
error: {
|
||||
description: 'Validation message shown below the field.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
rightIcon: {
|
||||
description: 'Optional trailing icon node (ignored for password type because toggle icon is used).',
|
||||
control: false,
|
||||
table: { type: { summary: 'ReactNode' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the outer wrapper.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
inputClassName: {
|
||||
description: 'Extra CSS classes for the `<input>` element.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
onChange: {
|
||||
description: 'Change handler callback.',
|
||||
action: 'changed',
|
||||
table: { type: { summary: 'ChangeEventHandler<HTMLInputElement>' } }
|
||||
},
|
||||
onBlur: {
|
||||
description: 'Blur handler callback.',
|
||||
control: false,
|
||||
table: { type: { summary: 'FocusEventHandler<HTMLInputElement>' } }
|
||||
},
|
||||
inputRef: {
|
||||
description: 'Ref forwarded to the native `<input>` element.',
|
||||
control: false,
|
||||
table: { type: { summary: 'Ref<HTMLInputElement>' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
label: 'Email',
|
||||
type: 'email',
|
||||
placeholder: 'name@example.com',
|
||||
value: '',
|
||||
size: 'md',
|
||||
layout: 'stacked'
|
||||
}
|
||||
} satisfies Meta<typeof InputField>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Text: Story = {
|
||||
args: {
|
||||
type: 'text',
|
||||
label: 'Title',
|
||||
placeholder: 'Write a title'
|
||||
},
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState('Storybook integration');
|
||||
return (
|
||||
<InputField
|
||||
{...args}
|
||||
value={value}
|
||||
onChange={(event) => {
|
||||
setValue(event.target.value);
|
||||
args.onChange?.(event);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const PasswordWithToggle: Story = {
|
||||
args: {
|
||||
type: 'password',
|
||||
label: 'Password',
|
||||
placeholder: 'Type a strong password'
|
||||
},
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState('pa55word');
|
||||
return (
|
||||
<InputField
|
||||
{...args}
|
||||
value={value}
|
||||
onChange={(event) => {
|
||||
setValue(event.target.value);
|
||||
args.onChange?.(event);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const InlineWithIcon: Story = {
|
||||
args: {
|
||||
type: 'text',
|
||||
label: 'Search',
|
||||
layout: 'inline',
|
||||
size: 'sm',
|
||||
rightIcon: <MagnifyingGlassIcon className="h-4 w-4 ui-body-secondary" />
|
||||
},
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState('posts');
|
||||
return (
|
||||
<InputField
|
||||
{...args}
|
||||
value={value}
|
||||
onChange={(event) => {
|
||||
setValue(event.target.value);
|
||||
args.onChange?.(event);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const Error: Story = {
|
||||
args: {
|
||||
type: 'email',
|
||||
label: 'Email',
|
||||
value: 'invalid.mail',
|
||||
error: 'Enter a valid email address'
|
||||
}
|
||||
};
|
||||
|
||||
export const Disabled: Story = {
|
||||
args: {
|
||||
type: 'text',
|
||||
label: 'Read only field',
|
||||
value: 'Locked content',
|
||||
disabled: true
|
||||
}
|
||||
};
|
||||
|
||||
export const SizeMatrix: Story = {
|
||||
args: {
|
||||
type: 'text',
|
||||
label: 'Name',
|
||||
placeholder: 'Enter value'
|
||||
},
|
||||
render: (args) => {
|
||||
const [value, setValue] = useState('Beatrice');
|
||||
return (
|
||||
<div className="grid grid-cols-1 gap-3">
|
||||
<InputField {...args} value={value} size="sm" onChange={(event) => setValue(event.target.value)} />
|
||||
<InputField {...args} value={value} size="md" onChange={(event) => setValue(event.target.value)} />
|
||||
<InputField {...args} value={value} size="lg" onChange={(event) => setValue(event.target.value)} />
|
||||
<InputField {...args} value={value} size="full" onChange={(event) => setValue(event.target.value)} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -53,7 +53,7 @@ export function InputField({
|
||||
}[size];
|
||||
|
||||
const inputSizeClass = {
|
||||
sm: 'h-8 text-xs',
|
||||
sm: 'h-8 !text-xs',
|
||||
md: 'h-10 text-sm',
|
||||
lg: 'h-12 text-sm',
|
||||
full: 'h-10 text-sm'
|
||||
|
||||
77
src/components/Label.stories.tsx
Normal file
77
src/components/Label.stories.tsx
Normal file
@@ -0,0 +1,77 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Label } from './Label';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Label',
|
||||
component: Label,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Typography helper component for headings, body text, caption, error text, and inline code styles.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
variant: {
|
||||
description: 'Typography style preset.',
|
||||
options: ['h1', 'h2', 'h3', 'h4', 'body', 'body2', 'caption', 'error', 'code'],
|
||||
control: 'select',
|
||||
table: { type: { summary: "'h1' | 'h2' | 'h3' | 'h4' | 'body' | 'body2' | 'caption' | 'error' | 'code'" } }
|
||||
},
|
||||
as: {
|
||||
description: "Override rendered HTML tag or component (for example `'p'`, `'span'`, `'h2'`).",
|
||||
control: false,
|
||||
table: { type: { summary: 'ElementType' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
children: {
|
||||
description: 'Label content.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'ReactNode' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
variant: 'body',
|
||||
children: 'Label text'
|
||||
}
|
||||
} satisfies Meta<typeof Label>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Body: Story = {};
|
||||
|
||||
export const Error: Story = {
|
||||
args: {
|
||||
variant: 'error',
|
||||
children: 'This field is required'
|
||||
}
|
||||
};
|
||||
|
||||
export const Code: Story = {
|
||||
args: {
|
||||
variant: 'code',
|
||||
children: 'const isPublished = true;'
|
||||
}
|
||||
};
|
||||
|
||||
export const VariantScale: Story = {
|
||||
render: () => (
|
||||
<div className="flex max-w-md flex-col gap-2">
|
||||
<Label variant="caption">Caption</Label>
|
||||
<Label variant="h1">Heading 1</Label>
|
||||
<Label variant="h2">Heading 2</Label>
|
||||
<Label variant="h3">Heading 3</Label>
|
||||
<Label variant="h4">Heading 4</Label>
|
||||
<Label variant="body">Primary body copy</Label>
|
||||
<Label variant="body2">Secondary body copy</Label>
|
||||
<Label variant="error">Error copy</Label>
|
||||
<Label variant="code">npm run build</Label>
|
||||
</div>
|
||||
)
|
||||
};
|
||||
161
src/components/MDXEditorField.stories.tsx
Normal file
161
src/components/MDXEditorField.stories.tsx
Normal file
@@ -0,0 +1,161 @@
|
||||
import { useState } from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { headingsPlugin, listsPlugin, markdownShortcutPlugin, quotePlugin } from '@mdxeditor/editor';
|
||||
import { MDXEditorField } from './MDXEditorField';
|
||||
|
||||
const basePlugins = [
|
||||
headingsPlugin(),
|
||||
listsPlugin(),
|
||||
quotePlugin(),
|
||||
markdownShortcutPlugin()
|
||||
];
|
||||
|
||||
const sampleMarkdown = `# Hello from MDXEditor
|
||||
|
||||
This is a paragraph with **bold** and _italic_ text.
|
||||
|
||||
- First bullet
|
||||
- Second bullet
|
||||
`;
|
||||
|
||||
const meta = {
|
||||
title: 'Components/MDXEditorField',
|
||||
component: MDXEditorField,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'MDX editor wrapper with label, editable/read-only/disabled modes, theme class support, and error rendering.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
label: {
|
||||
description: 'Field label shown above the editor.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
markdown: {
|
||||
description: 'Controlled markdown content value.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
readOnly: {
|
||||
description: 'Enables read-only mode.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
disabled: {
|
||||
description: 'Disables editing and applies disabled visuals.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
themeClassName: {
|
||||
description: 'Theme class applied to MDXEditor (for example `light-theme` or `dark-theme`).',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
plugins: {
|
||||
description: 'MDXEditor plugins array.',
|
||||
control: false,
|
||||
table: { type: { summary: 'MDXEditorProps["plugins"]' } }
|
||||
},
|
||||
contentEditableClassName: {
|
||||
description: 'CSS class used on the content editable area.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
className: {
|
||||
description: 'Extra CSS classes for the outer wrapper.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
editorWrapperClassName: {
|
||||
description: 'Extra CSS classes for the editor shell element.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
editorWrapperStyle: {
|
||||
description: 'Inline style object for the editor shell.',
|
||||
control: 'object',
|
||||
table: { type: { summary: 'CSSProperties' } }
|
||||
},
|
||||
editorClassName: {
|
||||
description: 'Extra CSS classes for the MDXEditor instance.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
error: {
|
||||
description: 'Error message shown below the editor.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
onChange: {
|
||||
description: 'Callback fired when markdown changes in editable mode.',
|
||||
action: 'changed',
|
||||
table: { type: { summary: '(markdown: string) => void' } }
|
||||
},
|
||||
editorRef: {
|
||||
description: 'Ref to MDXEditor methods.',
|
||||
control: false,
|
||||
table: { type: { summary: 'Ref<MDXEditorMethods | null>' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
label: 'Content',
|
||||
markdown: sampleMarkdown,
|
||||
plugins: basePlugins,
|
||||
themeClassName: ''
|
||||
}
|
||||
} satisfies Meta<typeof MDXEditorField>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Editable: Story = {
|
||||
render: (args) => {
|
||||
const [markdown, setMarkdown] = useState(args.markdown);
|
||||
return (
|
||||
<div className="w-full max-w-2xl">
|
||||
<MDXEditorField
|
||||
{...args}
|
||||
markdown={markdown}
|
||||
onChange={(next) => {
|
||||
setMarkdown(next);
|
||||
args.onChange?.(next);
|
||||
}}
|
||||
editorWrapperClassName="mt-2 overflow-hidden rounded-xl border"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const ReadOnly: Story = {
|
||||
args: {
|
||||
readOnly: true
|
||||
},
|
||||
render: (args) => (
|
||||
<div className="w-full max-w-2xl">
|
||||
<MDXEditorField
|
||||
{...args}
|
||||
editorWrapperClassName="mt-2 overflow-hidden rounded-xl border"
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
};
|
||||
|
||||
export const DisabledWithError: Story = {
|
||||
args: {
|
||||
disabled: true,
|
||||
error: 'Editor is currently disabled'
|
||||
},
|
||||
render: (args) => (
|
||||
<div className="w-full max-w-2xl">
|
||||
<MDXEditorField
|
||||
{...args}
|
||||
editorWrapperClassName="mt-2 overflow-hidden rounded-xl border"
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
};
|
||||
76
src/components/SidebarNavItem.stories.tsx
Normal file
76
src/components/SidebarNavItem.stories.tsx
Normal file
@@ -0,0 +1,76 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { HomeIcon, UserCircleIcon, UsersIcon } from '@heroicons/react/24/outline';
|
||||
import { SidebarNavItem } from './SidebarNavItem';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/SidebarNavItem',
|
||||
component: SidebarNavItem,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
layout: 'padded',
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Sidebar navigation link with active state styling and collapsed/expanded rendering mode.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
to: {
|
||||
description: 'Destination route path.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
label: {
|
||||
description: 'Navigation item label.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
icon: {
|
||||
description: 'Icon component rendered before the label.',
|
||||
control: false,
|
||||
table: { type: { summary: 'ComponentType<SVGProps<SVGSVGElement>>' } }
|
||||
},
|
||||
collapsed: {
|
||||
description: 'Collapsed state. When true, desktop view shows icon-only rail style.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
onClick: {
|
||||
description: 'Optional click callback (for example to close mobile drawer).',
|
||||
action: 'clicked',
|
||||
table: { type: { summary: '() => void' } }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
to: '/',
|
||||
label: 'Dashboard',
|
||||
icon: HomeIcon,
|
||||
collapsed: false
|
||||
}
|
||||
} satisfies Meta<typeof SidebarNavItem>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Expanded: Story = {
|
||||
render: (args) => (
|
||||
<nav className="flex w-56 flex-col gap-1">
|
||||
<SidebarNavItem {...args} />
|
||||
<SidebarNavItem to="/users" label="Users" icon={UsersIcon} collapsed={args.collapsed} />
|
||||
<SidebarNavItem to="/profile" label="Profile" icon={UserCircleIcon} collapsed={args.collapsed} />
|
||||
</nav>
|
||||
)
|
||||
};
|
||||
|
||||
export const Collapsed: Story = {
|
||||
args: {
|
||||
collapsed: true
|
||||
},
|
||||
render: (args) => (
|
||||
<nav className="flex w-14 flex-col gap-1">
|
||||
<SidebarNavItem {...args} />
|
||||
<SidebarNavItem to="/users" label="Users" icon={UsersIcon} collapsed />
|
||||
<SidebarNavItem to="/profile" label="Profile" icon={UserCircleIcon} collapsed />
|
||||
</nav>
|
||||
)
|
||||
};
|
||||
228
src/components/Table.stories.tsx
Normal file
228
src/components/Table.stories.tsx
Normal file
@@ -0,0 +1,228 @@
|
||||
import { useMemo, useState } from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import type { SortState } from '../types/sort';
|
||||
import { Chip } from './Chip';
|
||||
import { Table, type TableHeader } from './Table';
|
||||
|
||||
type UserRow = {
|
||||
id: string;
|
||||
name: string;
|
||||
role: 'ADMIN' | 'EDITOR' | 'AUTHOR';
|
||||
status: 'Active' | 'Pending';
|
||||
posts: number;
|
||||
};
|
||||
|
||||
const rows: UserRow[] = [
|
||||
{ id: '1', name: 'Beatrice Rosa', role: 'ADMIN', status: 'Active', posts: 48 },
|
||||
{ id: '2', name: 'Luca Valli', role: 'EDITOR', status: 'Active', posts: 26 },
|
||||
{ id: '3', name: 'Marta Bellini', role: 'AUTHOR', status: 'Pending', posts: 4 },
|
||||
{ id: '4', name: 'Giulia Fontana', role: 'AUTHOR', status: 'Active', posts: 12 },
|
||||
{ id: '5', name: 'Andrea Pini', role: 'EDITOR', status: 'Pending', posts: 9 },
|
||||
{ id: '6', name: 'Sofia Denti', role: 'AUTHOR', status: 'Active', posts: 7 },
|
||||
{ id: '7', name: 'Marco Serra', role: 'AUTHOR', status: 'Active', posts: 18 },
|
||||
{ id: '8', name: 'Elena Neri', role: 'EDITOR', status: 'Active', posts: 31 }
|
||||
];
|
||||
|
||||
const headers: TableHeader<UserRow>[] = [
|
||||
{
|
||||
id: 'name',
|
||||
label: 'Name',
|
||||
value: (row) => row.name,
|
||||
sortable: true,
|
||||
sortField: 'name',
|
||||
cellClassName: 'table-cell-primary'
|
||||
},
|
||||
{
|
||||
id: 'role',
|
||||
label: 'Role',
|
||||
value: (row) => row.role,
|
||||
sortable: true,
|
||||
sortField: 'role'
|
||||
},
|
||||
{
|
||||
id: 'status',
|
||||
label: 'Status',
|
||||
value: (row) => (
|
||||
<Chip variant="outlined" tone={row.status === 'Active' ? 'indigo-700' : 'cyan-700'}>
|
||||
{row.status}
|
||||
</Chip>
|
||||
)
|
||||
},
|
||||
{
|
||||
id: 'posts',
|
||||
label: 'Posts',
|
||||
value: (row) => row.posts,
|
||||
sortable: true,
|
||||
sortField: 'posts'
|
||||
}
|
||||
];
|
||||
|
||||
type UsersTableProps = {
|
||||
data: UserRow[];
|
||||
isLoading?: boolean;
|
||||
emptyMessage?: string;
|
||||
sorting?: SortState | null;
|
||||
onSortChange?: (field: string) => void;
|
||||
pagination?: {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
total: number;
|
||||
totalPages: number;
|
||||
onPageChange: (page: number) => void;
|
||||
onPageSizeChange?: (pageSize: number) => void;
|
||||
};
|
||||
};
|
||||
|
||||
function UsersTable(props: Readonly<UsersTableProps>) {
|
||||
return (
|
||||
<Table<UserRow>
|
||||
headers={headers}
|
||||
data={props.data}
|
||||
rowKey={(row) => row.id}
|
||||
isLoading={props.isLoading}
|
||||
emptyMessage={props.emptyMessage}
|
||||
sorting={props.sorting}
|
||||
onSortChange={props.onSortChange}
|
||||
pagination={props.pagination}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function sortRows(data: UserRow[], sorting: SortState | null): UserRow[] {
|
||||
if (!sorting) {
|
||||
return data;
|
||||
}
|
||||
|
||||
const sorted = [...data];
|
||||
sorted.sort((a, b) => {
|
||||
const left = a[sorting.field as keyof UserRow];
|
||||
const right = b[sorting.field as keyof UserRow];
|
||||
if (left === right) {
|
||||
return 0;
|
||||
}
|
||||
if (typeof left === 'number' && typeof right === 'number') {
|
||||
return sorting.direction === 'asc' ? left - right : right - left;
|
||||
}
|
||||
return sorting.direction === 'asc'
|
||||
? String(left).localeCompare(String(right))
|
||||
: String(right).localeCompare(String(left));
|
||||
});
|
||||
return sorted;
|
||||
}
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Table',
|
||||
component: UsersTable,
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
component: 'Generic data table with loading/empty states, optional sorting controls, and optional pagination footer.'
|
||||
}
|
||||
}
|
||||
},
|
||||
argTypes: {
|
||||
data: {
|
||||
description: 'Rows rendered in the table body.',
|
||||
control: 'object',
|
||||
table: { type: { summary: 'UserRow[]' } }
|
||||
},
|
||||
isLoading: {
|
||||
description: 'When true, shows the loading indicator row.',
|
||||
control: 'boolean',
|
||||
table: { type: { summary: 'boolean' } }
|
||||
},
|
||||
emptyMessage: {
|
||||
description: 'Message shown when `data` is empty and `isLoading` is false.',
|
||||
control: 'text',
|
||||
table: { type: { summary: 'string' } }
|
||||
},
|
||||
sorting: {
|
||||
description: "Current sort state object. Use `null` for no active sorting.",
|
||||
control: 'object',
|
||||
table: { type: { summary: "{ field: string; direction: 'asc' | 'desc' } | null" } }
|
||||
},
|
||||
onSortChange: {
|
||||
description: 'Callback fired when a sortable header is clicked.',
|
||||
action: 'sort changed',
|
||||
table: { type: { summary: '(field: string) => void' } }
|
||||
},
|
||||
pagination: {
|
||||
description: 'Pagination config object. When omitted, pagination footer is hidden.',
|
||||
control: 'object',
|
||||
table: {
|
||||
type: {
|
||||
summary: '{ page; pageSize; total; totalPages; onPageChange; onPageSizeChange? }'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
args: {
|
||||
data: rows
|
||||
}
|
||||
} satisfies Meta<typeof UsersTable>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const WithRows: Story = {};
|
||||
|
||||
export const Loading: Story = {
|
||||
args: {
|
||||
isLoading: true
|
||||
}
|
||||
};
|
||||
|
||||
export const Empty: Story = {
|
||||
args: {
|
||||
data: [],
|
||||
emptyMessage: 'No users found'
|
||||
}
|
||||
};
|
||||
|
||||
export const InteractiveSortingAndPagination: Story = {
|
||||
render: () => {
|
||||
const [sorting, setSorting] = useState<SortState | null>({
|
||||
field: 'name',
|
||||
direction: 'asc'
|
||||
});
|
||||
const [page, setPage] = useState(1);
|
||||
const [pageSize, setPageSize] = useState(5);
|
||||
|
||||
const sorted = useMemo(() => sortRows(rows, sorting), [sorting]);
|
||||
const totalPages = Math.max(1, Math.ceil(sorted.length / pageSize));
|
||||
const safePage = Math.min(page, totalPages);
|
||||
const start = (safePage - 1) * pageSize;
|
||||
const pagedRows = sorted.slice(start, start + pageSize);
|
||||
|
||||
return (
|
||||
<UsersTable
|
||||
data={pagedRows}
|
||||
sorting={sorting}
|
||||
onSortChange={(field) => {
|
||||
setPage(1);
|
||||
setSorting((prev) => {
|
||||
if (!prev || prev.field !== field) {
|
||||
return { field, direction: 'asc' };
|
||||
}
|
||||
if (prev.direction === 'asc') {
|
||||
return { field, direction: 'desc' };
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}}
|
||||
pagination={{
|
||||
page: safePage,
|
||||
pageSize,
|
||||
total: sorted.length,
|
||||
totalPages,
|
||||
onPageChange: setPage,
|
||||
onPageSizeChange: (next) => {
|
||||
setPage(1);
|
||||
setPageSize(next);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -223,40 +223,17 @@
|
||||
}
|
||||
|
||||
.chip-solid {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.chip-outlined {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.chip-neutral.chip-solid {
|
||||
border-color: var(--ghost-border);
|
||||
background-color: var(--ghost-border);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.chip-neutral.chip-outlined {
|
||||
.chip-outlined {
|
||||
background-color: transparent;
|
||||
border-color: var(--ghost-border);
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.chip-indigo.chip-solid {
|
||||
@apply border-indigo-700 bg-indigo-700 text-white;
|
||||
}
|
||||
|
||||
.chip-indigo.chip-outlined {
|
||||
@apply border-indigo-700 text-indigo-300;
|
||||
}
|
||||
|
||||
.chip-cyan.chip-solid {
|
||||
@apply border-cyan-700 bg-cyan-700 text-white;
|
||||
}
|
||||
|
||||
.chip-cyan.chip-outlined {
|
||||
@apply border-cyan-700 text-cyan-300;
|
||||
}
|
||||
|
||||
.alert-error {
|
||||
border: 1px solid var(--error-border);
|
||||
background-color: var(--error-bg);
|
||||
@@ -310,4 +287,3 @@
|
||||
color: var(--text-secondary);
|
||||
@apply px-4 py-3 text-sm;
|
||||
}
|
||||
|
||||
|
||||
14
tailwind.storybook.config.cjs
Normal file
14
tailwind.storybook.config.cjs
Normal file
@@ -0,0 +1,14 @@
|
||||
const webUiPreset = require('./tailwind-preset.cjs');
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
presets: [webUiPreset],
|
||||
content: [
|
||||
'./src/**/*.{ts,tsx,js,jsx,mdx}',
|
||||
'./.storybook/**/*.{ts,tsx,js,jsx,mdx}'
|
||||
],
|
||||
theme: {
|
||||
extend: {}
|
||||
},
|
||||
plugins: []
|
||||
};
|
||||
@@ -8,5 +8,6 @@
|
||||
"outDir": "dist",
|
||||
"declarationMap": true
|
||||
},
|
||||
"include": ["src"]
|
||||
"include": ["src"],
|
||||
"exclude": ["src/**/*.stories.ts", "src/**/*.stories.tsx"]
|
||||
}
|
||||
|
||||
639
yarn.lock
639
yarn.lock
@@ -2,12 +2,17 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@adobe/css-tools@^4.4.0":
|
||||
version "4.4.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@adobe/css-tools/-/css-tools-4.4.4.tgz#2856c55443d3d461693f32d2b96fb6ea92e1ffa9"
|
||||
integrity sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==
|
||||
|
||||
"@alloc/quick-lru@^5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
|
||||
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
|
||||
|
||||
"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0":
|
||||
"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c"
|
||||
integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==
|
||||
@@ -21,7 +26,7 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d"
|
||||
integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==
|
||||
|
||||
"@babel/core@^7.29.0":
|
||||
"@babel/core@^7.28.0", "@babel/core@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322"
|
||||
integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==
|
||||
@@ -149,7 +154,7 @@
|
||||
"@babel/parser" "^7.28.6"
|
||||
"@babel/types" "^7.28.6"
|
||||
|
||||
"@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0":
|
||||
"@babel/traverse@^7.28.0", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a"
|
||||
integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==
|
||||
@@ -735,6 +740,14 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b"
|
||||
integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==
|
||||
|
||||
"@joshwooding/vite-plugin-react-docgen-typescript@^0.6.4":
|
||||
version "0.6.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.4.tgz#9cfa58703ae8122329c52a5989244818ee4cdcbe"
|
||||
integrity sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==
|
||||
dependencies:
|
||||
glob "^13.0.1"
|
||||
react-docgen-typescript "^2.2.2"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.13"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
|
||||
@@ -756,7 +769,7 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
|
||||
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
|
||||
version "1.5.5"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
|
||||
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
|
||||
@@ -1120,6 +1133,13 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8"
|
||||
integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==
|
||||
|
||||
"@mdx-js/react@^3.0.0":
|
||||
version "3.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@mdx-js/react/-/react-3.1.1.tgz#24bda7fffceb2fe256f954482123cda1be5f5fef"
|
||||
integrity sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==
|
||||
dependencies:
|
||||
"@types/mdx" "^2.0.0"
|
||||
|
||||
"@mdxeditor/editor@^3.52.4":
|
||||
version "3.52.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@mdxeditor/editor/-/editor-3.52.4.tgz#8d657c017d6f014c5a5f3b4e69e5f05aed301077"
|
||||
@@ -1567,6 +1587,15 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz#8a88cc92a0f741befc7bc109cb1a4c6b9408e1c5"
|
||||
integrity sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==
|
||||
|
||||
"@rollup/pluginutils@^5.0.2":
|
||||
version "5.3.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4"
|
||||
integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==
|
||||
dependencies:
|
||||
"@types/estree" "^1.0.0"
|
||||
estree-walker "^2.0.2"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.59.0":
|
||||
version "4.59.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz#a6742c74c7d9d6d604ef8a48f99326b4ecda3d82"
|
||||
@@ -1697,6 +1726,124 @@
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@stitches/core/-/core-1.2.8.tgz#dce3b8fdc764fbc6dbea30c83b73bfb52cf96173"
|
||||
integrity sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==
|
||||
|
||||
"@storybook/addon-a11y@^10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/addon-a11y/-/addon-a11y-10.2.10.tgz#8c80cdcce50eecc52aa7b0fec69dd2bcb92eef98"
|
||||
integrity sha512-1S9pDXgvbHhBStGarCvfJ3/rfcaiAcQHRhuM3Nk4WGSIYtC1LCSRuzYdDYU0aNRpdCbCrUA7kUCbqvIE3tH+3Q==
|
||||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
axe-core "^4.2.0"
|
||||
|
||||
"@storybook/addon-docs@^10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/addon-docs/-/addon-docs-10.2.10.tgz#22d1a8dae3b04d5e9e1e131ae7f97a8ab722e83d"
|
||||
integrity sha512-2wIYtdvZIzPbQ5194M5Igpy8faNbQ135nuO5ZaZ2VuttqGr+IJcGnDP42zYwbAsGs28G8ohpkbSgIzVyJWUhPQ==
|
||||
dependencies:
|
||||
"@mdx-js/react" "^3.0.0"
|
||||
"@storybook/csf-plugin" "10.2.10"
|
||||
"@storybook/icons" "^2.0.1"
|
||||
"@storybook/react-dom-shim" "10.2.10"
|
||||
react "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
react-dom "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/addon-themes@^10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/addon-themes/-/addon-themes-10.2.10.tgz#2daefc26d1c9071ff49948d92805908b7d54caf5"
|
||||
integrity sha512-j7ixCgzpWeTU7K4BkNHtEg3NdmRg9YW7ynvv0OjD3vaz4+FUVWOq7PPwb3SktLS1tOl4UA13IpApD8nSpBiY6A==
|
||||
dependencies:
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/builder-vite@10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/builder-vite/-/builder-vite-10.2.10.tgz#0f9889873291a7b88857c45224d4063e204d3a62"
|
||||
integrity sha512-Wd6CYL7LvRRNiXMz977x9u/qMm7nmMw/7Dow2BybQo+Xbfy1KhVjIoZ/gOiG515zpojSozctNrJUbM0+jH1jwg==
|
||||
dependencies:
|
||||
"@storybook/csf-plugin" "10.2.10"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/csf-plugin@10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/csf-plugin/-/csf-plugin-10.2.10.tgz#038cd8e41884f2f437502504d02b8c0a24ed0b39"
|
||||
integrity sha512-aFvgaNDAnKMjuyhPK5ialT22pPqMN0XfPBNPeeNVPYztngkdKBa8WFqF/umDd47HxAjebq+vn6uId1xHyOHH3g==
|
||||
dependencies:
|
||||
unplugin "^2.3.5"
|
||||
|
||||
"@storybook/global@^5.0.0":
|
||||
version "5.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed"
|
||||
integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==
|
||||
|
||||
"@storybook/icons@^2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/icons/-/icons-2.0.1.tgz#1bd351db1d33bfccbbafa7b64fb413168f1a6616"
|
||||
integrity sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==
|
||||
|
||||
"@storybook/react-dom-shim@10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/react-dom-shim/-/react-dom-shim-10.2.10.tgz#ce1b439573fa01fc4fd461cff22bda23abf39a4a"
|
||||
integrity sha512-TmBrhyLHn8B8rvDHKk5uW5BqzO1M1T+fqFNWg88NIAJOoyX4Uc90FIJjDuN1OJmWKGwB5vLmPwaKBYsTe1yS+w==
|
||||
|
||||
"@storybook/react-vite@^10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/react-vite/-/react-vite-10.2.10.tgz#cf1e970189167786fe1e314eeef025b50a49e4f1"
|
||||
integrity sha512-C652GhZHXURi+gFqqLKmZPskEq1FQto4VCf/eQea2exmdVS0nOB+FFWQZNCivX6mpkDHza8UxRZNFpDB0mWcJQ==
|
||||
dependencies:
|
||||
"@joshwooding/vite-plugin-react-docgen-typescript" "^0.6.4"
|
||||
"@rollup/pluginutils" "^5.0.2"
|
||||
"@storybook/builder-vite" "10.2.10"
|
||||
"@storybook/react" "10.2.10"
|
||||
empathic "^2.0.0"
|
||||
magic-string "^0.30.0"
|
||||
react-docgen "^8.0.0"
|
||||
resolve "^1.22.8"
|
||||
tsconfig-paths "^4.2.0"
|
||||
|
||||
"@storybook/react@10.2.10", "@storybook/react@^10.2.10":
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@storybook/react/-/react-10.2.10.tgz#38116ead3e1bbb96acfa043db3545e36146cd32f"
|
||||
integrity sha512-PcsChzPI8lhllB9exV7nFb96093i6sTwIl0jpPjaTFPQCRoueR9E/YeP3qSKQL9xt4cmii0cW7F0RUx25rW93Q==
|
||||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/react-dom-shim" "10.2.10"
|
||||
react-docgen "^8.0.2"
|
||||
|
||||
"@testing-library/dom@^10.4.1":
|
||||
version "10.4.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@testing-library/dom/-/dom-10.4.1.tgz#d444f8a889e9a46e9a3b4f3b88e0fcb3efb6cf95"
|
||||
integrity sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.10.4"
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@types/aria-query" "^5.0.1"
|
||||
aria-query "5.3.0"
|
||||
dom-accessibility-api "^0.5.9"
|
||||
lz-string "^1.5.0"
|
||||
picocolors "1.1.1"
|
||||
pretty-format "^27.0.2"
|
||||
|
||||
"@testing-library/jest-dom@^6.6.3":
|
||||
version "6.9.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz#7613a04e146dd2976d24ddf019730d57a89d56c2"
|
||||
integrity sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==
|
||||
dependencies:
|
||||
"@adobe/css-tools" "^4.4.0"
|
||||
aria-query "^5.0.0"
|
||||
css.escape "^1.5.1"
|
||||
dom-accessibility-api "^0.6.3"
|
||||
picocolors "^1.1.1"
|
||||
redent "^3.0.0"
|
||||
|
||||
"@testing-library/user-event@^14.6.1":
|
||||
version "14.6.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@testing-library/user-event/-/user-event-14.6.1.tgz#13e09a32d7a8b7060fe38304788ebf4197cd2149"
|
||||
integrity sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==
|
||||
|
||||
"@types/aria-query@^5.0.1":
|
||||
version "5.0.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708"
|
||||
integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==
|
||||
|
||||
"@types/babel__core@^7.20.5":
|
||||
version "7.20.5"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
|
||||
@@ -1723,13 +1870,21 @@
|
||||
"@babel/parser" "^7.1.0"
|
||||
"@babel/types" "^7.0.0"
|
||||
|
||||
"@types/babel__traverse@*":
|
||||
"@types/babel__traverse@*", "@types/babel__traverse@^7.20.7":
|
||||
version "7.28.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74"
|
||||
integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==
|
||||
dependencies:
|
||||
"@babel/types" "^7.28.2"
|
||||
|
||||
"@types/chai@^5.2.2":
|
||||
version "5.2.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a"
|
||||
integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==
|
||||
dependencies:
|
||||
"@types/deep-eql" "*"
|
||||
assertion-error "^2.0.1"
|
||||
|
||||
"@types/debug@^4.0.0":
|
||||
version "4.1.12"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
|
||||
@@ -1737,6 +1892,16 @@
|
||||
dependencies:
|
||||
"@types/ms" "*"
|
||||
|
||||
"@types/deep-eql@*":
|
||||
version "4.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd"
|
||||
integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==
|
||||
|
||||
"@types/doctrine@^0.0.9":
|
||||
version "0.0.9"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f"
|
||||
integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==
|
||||
|
||||
"@types/estree-jsx@^1.0.0":
|
||||
version "1.0.5"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18"
|
||||
@@ -1763,6 +1928,11 @@
|
||||
dependencies:
|
||||
"@types/unist" "*"
|
||||
|
||||
"@types/mdx@^2.0.0":
|
||||
version "2.0.13"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd"
|
||||
integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==
|
||||
|
||||
"@types/ms@*":
|
||||
version "2.1.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78"
|
||||
@@ -1780,6 +1950,11 @@
|
||||
dependencies:
|
||||
csstype "^3.2.2"
|
||||
|
||||
"@types/resolve@^1.20.2":
|
||||
version "1.20.6"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8"
|
||||
integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==
|
||||
|
||||
"@types/unist@*", "@types/unist@^3.0.0":
|
||||
version "3.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c"
|
||||
@@ -1802,12 +1977,46 @@
|
||||
"@types/babel__core" "^7.20.5"
|
||||
react-refresh "^0.18.0"
|
||||
|
||||
"@vitest/expect@3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@vitest/expect/-/expect-3.2.4.tgz#8362124cd811a5ee11c5768207b9df53d34f2433"
|
||||
integrity sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==
|
||||
dependencies:
|
||||
"@types/chai" "^5.2.2"
|
||||
"@vitest/spy" "3.2.4"
|
||||
"@vitest/utils" "3.2.4"
|
||||
chai "^5.2.0"
|
||||
tinyrainbow "^2.0.0"
|
||||
|
||||
"@vitest/pretty-format@3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@vitest/pretty-format/-/pretty-format-3.2.4.tgz#3c102f79e82b204a26c7a5921bf47d534919d3b4"
|
||||
integrity sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==
|
||||
dependencies:
|
||||
tinyrainbow "^2.0.0"
|
||||
|
||||
"@vitest/spy@3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@vitest/spy/-/spy-3.2.4.tgz#cc18f26f40f3f028da6620046881f4e4518c2599"
|
||||
integrity sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==
|
||||
dependencies:
|
||||
tinyspy "^4.0.3"
|
||||
|
||||
"@vitest/utils@3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/@vitest/utils/-/utils-3.2.4.tgz#c0813bc42d99527fb8c5b138c7a88516bca46fea"
|
||||
integrity sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==
|
||||
dependencies:
|
||||
"@vitest/pretty-format" "3.2.4"
|
||||
loupe "^3.1.4"
|
||||
tinyrainbow "^2.0.0"
|
||||
|
||||
acorn-jsx@^5.0.0:
|
||||
version "5.3.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
acorn@^8.0.0:
|
||||
acorn@^8.0.0, acorn@^8.15.0:
|
||||
version "8.16.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
|
||||
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
|
||||
@@ -1817,6 +2026,16 @@ anser@^2.1.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/anser/-/anser-2.3.5.tgz#3435896b68b93e5e744842499d0ce3e6f6d013ee"
|
||||
integrity sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==
|
||||
|
||||
ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-styles@^5.0.0:
|
||||
version "5.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
|
||||
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
@@ -1847,6 +2066,40 @@ aria-hidden@^1.2.4:
|
||||
dependencies:
|
||||
tslib "^2.0.0"
|
||||
|
||||
aria-query@5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
|
||||
integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
|
||||
dependencies:
|
||||
dequal "^2.0.3"
|
||||
|
||||
aria-query@^5.0.0:
|
||||
version "5.3.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59"
|
||||
integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
|
||||
|
||||
assertion-error@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7"
|
||||
integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==
|
||||
|
||||
ast-types@^0.16.1:
|
||||
version "0.16.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2"
|
||||
integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==
|
||||
dependencies:
|
||||
tslib "^2.0.1"
|
||||
|
||||
axe-core@^4.2.0:
|
||||
version "4.11.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/axe-core/-/axe-core-4.11.1.tgz#052ff9b2cbf543f5595028b583e4763b40c78ea7"
|
||||
integrity sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==
|
||||
|
||||
balanced-match@^4.0.2:
|
||||
version "4.0.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
|
||||
integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
|
||||
|
||||
base64-js@^1.3.1:
|
||||
version "1.5.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
@@ -1862,6 +2115,13 @@ binary-extensions@^2.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
|
||||
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
|
||||
|
||||
brace-expansion@^5.0.2:
|
||||
version "5.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/brace-expansion/-/brace-expansion-5.0.3.tgz#6a9c6c268f85b53959ec527aeafe0f7300258eef"
|
||||
integrity sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==
|
||||
dependencies:
|
||||
balanced-match "^4.0.2"
|
||||
|
||||
braces@^3.0.3, braces@~3.0.2:
|
||||
version "3.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
||||
@@ -1888,6 +2148,13 @@ buffer@^6.0.3:
|
||||
base64-js "^1.3.1"
|
||||
ieee754 "^1.2.1"
|
||||
|
||||
bundle-name@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
|
||||
integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
|
||||
dependencies:
|
||||
run-applescript "^7.0.0"
|
||||
|
||||
camelcase-css@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
|
||||
@@ -1903,6 +2170,17 @@ ccount@^2.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
|
||||
integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
|
||||
|
||||
chai@^5.2.0:
|
||||
version "5.3.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/chai/-/chai-5.3.3.tgz#dd3da955e270916a4bd3f625f4b919996ada7e06"
|
||||
integrity sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==
|
||||
dependencies:
|
||||
assertion-error "^2.0.1"
|
||||
check-error "^2.1.1"
|
||||
deep-eql "^5.0.1"
|
||||
loupe "^3.1.0"
|
||||
pathval "^2.0.0"
|
||||
|
||||
character-entities-html4@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
|
||||
@@ -1923,6 +2201,11 @@ character-reference-invalid@^2.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
|
||||
integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
|
||||
|
||||
check-error@^2.1.1:
|
||||
version "2.1.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/check-error/-/check-error-2.1.3.tgz#2427361117b70cca8dc89680ead32b157019caf5"
|
||||
integrity sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==
|
||||
|
||||
chokidar@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
|
||||
@@ -1991,6 +2274,11 @@ crelt@^1.0.5, crelt@^1.0.6:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
|
||||
integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
|
||||
|
||||
css.escape@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
|
||||
integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==
|
||||
|
||||
cssesc@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
|
||||
@@ -2023,7 +2311,30 @@ decode-named-character-reference@^1.0.0:
|
||||
dependencies:
|
||||
character-entities "^2.0.0"
|
||||
|
||||
dequal@^2.0.0, dequal@^2.0.2:
|
||||
deep-eql@^5.0.1:
|
||||
version "5.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341"
|
||||
integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==
|
||||
|
||||
default-browser-id@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8"
|
||||
integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==
|
||||
|
||||
default-browser@^5.2.1:
|
||||
version "5.5.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976"
|
||||
integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==
|
||||
dependencies:
|
||||
bundle-name "^4.1.0"
|
||||
default-browser-id "^5.0.0"
|
||||
|
||||
define-lazy-prop@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
|
||||
integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
|
||||
|
||||
dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
|
||||
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
|
||||
@@ -2055,6 +2366,23 @@ dlv@^1.1.3:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
|
||||
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||
integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
dom-accessibility-api@^0.5.9:
|
||||
version "0.5.16"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453"
|
||||
integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==
|
||||
|
||||
dom-accessibility-api@^0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8"
|
||||
integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==
|
||||
|
||||
dotenv@^16.0.3:
|
||||
version "16.6.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
|
||||
@@ -2076,6 +2404,11 @@ electron-to-chromium@^1.5.263:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz#032a5802b31f7119269959c69fe2015d8dad5edb"
|
||||
integrity sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==
|
||||
|
||||
empathic@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/empathic/-/empathic-2.0.0.tgz#71d3c2b94fad49532ef98a6c34be0386659f6131"
|
||||
integrity sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==
|
||||
|
||||
es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14:
|
||||
version "0.10.64"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714"
|
||||
@@ -2103,7 +2436,7 @@ es6-symbol@^3, es6-symbol@^3.1.1, es6-symbol@^3.1.3:
|
||||
d "^1.0.2"
|
||||
ext "^1.7.0"
|
||||
|
||||
esbuild@^0.27.0:
|
||||
"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", esbuild@^0.27.0:
|
||||
version "0.27.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/esbuild/-/esbuild-0.27.3.tgz#5859ca8e70a3af956b26895ce4954d7e73bd27a8"
|
||||
integrity sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==
|
||||
@@ -2160,6 +2493,11 @@ esniff@^2.0.1:
|
||||
event-emitter "^0.3.5"
|
||||
type "^2.7.2"
|
||||
|
||||
esprima@~4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||
|
||||
estree-util-is-identifier-name@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd"
|
||||
@@ -2173,6 +2511,16 @@ estree-util-visit@^2.0.0:
|
||||
"@types/estree-jsx" "^1.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||
|
||||
esutils@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
event-emitter@^0.3.5:
|
||||
version "0.3.5"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
|
||||
@@ -2264,6 +2612,15 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob@^13.0.1:
|
||||
version "13.0.6"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d"
|
||||
integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==
|
||||
dependencies:
|
||||
minimatch "^10.2.2"
|
||||
minipass "^7.1.3"
|
||||
path-scurry "^2.0.2"
|
||||
|
||||
hasown@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||
@@ -2276,6 +2633,11 @@ ieee754@^1.2.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
||||
indent-string@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||
|
||||
intersection-observer@^0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/intersection-observer/-/intersection-observer-0.10.0.tgz#4d11d63c1ff67e21e62987be24d55218da1a1a69"
|
||||
@@ -2313,6 +2675,11 @@ is-decimal@^2.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
|
||||
integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
|
||||
|
||||
is-docker@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
|
||||
integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
|
||||
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
@@ -2330,11 +2697,25 @@ is-hexadecimal@^2.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
|
||||
integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
|
||||
|
||||
is-inside-container@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
|
||||
integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
|
||||
dependencies:
|
||||
is-docker "^3.0.0"
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
is-wsl@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f"
|
||||
integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==
|
||||
dependencies:
|
||||
is-inside-container "^1.0.0"
|
||||
|
||||
isomorphic.js@^0.2.4:
|
||||
version "0.2.5"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88"
|
||||
@@ -2362,7 +2743,7 @@ jsesc@^3.0.2:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json5@^2.2.3:
|
||||
json5@^2.2.2, json5@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
@@ -2406,6 +2787,16 @@ loose-envify@^1.4.0:
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
loupe@^3.1.0, loupe@^3.1.4:
|
||||
version "3.2.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/loupe/-/loupe-3.2.1.tgz#0095cf56dc5b7a9a7c08ff5b1a8796ec8ad17e76"
|
||||
integrity sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==
|
||||
|
||||
lru-cache@^11.0.0:
|
||||
version "11.2.6"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/lru-cache/-/lru-cache-11.2.6.tgz#356bf8a29e88a7a2945507b31f6429a65a192c58"
|
||||
integrity sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
@@ -2413,11 +2804,18 @@ lru-cache@^5.1.1:
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
lz-string@^1.4.4:
|
||||
lz-string@^1.4.4, lz-string@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
|
||||
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
|
||||
|
||||
magic-string@^0.30.0:
|
||||
version "0.30.21"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91"
|
||||
integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==
|
||||
dependencies:
|
||||
"@jridgewell/sourcemap-codec" "^1.5.5"
|
||||
|
||||
markdown-table@^3.0.0:
|
||||
version "3.0.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a"
|
||||
@@ -2963,6 +3361,28 @@ mime-db@^1.52.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
|
||||
integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
|
||||
|
||||
min-indent@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
||||
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
|
||||
|
||||
minimatch@^10.2.2:
|
||||
version "10.2.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f"
|
||||
integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==
|
||||
dependencies:
|
||||
brace-expansion "^5.0.2"
|
||||
|
||||
minimist@^1.2.6:
|
||||
version "1.2.8"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||
|
||||
minipass@^7.1.2, minipass@^7.1.3:
|
||||
version "7.1.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b"
|
||||
integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==
|
||||
|
||||
mri@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
|
||||
@@ -3012,6 +3432,16 @@ object-hash@^3.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
|
||||
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
|
||||
|
||||
open@^10.2.0:
|
||||
version "10.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c"
|
||||
integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==
|
||||
dependencies:
|
||||
default-browser "^5.2.1"
|
||||
define-lazy-prop "^3.0.0"
|
||||
is-inside-container "^1.0.0"
|
||||
wsl-utils "^0.1.0"
|
||||
|
||||
outvariant@1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/outvariant/-/outvariant-1.4.0.tgz#e742e4bda77692da3eca698ef5bfac62d9fba06e"
|
||||
@@ -3040,7 +3470,20 @@ path-parse@^1.0.7:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
picocolors@^1.1.1:
|
||||
path-scurry@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85"
|
||||
integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==
|
||||
dependencies:
|
||||
lru-cache "^11.0.0"
|
||||
minipass "^7.1.2"
|
||||
|
||||
pathval@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d"
|
||||
integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==
|
||||
|
||||
picocolors@1.1.1, picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
@@ -3050,7 +3493,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
picomatch@^4.0.3:
|
||||
picomatch@^4.0.2, picomatch@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
|
||||
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
|
||||
@@ -3108,7 +3551,7 @@ postcss-value-parser@^4.0.0:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
postcss@^8.4.47, postcss@^8.5.6:
|
||||
postcss@^8.4.47, postcss@^8.4.49, postcss@^8.5.6:
|
||||
version "8.5.6"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
|
||||
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
|
||||
@@ -3117,6 +3560,15 @@ postcss@^8.4.47, postcss@^8.5.6:
|
||||
picocolors "^1.1.1"
|
||||
source-map-js "^1.2.1"
|
||||
|
||||
pretty-format@^27.0.2:
|
||||
version "27.5.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
|
||||
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
ansi-styles "^5.0.0"
|
||||
react-is "^17.0.1"
|
||||
|
||||
prismjs@^1.30.0:
|
||||
version "1.30.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9"
|
||||
@@ -3143,7 +3595,28 @@ react-devtools-inline@4.4.0:
|
||||
dependencies:
|
||||
es6-symbol "^3"
|
||||
|
||||
react-dom@^19.0.0:
|
||||
react-docgen-typescript@^2.2.2:
|
||||
version "2.4.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react-docgen-typescript/-/react-docgen-typescript-2.4.0.tgz#033428b4a6a639d050ac8baf2a5195c596521713"
|
||||
integrity sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==
|
||||
|
||||
react-docgen@^8.0.0, react-docgen@^8.0.2:
|
||||
version "8.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react-docgen/-/react-docgen-8.0.2.tgz#450efcac75813e3d614d7bd15eb4066e2e7bcbf5"
|
||||
integrity sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==
|
||||
dependencies:
|
||||
"@babel/core" "^7.28.0"
|
||||
"@babel/traverse" "^7.28.0"
|
||||
"@babel/types" "^7.28.2"
|
||||
"@types/babel__core" "^7.20.5"
|
||||
"@types/babel__traverse" "^7.20.7"
|
||||
"@types/doctrine" "^0.0.9"
|
||||
"@types/resolve" "^1.20.2"
|
||||
doctrine "^3.0.0"
|
||||
resolve "^1.22.1"
|
||||
strip-indent "^4.0.0"
|
||||
|
||||
"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^19.0.0:
|
||||
version "19.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591"
|
||||
integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==
|
||||
@@ -3167,7 +3640,7 @@ react-is@^16.13.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-is@^17.0.2:
|
||||
react-is@^17.0.1, react-is@^17.0.2:
|
||||
version "17.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
|
||||
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
|
||||
@@ -3219,7 +3692,7 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
|
||||
get-nonce "^1.0.0"
|
||||
tslib "^2.0.0"
|
||||
|
||||
react@^19.0.0:
|
||||
"react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react@^19.0.0:
|
||||
version "19.2.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a"
|
||||
integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==
|
||||
@@ -3238,7 +3711,26 @@ readdirp@~3.6.0:
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
resolve@^1.1.7, resolve@^1.22.8:
|
||||
recast@^0.23.5:
|
||||
version "0.23.11"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f"
|
||||
integrity sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==
|
||||
dependencies:
|
||||
ast-types "^0.16.1"
|
||||
esprima "~4.0.0"
|
||||
source-map "~0.6.1"
|
||||
tiny-invariant "^1.3.3"
|
||||
tslib "^2.0.1"
|
||||
|
||||
redent@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
|
||||
integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
|
||||
dependencies:
|
||||
indent-string "^4.0.0"
|
||||
strip-indent "^3.0.0"
|
||||
|
||||
resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.8:
|
||||
version "1.22.11"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262"
|
||||
integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
|
||||
@@ -3286,6 +3778,11 @@ rollup@^4.43.0:
|
||||
"@rollup/rollup-win32-x64-msvc" "4.59.0"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
run-applescript@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911"
|
||||
integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==
|
||||
|
||||
run-parallel@^1.1.9:
|
||||
version "1.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
|
||||
@@ -3310,6 +3807,11 @@ semver@^6.3.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^7.7.3:
|
||||
version "7.7.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
|
||||
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
|
||||
|
||||
set-cookie-parser@^2.6.0:
|
||||
version "2.7.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz#ccd08673a9ae5d2e44ea2a2de25089e67c7edf68"
|
||||
@@ -3320,6 +3822,11 @@ source-map-js@^1.2.1:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
|
||||
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
|
||||
|
||||
source-map@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
static-browser-server@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/static-browser-server/-/static-browser-server-1.0.3.tgz#9030d141b99ed92c8eec1a7546b87548fd036f5d"
|
||||
@@ -3330,6 +3837,24 @@ static-browser-server@1.0.3:
|
||||
mime-db "^1.52.0"
|
||||
outvariant "^1.3.0"
|
||||
|
||||
storybook@^10.2.10:
|
||||
version "10.2.10"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/storybook/-/storybook-10.2.10.tgz#b0a008c239690889fc52ae95a35305d4c64b4306"
|
||||
integrity sha512-N4U42qKgzMHS7DjqLz5bY4P7rnvJtYkWFCyKspZr3FhPUuy6CWOae3aYC2BjXkHrdug0Jyta6VxFTuB1tYUKhg==
|
||||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/icons" "^2.0.1"
|
||||
"@testing-library/jest-dom" "^6.6.3"
|
||||
"@testing-library/user-event" "^14.6.1"
|
||||
"@vitest/expect" "3.2.4"
|
||||
"@vitest/spy" "3.2.4"
|
||||
esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0"
|
||||
open "^10.2.0"
|
||||
recast "^0.23.5"
|
||||
semver "^7.7.3"
|
||||
use-sync-external-store "^1.5.0"
|
||||
ws "^8.18.0"
|
||||
|
||||
strict-event-emitter@^0.4.3:
|
||||
version "0.4.6"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3"
|
||||
@@ -3343,6 +3868,23 @@ stringify-entities@^4.0.0:
|
||||
character-entities-html4 "^2.0.0"
|
||||
character-entities-legacy "^3.0.0"
|
||||
|
||||
strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
|
||||
|
||||
strip-indent@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
|
||||
integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
|
||||
dependencies:
|
||||
min-indent "^1.0.0"
|
||||
|
||||
strip-indent@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/strip-indent/-/strip-indent-4.1.1.tgz#aba13de189d4ad9a17f6050e76554ac27585c7af"
|
||||
integrity sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==
|
||||
|
||||
style-mod@^4.0.0, style-mod@^4.1.0:
|
||||
version "4.1.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/style-mod/-/style-mod-4.1.3.tgz#6e9012255bb799bdac37e288f7671b5d71bf9f73"
|
||||
@@ -3413,6 +3955,11 @@ thenify-all@^1.0.0:
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
tiny-invariant@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
|
||||
integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
|
||||
|
||||
tinyglobby@^0.2.11, tinyglobby@^0.2.15:
|
||||
version "0.2.15"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
|
||||
@@ -3421,6 +3968,16 @@ tinyglobby@^0.2.11, tinyglobby@^0.2.15:
|
||||
fdir "^6.5.0"
|
||||
picomatch "^4.0.3"
|
||||
|
||||
tinyrainbow@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294"
|
||||
integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==
|
||||
|
||||
tinyspy@^4.0.3:
|
||||
version "4.0.4"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tinyspy/-/tinyspy-4.0.4.tgz#d77a002fb53a88aa1429b419c1c92492e0c81f78"
|
||||
integrity sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||
@@ -3428,12 +3985,26 @@ to-regex-range@^5.0.1:
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
ts-dedent@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5"
|
||||
integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==
|
||||
|
||||
ts-interface-checker@^0.1.9:
|
||||
version "0.1.13"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
|
||||
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
|
||||
|
||||
tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0:
|
||||
tsconfig-paths@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c"
|
||||
integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==
|
||||
dependencies:
|
||||
json5 "^2.2.2"
|
||||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.0:
|
||||
version "2.8.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
|
||||
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||
@@ -3493,6 +4064,16 @@ unist-util-visit@^5.0.0:
|
||||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
unplugin@^2.3.5:
|
||||
version "2.3.11"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/unplugin/-/unplugin-2.3.11.tgz#411e020dd2ba90e2fbe1e7bd63a5a399e6ee3b54"
|
||||
integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==
|
||||
dependencies:
|
||||
"@jridgewell/remapping" "^2.3.5"
|
||||
acorn "^8.15.0"
|
||||
picomatch "^4.0.3"
|
||||
webpack-virtual-modules "^0.6.2"
|
||||
|
||||
update-browserslist-db@^1.2.0:
|
||||
version "1.2.3"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d"
|
||||
@@ -3516,6 +4097,11 @@ use-sidecar@^1.1.3:
|
||||
detect-node-es "^1.1.0"
|
||||
tslib "^2.0.0"
|
||||
|
||||
use-sync-external-store@^1.5.0:
|
||||
version "1.6.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d"
|
||||
integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==
|
||||
|
||||
util-deprecate@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
@@ -3558,6 +4144,23 @@ w3c-keyname@^2.2.4:
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
|
||||
integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
|
||||
|
||||
webpack-virtual-modules@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8"
|
||||
integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==
|
||||
|
||||
ws@^8.18.0:
|
||||
version "8.19.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b"
|
||||
integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==
|
||||
|
||||
wsl-utils@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab"
|
||||
integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==
|
||||
dependencies:
|
||||
is-wsl "^3.1.0"
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://nexus.beatrice.wtf/repository/npm-group/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
|
||||
Reference in New Issue
Block a user