mirror of
https://github.com/penpot/penpot.git
synced 2026-09-12 15:09:38 +00:00
✨ Add example ui storybook
This commit is contained in:
parent
07055b53d1
commit
45d04942cc
@ -52,6 +52,7 @@
|
|||||||
"@penpot/svgo": "penpot/svgo#v3.2",
|
"@penpot/svgo": "penpot/svgo#v3.2",
|
||||||
"@penpot/text-editor": "workspace:./text-editor",
|
"@penpot/text-editor": "workspace:./text-editor",
|
||||||
"@playwright/test": "1.58.0",
|
"@playwright/test": "1.58.0",
|
||||||
|
"@penpot/ui": "workspace:./packages/ui",
|
||||||
"@storybook/addon-docs": "10.1.11",
|
"@storybook/addon-docs": "10.1.11",
|
||||||
"@storybook/addon-themes": "10.1.11",
|
"@storybook/addon-themes": "10.1.11",
|
||||||
"@storybook/addon-vitest": "10.1.11",
|
"@storybook/addon-vitest": "10.1.11",
|
||||||
|
|||||||
4
frontend/packages/ui/.babelrc
Normal file
4
frontend/packages/ui/.babelrc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"presets": [],
|
||||||
|
"plugins": []
|
||||||
|
}
|
||||||
1
frontend/packages/ui/.gitignore
vendored
Normal file
1
frontend/packages/ui/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
dist/
|
||||||
23
frontend/packages/ui/.storybook/main.ts
Normal file
23
frontend/packages/ui/.storybook/main.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import { dirname } from 'node:path';
|
||||||
|
|
||||||
|
import type { StorybookConfig } from '@storybook/react-vite';
|
||||||
|
|
||||||
|
const config: StorybookConfig = {
|
||||||
|
stories: ['../src/lib/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],
|
||||||
|
addons: [],
|
||||||
|
framework: {
|
||||||
|
name: getAbsolutePath('@storybook/react-vite'),
|
||||||
|
options: {
|
||||||
|
builder: {
|
||||||
|
viteConfigPath: 'vite.config.mts',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function getAbsolutePath(value: string): any {
|
||||||
|
return dirname(fileURLToPath(import.meta.resolve(`${value}/package.json`)));
|
||||||
|
}
|
||||||
|
|
||||||
|
export default config;
|
||||||
0
frontend/packages/ui/.storybook/preview.ts
Normal file
0
frontend/packages/ui/.storybook/preview.ts
Normal file
11
frontend/packages/ui/README.md
Normal file
11
frontend/packages/ui/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# UI
|
||||||
|
|
||||||
|
A React component library with TypeScript for the Penpot ecosystem.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
Run from workspace root:
|
||||||
|
|
||||||
|
- **`pnpm storybook:ui`** - Start Storybook for component development
|
||||||
|
- **`pnpm build:ui`** - Build the library for production
|
||||||
|
- **`pnpm start:ui`** - Build in watch mode for development
|
||||||
39
frontend/packages/ui/package.json
Normal file
39
frontend/packages/ui/package.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "@penpot/ui",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"type": "module",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": "./dist/index.js"
|
||||||
|
},
|
||||||
|
"./style.css": "./dist/style.css"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"watch": "vite build --watch",
|
||||||
|
"build": "vite build"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.14.5",
|
||||||
|
"@babel/preset-react": "^7.14.5",
|
||||||
|
"@storybook/react": "10.2.0",
|
||||||
|
"@storybook/react-vite": "10.2.0",
|
||||||
|
"@testing-library/dom": "10.4.0",
|
||||||
|
"@testing-library/react": "16.3.0",
|
||||||
|
"@types/react": "^19.0.0",
|
||||||
|
"@types/react-dom": "^19.0.0",
|
||||||
|
"@vitejs/plugin-react": "^4.2.0",
|
||||||
|
"babel-plugin-react-compiler": "^1.0.0",
|
||||||
|
"eslint-plugin-import": "2.31.0",
|
||||||
|
"eslint-plugin-jsx-a11y": "6.10.1",
|
||||||
|
"eslint-plugin-react": "7.35.0",
|
||||||
|
"eslint-plugin-react-hooks": "7.0.1",
|
||||||
|
"react-compiler-runtime": "^1.0.0",
|
||||||
|
"storybook": "10.2.0",
|
||||||
|
"vite-plugin-dts": "^4.5.4"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=19.2",
|
||||||
|
"react-dom": ">=19.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
frontend/packages/ui/src/index.ts
Normal file
1
frontend/packages/ui/src/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from './lib/example/Example';
|
||||||
5
frontend/packages/ui/src/lib/example/Example.module.css
Normal file
5
frontend/packages/ui/src/lib/example/Example.module.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.container {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
padding: 16px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
}
|
||||||
10
frontend/packages/ui/src/lib/example/Example.spec.tsx
Normal file
10
frontend/packages/ui/src/lib/example/Example.spec.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { render } from '@testing-library/react';
|
||||||
|
|
||||||
|
import Example from './Example';
|
||||||
|
|
||||||
|
describe('Example', () => {
|
||||||
|
it('should render successfully', () => {
|
||||||
|
const { baseElement } = render(<Example />);
|
||||||
|
expect(baseElement).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
12
frontend/packages/ui/src/lib/example/Example.stories.ts
Normal file
12
frontend/packages/ui/src/lib/example/Example.stories.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { Example } from './Example';
|
||||||
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||||
|
|
||||||
|
const meta = {
|
||||||
|
title: 'UI/Example',
|
||||||
|
component: Example,
|
||||||
|
} satisfies Meta<typeof Example>;
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof meta>;
|
||||||
|
|
||||||
|
export const Primary: Story = {};
|
||||||
21
frontend/packages/ui/src/lib/example/Example.tsx
Normal file
21
frontend/packages/ui/src/lib/example/Example.tsx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import styles from './Example.module.css';
|
||||||
|
|
||||||
|
export function Example() {
|
||||||
|
const [count, setCount] = useState(0);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.container}>
|
||||||
|
<h1>Example!</h1>
|
||||||
|
<div>
|
||||||
|
<h2>Counter: {count}</h2>
|
||||||
|
<button onClick={() => setCount(count + 1)}>Increment</button>
|
||||||
|
<button onClick={() => setCount(count - 1)}>Decrement</button>
|
||||||
|
<button onClick={() => setCount(0)}>Reset</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Example;
|
||||||
33
frontend/packages/ui/tsconfig.json
Normal file
33
frontend/packages/ui/tsconfig.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "ESNext",
|
||||||
|
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"verbatimModuleSyntax": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noUncheckedSideEffectImports": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"types": ["vite/client", "vitest"],
|
||||||
|
"baseUrl": "."
|
||||||
|
},
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.lib.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.storybook.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
37
frontend/packages/ui/tsconfig.lib.json
Normal file
37
frontend/packages/ui/tsconfig.lib.json
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": [
|
||||||
|
"node",
|
||||||
|
"vite/client"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"**/*.spec.ts",
|
||||||
|
"**/*.test.ts",
|
||||||
|
"**/*.spec.tsx",
|
||||||
|
"**/*.test.tsx",
|
||||||
|
"**/*.spec.js",
|
||||||
|
"**/*.test.js",
|
||||||
|
"**/*.spec.jsx",
|
||||||
|
"**/*.test.jsx",
|
||||||
|
"vite.config.ts",
|
||||||
|
"vite.config.mts",
|
||||||
|
"vitest.config.ts",
|
||||||
|
"vitest.config.mts",
|
||||||
|
"src/**/*.test.ts",
|
||||||
|
"src/**/*.spec.ts",
|
||||||
|
"src/**/*.test.tsx",
|
||||||
|
"src/**/*.spec.tsx",
|
||||||
|
"src/**/*.test.js",
|
||||||
|
"src/**/*.spec.js",
|
||||||
|
"src/**/*.test.jsx",
|
||||||
|
"src/**/*.spec.jsx",
|
||||||
|
"**/*.stories.ts",
|
||||||
|
"**/*.stories.js",
|
||||||
|
"**/*.stories.jsx",
|
||||||
|
"**/*.stories.tsx"
|
||||||
|
],
|
||||||
|
"include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
|
||||||
|
}
|
||||||
28
frontend/packages/ui/tsconfig.spec.json
Normal file
28
frontend/packages/ui/tsconfig.spec.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": [
|
||||||
|
"vitest/globals",
|
||||||
|
"vitest/importMeta",
|
||||||
|
"vite/client",
|
||||||
|
"node",
|
||||||
|
"vitest"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"vite.config.ts",
|
||||||
|
"vite.config.mts",
|
||||||
|
"vitest.config.ts",
|
||||||
|
"vitest.config.mts",
|
||||||
|
"src/**/*.test.ts",
|
||||||
|
"src/**/*.spec.ts",
|
||||||
|
"src/**/*.test.tsx",
|
||||||
|
"src/**/*.spec.tsx",
|
||||||
|
"src/**/*.test.js",
|
||||||
|
"src/**/*.spec.js",
|
||||||
|
"src/**/*.test.jsx",
|
||||||
|
"src/**/*.spec.jsx",
|
||||||
|
"src/**/*.d.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
28
frontend/packages/ui/tsconfig.storybook.json
Normal file
28
frontend/packages/ui/tsconfig.storybook.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"outDir": "",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "bundler"
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"src/**/*.spec.ts",
|
||||||
|
"src/**/*.test.ts",
|
||||||
|
"src/**/*.spec.js",
|
||||||
|
"src/**/*.test.js",
|
||||||
|
"src/**/*.spec.tsx",
|
||||||
|
"src/**/*.test.tsx",
|
||||||
|
"src/**/*.spec.jsx",
|
||||||
|
"src/**/*.test.js"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"src/**/*.stories.ts",
|
||||||
|
"src/**/*.stories.js",
|
||||||
|
"src/**/*.stories.jsx",
|
||||||
|
"src/**/*.stories.tsx",
|
||||||
|
"src/**/*.stories.mdx",
|
||||||
|
".storybook/*.js",
|
||||||
|
".storybook/*.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
66
frontend/packages/ui/vite.config.mts
Normal file
66
frontend/packages/ui/vite.config.mts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/// <reference types='vitest' />
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
import react from '@vitejs/plugin-react';
|
||||||
|
import dts from 'vite-plugin-dts';
|
||||||
|
import * as path from 'path';
|
||||||
|
import { copyFileSync } from 'node:fs';
|
||||||
|
|
||||||
|
const copyCssPlugin = () => ({
|
||||||
|
name: 'copy-css',
|
||||||
|
closeBundle: () => {
|
||||||
|
try {
|
||||||
|
copyFileSync(
|
||||||
|
'dist/index.css',
|
||||||
|
'../../resources/public/css/ui.css',
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Error copying css file', e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default defineConfig(() => ({
|
||||||
|
root: import.meta.dirname,
|
||||||
|
plugins: [
|
||||||
|
react({
|
||||||
|
babel: {
|
||||||
|
plugins: ['babel-plugin-react-compiler'],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
dts({
|
||||||
|
entryRoot: 'src',
|
||||||
|
tsconfigPath: path.join(import.meta.dirname, 'tsconfig.lib.json'),
|
||||||
|
pathsToAliases: false,
|
||||||
|
}),
|
||||||
|
copyCssPlugin(),
|
||||||
|
],
|
||||||
|
build: {
|
||||||
|
outDir: 'dist/',
|
||||||
|
emptyOutDir: true,
|
||||||
|
reportCompressedSize: true,
|
||||||
|
commonjsOptions: {
|
||||||
|
transformMixedEsModules: true,
|
||||||
|
},
|
||||||
|
lib: {
|
||||||
|
entry: 'src/index.ts',
|
||||||
|
name: 'ui',
|
||||||
|
fileName: 'index',
|
||||||
|
formats: ['es' as const],
|
||||||
|
},
|
||||||
|
rollupOptions: {
|
||||||
|
external: ['react', 'react-dom', 'react/jsx-runtime'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
test: {
|
||||||
|
name: 'ui',
|
||||||
|
watch: false,
|
||||||
|
globals: true,
|
||||||
|
environment: 'jsdom',
|
||||||
|
include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||||
|
reporters: ['default'],
|
||||||
|
coverage: {
|
||||||
|
reportsDirectory: '../../coverage/libs/ui',
|
||||||
|
provider: 'v8' as const,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
3855
frontend/pnpm-lock.yaml
generated
3855
frontend/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -8,3 +8,4 @@ packages:
|
|||||||
- "packages/mousetrap"
|
- "packages/mousetrap"
|
||||||
- "packages/tokenscript"
|
- "packages/tokenscript"
|
||||||
- "text-editor"
|
- "text-editor"
|
||||||
|
- "packages/ui"
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
<meta name="twitter:creator" content="@penpotapp">
|
<meta name="twitter:creator" content="@penpotapp">
|
||||||
<meta name="theme-color" content="#FFFFFF" media="(prefers-color-scheme: light)">
|
<meta name="theme-color" content="#FFFFFF" media="(prefers-color-scheme: light)">
|
||||||
<link id="theme" href="css/main.css?version={{& version_tag}}" rel="stylesheet" type="text/css" />
|
<link id="theme" href="css/main.css?version={{& version_tag}}" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="css/ui.css?ts={{& ts}}" rel="stylesheet" type="text/css" />
|
||||||
{{#isDebug}}
|
{{#isDebug}}
|
||||||
<link href="css/debug.css?version={{& version_tag}}" rel="stylesheet" type="text/css" />
|
<link href="css/debug.css?version={{& version_tag}}" rel="stylesheet" type="text/css" />
|
||||||
{{/isDebug}}
|
{{/isDebug}}
|
||||||
|
|||||||
@ -1,6 +1,20 @@
|
|||||||
import * as esbuild from "esbuild";
|
import * as esbuild from "esbuild";
|
||||||
import { readFile } from "node:fs/promises";
|
import { readFile } from "node:fs/promises";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* esbuild plugin to watch a directory recursively
|
||||||
|
*/
|
||||||
|
const watchExtraDirPlugin = {
|
||||||
|
name: 'watch-extra-dir',
|
||||||
|
setup(build) {
|
||||||
|
build.onLoad({ filter: /target\/index.js/, namespace: 'file' }, async (args) => {
|
||||||
|
return {
|
||||||
|
watchDirs: ["packages/ui/dist"],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const filter =
|
const filter =
|
||||||
/react-virtualized[/\\]dist[/\\]es[/\\]WindowScroller[/\\]utils[/\\]onScroll\.js$/;
|
/react-virtualized[/\\]dist[/\\]es[/\\]WindowScroller[/\\]utils[/\\]onScroll\.js$/;
|
||||||
|
|
||||||
@ -36,7 +50,7 @@ const config = {
|
|||||||
js: '"use strict";\nvar global = globalThis;',
|
js: '"use strict";\nvar global = globalThis;',
|
||||||
},
|
},
|
||||||
outfile: "resources/public/js/libs.js",
|
outfile: "resources/public/js/libs.js",
|
||||||
plugins: [fixReactVirtualized, rebuildNotify],
|
plugins: [fixReactVirtualized, rebuildNotify, watchExtraDirPlugin],
|
||||||
};
|
};
|
||||||
|
|
||||||
async function watch() {
|
async function watch() {
|
||||||
|
|||||||
@ -60,7 +60,6 @@
|
|||||||
"@swc/helpers": "0.5.18",
|
"@swc/helpers": "0.5.18",
|
||||||
"@types/feather-icons": "^4.29.4",
|
"@types/feather-icons": "^4.29.4",
|
||||||
"@types/node": "25.0.10",
|
"@types/node": "25.0.10",
|
||||||
"@types/uuid": "^11.0.0",
|
|
||||||
"@typescript-eslint/eslint-plugin": "8.53.1",
|
"@typescript-eslint/eslint-plugin": "8.53.1",
|
||||||
"@typescript-eslint/parser": "8.53.1",
|
"@typescript-eslint/parser": "8.53.1",
|
||||||
"@typescript-eslint/utils": "^8.53.1",
|
"@typescript-eslint/utils": "^8.53.1",
|
||||||
|
|||||||
11
plugins/pnpm-lock.yaml
generated
11
plugins/pnpm-lock.yaml
generated
@ -141,9 +141,6 @@ importers:
|
|||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 25.0.10
|
specifier: 25.0.10
|
||||||
version: 25.0.10
|
version: 25.0.10
|
||||||
'@types/uuid':
|
|
||||||
specifier: ^11.0.0
|
|
||||||
version: 11.0.0
|
|
||||||
'@typescript-eslint/eslint-plugin':
|
'@typescript-eslint/eslint-plugin':
|
||||||
specifier: 8.53.1
|
specifier: 8.53.1
|
||||||
version: 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
|
version: 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
|
||||||
@ -3371,10 +3368,6 @@ packages:
|
|||||||
'@types/unist@3.0.3':
|
'@types/unist@3.0.3':
|
||||||
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
||||||
|
|
||||||
'@types/uuid@11.0.0':
|
|
||||||
resolution: {integrity: sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA==}
|
|
||||||
deprecated: This is a stub types definition. uuid provides its own type definitions, so you do not need this installed.
|
|
||||||
|
|
||||||
'@types/whatwg-mimetype@3.0.2':
|
'@types/whatwg-mimetype@3.0.2':
|
||||||
resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
|
resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
|
||||||
|
|
||||||
@ -13438,10 +13431,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/unist@3.0.3': {}
|
'@types/unist@3.0.3': {}
|
||||||
|
|
||||||
'@types/uuid@11.0.0':
|
|
||||||
dependencies:
|
|
||||||
uuid: 13.0.0
|
|
||||||
|
|
||||||
'@types/whatwg-mimetype@3.0.2': {}
|
'@types/whatwg-mimetype@3.0.2': {}
|
||||||
|
|
||||||
'@types/ws@8.18.1':
|
'@types/ws@8.18.1':
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user