From 79d18103f57340c9de6fd5dacee397e17fda70e1 Mon Sep 17 00:00:00 2001 From: jserfeng <1114550440@qq.com> Date: Tue, 29 Aug 2023 18:10:08 +0800 Subject: [PATCH] feat(solution): support storybook --- .changeset/lovely-insects-sneeze.md | 7 + .../builder-rspack-provider/src/index.ts | 2 + packages/cli/core/src/config/index.ts | 1 + packages/cli/core/src/createCli.ts | 1 - packages/cli/core/src/index.ts | 5 +- packages/runtime/plugin-runtime/package.json | 15 +- packages/storybook/builder/.eslintrc.js | 2 +- packages/storybook/builder/package.json | 57 +- .../builder/src/addons/components/modern.tsx | 56 + .../storybook/builder/src/addons/constants.ts | 1 + .../storybook/builder/src/addons/index.ts | 8 + .../builder/src/addons/preset/preview.ts | 7 + packages/storybook/builder/src/addons/type.ts | 4 + .../builder/src/addons/withPluginRuntime.ts | 20 + packages/storybook/builder/src/build.ts | 54 +- packages/storybook/builder/src/core.ts | 216 +- .../builder/src/docgen/actualNameHandler.ts | 57 + .../storybook/builder/src/docgen/index.ts | 108 + .../storybook/builder/src/docgen/loader.ts | 25 + .../storybook/builder/src/docgen/process.ts | 44 + packages/storybook/builder/src/index.ts | 4 + .../storybook/builder/src/plugin-storybook.ts | 381 ++++ packages/storybook/builder/src/preset.ts | 39 + packages/storybook/builder/src/presets.ts | 5 - packages/storybook/builder/src/provider.ts | 38 - packages/storybook/builder/src/types.ts | 10 +- packages/storybook/builder/src/utils.ts | 134 ++ .../storybook/builder/templates/preview.ejs | 93 +- .../virtualModuleModernEntry.js.handlebars | 27 +- packages/storybook/builder/tsconfig.json | 5 +- packages/storybook/framework/.eslintrc.js | 7 + packages/storybook/framework/package.json | 11 +- packages/storybook/framework/src/index.ts | 1 + packages/storybook/framework/src/preset.ts | 53 +- packages/storybook/framework/tsconfig.json | 5 +- packages/toolkit/utils/package.json | 1 + pnpm-lock.yaml | 1972 ++++++++++++++++- 37 files changed, 3088 insertions(+), 388 deletions(-) create mode 100644 .changeset/lovely-insects-sneeze.md create mode 100644 packages/storybook/builder/src/addons/components/modern.tsx create mode 100644 packages/storybook/builder/src/addons/constants.ts create mode 100644 packages/storybook/builder/src/addons/index.ts create mode 100644 packages/storybook/builder/src/addons/preset/preview.ts create mode 100644 packages/storybook/builder/src/addons/type.ts create mode 100644 packages/storybook/builder/src/addons/withPluginRuntime.ts create mode 100644 packages/storybook/builder/src/docgen/actualNameHandler.ts create mode 100644 packages/storybook/builder/src/docgen/index.ts create mode 100644 packages/storybook/builder/src/docgen/loader.ts create mode 100644 packages/storybook/builder/src/docgen/process.ts create mode 100644 packages/storybook/builder/src/plugin-storybook.ts create mode 100644 packages/storybook/builder/src/preset.ts delete mode 100644 packages/storybook/builder/src/presets.ts delete mode 100644 packages/storybook/builder/src/provider.ts create mode 100644 packages/storybook/builder/src/utils.ts create mode 100644 packages/storybook/framework/.eslintrc.js diff --git a/.changeset/lovely-insects-sneeze.md b/.changeset/lovely-insects-sneeze.md new file mode 100644 index 000000000000..536827a55fe6 --- /dev/null +++ b/.changeset/lovely-insects-sneeze.md @@ -0,0 +1,7 @@ +--- +'@modern-js/storybook': patch +'@modern-js/storybook-builder': patch +--- + +feat: add storybook-framework +feat: 支持 storybook-framework diff --git a/packages/builder/builder-rspack-provider/src/index.ts b/packages/builder/builder-rspack-provider/src/index.ts index 785e5eabe2e4..ab0f4594cb81 100644 --- a/packages/builder/builder-rspack-provider/src/index.ts +++ b/packages/builder/builder-rspack-provider/src/index.ts @@ -9,6 +9,7 @@ export type { // Hook Callback Types ModifyRspackConfigFn, + ModifyRspackConfigUtils, // Plugin Types BuilderPluginAPI, @@ -17,4 +18,5 @@ export type { Rspack, Compiler as RspackCompiler, MultiCompiler as RspackMultiCompiler, + RspackConfig, } from './types'; diff --git a/packages/cli/core/src/config/index.ts b/packages/cli/core/src/config/index.ts index 6295cc9f9fbe..dd014e79a44a 100644 --- a/packages/cli/core/src/config/index.ts +++ b/packages/cli/core/src/config/index.ts @@ -1,3 +1,4 @@ export * from './createLoadedConfig'; export * from './createResolvedConfig'; export * from './createDefaultConfig'; +export { loadConfig } from './loadConfig'; diff --git a/packages/cli/core/src/createCli.ts b/packages/cli/core/src/createCli.ts index afdb67d26319..c0b807a6ba62 100644 --- a/packages/cli/core/src/createCli.ts +++ b/packages/cli/core/src/createCli.ts @@ -193,6 +193,5 @@ export const createCli = () => { test, runCommand, getPrevInitOptions: () => initOptions, - getRunner: () => hooksRunner, }; }; diff --git a/packages/cli/core/src/index.ts b/packages/cli/core/src/index.ts index 04f5306597c9..c97e05429dac 100644 --- a/packages/cli/core/src/index.ts +++ b/packages/cli/core/src/index.ts @@ -1,11 +1,10 @@ import { createCli } from './createCli'; export * from './types'; -export * from './config'; export * from './loadEnv'; -export * from './loadPlugins'; export * from '@modern-js/plugin'; -export { mergeConfig, initAppDir, checkIsDuplicationPlugin } from './utils'; +export { loadConfig } from './config'; +export { mergeConfig, initAppDir } from './utils'; export { manager, createPlugin, registerHook } from './manager'; export { AppContext, diff --git a/packages/runtime/plugin-runtime/package.json b/packages/runtime/plugin-runtime/package.json index 2e49cc8464fc..63b2d83be512 100644 --- a/packages/runtime/plugin-runtime/package.json +++ b/packages/runtime/plugin-runtime/package.json @@ -27,6 +27,7 @@ ".": { "types": "./dist/types/index.d.ts", "jsnext:source": "./src/index.ts", + "node": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, "./types": "./types/index.d.ts", @@ -36,16 +37,19 @@ "./loadable": { "types": "./dist/types/exports/loadable.d.ts", "jsnext:source": "./src/exports/loadable.ts", + "node": "./dist/cjs/exports/loadable.js", "default": "./dist/esm/exports/loadable.js" }, "./head": { "types": "./dist/types/exports/head.d.ts", "jsnext:source": "./src/exports/head.ts", + "node": "./dist/cjs/exports/head.js", "default": "./dist/esm/exports/head.js" }, "./styled": { "types": "./dist/types/exports/styled.d.ts", "jsnext:source": "./src/exports/styled.ts", + "node": "./dist/cjs/exports/styled.js", "default": "./dist/esm/exports/styled.js" }, "./server": { @@ -69,34 +73,39 @@ "./ssr": { "types": "./dist/types/ssr/index.d.ts", "jsnext:source": "./src/ssr/index.ts", - "node": "./dist/esm/ssr/index.node.js", + "node": "./dist/cjs/ssr/index.node.js", "worker": "./dist/esm/ssr/index.node.js", "default": "./dist/esm/ssr/index.js" }, "./model": { "types": "./types/model.d.ts", "jsnext:source": "./src/state/index.ts", + "node": "./dist/cjs/state/index.js", "default": "./dist/esm/state/index.js" }, "./cli": { "types": "./dist/types/cli/index.d.ts", "jsnext:source": "./src/cli/index.ts", - "default": "./dist/cjs/cli/index.js" + "node": "./dist/cjs/cli/index.js", + "default": "./dist/esm/cli/index.js" }, "./router": { "types": "./dist/types/router/index.d.ts", "jsnext:source": "./src/router/index.ts", + "node": "./dist/cjs/router/index.js", "default": "./dist/esm/router/index.js" }, "./router/server": { "types": "./dist/types/router/runtime/server.d.ts", "jsnext:source": "./src/router/runtime/server.ts", + "node": "./dist/cjs/router/runtime/server.js", "default": "./dist/esm/router/runtime/server.js" }, "./loadable-bundler-plugin": { "types": "./dist/types/ssr/cli/loadable-bundler-plugin.d.ts", "jsnext:source": "./src/ssr/cli/loadable-bundler-plugin.ts", - "default": "./dist/cjs/ssr/cli/loadable-bundler-plugin.js" + "node": "./dist/cjs/ssr/cli/loadable-bundler-plugin.js", + "default": "./dist/esm/ssr/cli/loadable-bundler-plugin.js" } }, "typesVersions": { diff --git a/packages/storybook/builder/.eslintrc.js b/packages/storybook/builder/.eslintrc.js index c9f48501e25a..af86dba11337 100644 --- a/packages/storybook/builder/.eslintrc.js +++ b/packages/storybook/builder/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { extends: ['@modern-js'], - ignorePatterns: ['compiled/', 'fixtures/**', 'tests/**', 'vitest.config.ts'], + ignorePatterns: ['compiled/', 'fixtures/**', 'tests/**', 'modern.config.ts'], parserOptions: { project: require.resolve('./tsconfig.json'), }, diff --git a/packages/storybook/builder/package.json b/packages/storybook/builder/package.json index 63948deb9575..130bf71648c8 100644 --- a/packages/storybook/builder/package.json +++ b/packages/storybook/builder/package.json @@ -12,7 +12,7 @@ "types": "./src/index.ts", "scripts": { "build": "tsc", - "dev": "tsc --watch", + "dev": "tsc --watch --incremental", "test": "vitest run" }, "exports": { @@ -21,11 +21,9 @@ "default": "./dist/index.js", "types": "./dist/index.d.ts" }, - "./preset": { - "default": "./dist/preset.js", - "jsnext:source": "./src/preset.ts", - "types": "./dist/preset.d.ts" - }, + "./preset": "./dist/preset.js", + "./templates/preview.ejs": "./templates/preview.ejs", + "./templates/virtualModuleModernEntry.js.handlebars": "./templates/virtualModuleModernEntry.js.handlebars", "./package.json": "./package.json" }, "engines": { @@ -36,19 +34,56 @@ "license": "MIT", "dependencies": { "@modern-js/builder": "workspace:*", - "@modern-js/builder-rspack-provider": "workspace:*", "@modern-js/builder-shared": "workspace:*", - "@modern-js/builder-webpack-provider": "workspace:*", "@modern-js/core": "workspace:*", + "@modern-js/runtime": "workspace:*", "@modern-js/utils": "workspace:*", + "@rspack/dev-client": "0.2.12", + "@storybook/addons": "^6.3.7", + "@storybook/api": "^7.4.0", + "@storybook/components": "^7.4.0", + "@storybook/core-common": "^7.4.0", + "@storybook/csf-plugin": "^7.4.0", + "@storybook/docs-tools": "^7.4.0", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "^7.4.0", + "@storybook/mdx1-csf": "^1.0.0", + "@storybook/mdx2-csf": "^1.1.0", + "@storybook/preview": "^7.4.0", + "@storybook/react-docgen-typescript-plugin": "^1.0.1", + "@storybook/router": "^7.4.0", + "@storybook/theming": "^7.4.0", "@types/webpack-hot-middleware": "^2.25.6", + "ast-types": "^0.14.2", + "babel-plugin-react-docgen": "^4.2.1", "glob-promise": "^6.0.3", - "@storybook/core-common": "7.3.2", - "webpack-dev-middleware": "6.0.1", + "react-docgen": "6.0.0-alpha.3", + "remark-external-links": "^9.0.1", + "remark-slug": "^7.0.1", + "tinypool": "^0.8.0", + "webpack-dev-middleware": "6.1.1", "webpack-hot-middleware": "^2.25.4" }, "devDependencies": { - "@storybook/types": "^7.3.2" + "@storybook/types": "^7.4.0", + "@types/babel__core": "^7.20.1", + "@types/express": "^4.17.13", + "@scripts/build": "workspace:*", + "@modern-js/builder-rspack-provider": "workspace:*", + "@modern-js/builder-webpack-provider": "workspace:*" + }, + "peerDependencies": { + "@modern-js/builder-rspack-provider": "workspace:*", + "@modern-js/builder-webpack-provider": "workspace:*", + "react": "*" + }, + "peerDependenciesMeta": { + "@modern-js/builder-rspack-provider": { + "optional": true + }, + "@modern-js/builder-webpack-provider": { + "optional": true + } }, "publishConfig": { "registry": "https://registry.npmjs.org/", diff --git a/packages/storybook/builder/src/addons/components/modern.tsx b/packages/storybook/builder/src/addons/components/modern.tsx new file mode 100644 index 000000000000..b397b515a842 --- /dev/null +++ b/packages/storybook/builder/src/addons/components/modern.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { createApp } from '@modern-js/runtime'; +import type { Plugin, RouterConfig } from '@modern-js/runtime'; +import router from '@modern-js/runtime/router'; +import state from '@modern-js/runtime/model'; +import type { StoryFn as StoryFunction } from '@storybook/addons'; +import type { IConfig } from '../type'; + +export const WrapProviders = ( + storyFn: StoryFunction, + config: IConfig, +) => { + const App = createApp({ + plugins: resolvePlugins(config.modernConfigRuntime), + })(storyFn); + + return ; +}; + +const allowedRuntimeAPI = { + router: 'router', + state: 'state', +}; +const allowedRuntimeAPIValues = Object.values(allowedRuntimeAPI); + +export const resolvePlugins = (runtime: IConfig['modernConfigRuntime']) => { + const plugins: Plugin[] = []; + + if (!runtime) { + return plugins; + } + + Object.keys(runtime).forEach(api => { + if (allowedRuntimeAPIValues.includes(api)) { + if (api === allowedRuntimeAPI.state) { + if (typeof runtime.state === 'boolean') { + if (runtime.state) { + plugins.push(state({})); + } + } else if (typeof runtime.state === 'object') { + plugins.push(state(runtime.state)); + } + } else if (api === allowedRuntimeAPI.router) { + // TODO: React Router v6 is not supported yet + plugins.push( + router({ + ...{ serverBase: ['/'] }, + ...(runtime.router as RouterConfig), + }), + ); + } + } + }); + + return plugins; +}; diff --git a/packages/storybook/builder/src/addons/constants.ts b/packages/storybook/builder/src/addons/constants.ts new file mode 100644 index 000000000000..aee6edbe03ae --- /dev/null +++ b/packages/storybook/builder/src/addons/constants.ts @@ -0,0 +1 @@ +export const ADDON_ID = 'storybook/modern-runtime'; diff --git a/packages/storybook/builder/src/addons/index.ts b/packages/storybook/builder/src/addons/index.ts new file mode 100644 index 000000000000..283791ab0178 --- /dev/null +++ b/packages/storybook/builder/src/addons/index.ts @@ -0,0 +1,8 @@ +declare const module: any; + +if (module?.hot?.decline) { + module.hot.decline(); +} + +// make it work with --isolatedModules +export default {}; diff --git a/packages/storybook/builder/src/addons/preset/preview.ts b/packages/storybook/builder/src/addons/preset/preview.ts new file mode 100644 index 000000000000..818ec5d8b079 --- /dev/null +++ b/packages/storybook/builder/src/addons/preset/preview.ts @@ -0,0 +1,7 @@ +// import { withPluginRuntime } from '../withPluginRuntime'; + +// FIXME: @modern-js/runtime now is ESM only, but this package +// currently focus on CommonJS, so it cannot import @modern-js/runtime +// directly. +// export const decorators = [withPluginRuntime]; +export const decorators = []; diff --git a/packages/storybook/builder/src/addons/type.ts b/packages/storybook/builder/src/addons/type.ts new file mode 100644 index 000000000000..f49143cd5ef9 --- /dev/null +++ b/packages/storybook/builder/src/addons/type.ts @@ -0,0 +1,4 @@ +export interface IConfig { + modernConfigRuntime: any; + modernConfigDesignToken: any; +} diff --git a/packages/storybook/builder/src/addons/withPluginRuntime.ts b/packages/storybook/builder/src/addons/withPluginRuntime.ts new file mode 100644 index 000000000000..480a11bc3f3a --- /dev/null +++ b/packages/storybook/builder/src/addons/withPluginRuntime.ts @@ -0,0 +1,20 @@ +import { type StoryFn as StoryFunction, useParameter } from '@storybook/addons'; +import { WrapProviders } from './components/modern'; +import type { IConfig } from './type'; + +export const withPluginRuntime = ( + storyFn: StoryFunction, + // context: StoryContext +) => { + const modernConfigRuntime = useParameter( + 'modernConfigRuntime', + ); + const modernConfigDesignToken = useParameter< + IConfig['modernConfigDesignToken'] + >('modernConfigDesignToken'); + + return WrapProviders(storyFn, { + modernConfigRuntime: modernConfigRuntime || {}, + modernConfigDesignToken, + }); +}; diff --git a/packages/storybook/builder/src/build.ts b/packages/storybook/builder/src/build.ts index 3f3103880e8b..bedc024af07b 100644 --- a/packages/storybook/builder/src/build.ts +++ b/packages/storybook/builder/src/build.ts @@ -1,37 +1,30 @@ import { dirname, join, parse } from 'path'; import webpackDevMiddleware from 'webpack-dev-middleware'; import webpackHotMiddleware from 'webpack-hot-middleware'; - +import express from 'express'; import type { Builder as RawStorybookBuilder, Stats } from '@storybook/types'; import { fs } from '@modern-js/utils'; -import { createCompiler } from './provider'; -import type { BuilderOptions } from './types'; +import type { FrameworkOptions } from './types'; +import { getCompiler } from './core'; -export type StorybookBuilder = RawStorybookBuilder; +export type StorybookBuilder = RawStorybookBuilder; export const getConfig: StorybookBuilder['getConfig'] = async options => { const { presets } = options; - const frameworkOptions = await presets.apply('frameworkOptions'); + const frameworkOptions: { + name: string; + options: FrameworkOptions; + } = await presets.apply('frameworkOptions'); - return presets.apply( - 'modern', - {}, - { - ...options, - frameworkOptions, - }, - ) as any; + return frameworkOptions?.options || {}; }; // export `build` is used by storybook core export const build: StorybookBuilder['build'] = async ({ options }) => { const config = await getConfig(options); - const compiler = await createCompiler( - config.bundler || 'webpack', - config.builderConfig, - ); + const compiler = await getCompiler(process.cwd(), config, options); const previewResolvedDir = dirname( require.resolve('@storybook/preview/package.json'), @@ -70,18 +63,31 @@ export const start: StorybookBuilder['start'] = async ({ router, startTime, }) => { - const { bundler, builderConfig } = await getConfig(options); + const config = await getConfig(options); - const compiler = await createCompiler(bundler || 'webpack', builderConfig); + const compiler = await getCompiler(process.cwd(), config, options); const middleware = webpackDevMiddleware(compiler, { writeToDisk: // @ts-expect-error - builderConfig.tools?.devServer?.devMiddleware?.writeToDisk || true, + config.builderConfig?.tools?.devServer?.devMiddleware?.writeToDisk || + true, }); - router.use(middleware); + + const previewResolvedDir = dirname( + require.resolve('@storybook/preview/package.json'), + ); + const previewDirOrigin = join(previewResolvedDir, 'dist'); + + router.use( + `/sb-preview`, + express.static(previewDirOrigin, { immutable: true, maxAge: '5m' }), + ); + router.use(webpackHotMiddleware(compiler, { log: false })); + router.use(middleware); + const stats: Stats = await new Promise(resolve => { // @ts-expect-error middleware.waitUntilValid(resolve); @@ -104,7 +110,5 @@ export const start: StorybookBuilder['start'] = async ({ }; }; -export const bail = async () => { - // TODO - console.log('todo'); -}; +// eslint-disable-next-line @typescript-eslint/no-empty-function +export const bail = async () => {}; diff --git a/packages/storybook/builder/src/core.ts b/packages/storybook/builder/src/core.ts index 65ddfcedff3a..c6230c5161e2 100644 --- a/packages/storybook/builder/src/core.ts +++ b/packages/storybook/builder/src/core.ts @@ -1,198 +1,50 @@ -import path, { join, resolve } from 'path'; -import { createBuilder } from '@modern-js/builder'; -import { createLoadedConfig } from '@modern-js/core'; -import { builderWebpackProvider } from '@modern-js/builder-webpack-provider'; -import { lodash, slash, fs } from '@modern-js/utils'; -import { SharedBuilderConfig, logger } from '@modern-js/builder-shared'; -import { builderRspackProvider } from '@modern-js/builder-rspack-provider'; -import type { - Options, - PreviewAnnotation, - StoriesEntry, -} from '@storybook/types'; -import { - normalizeStories, - handlebars, - readTemplate, - loadPreviewOrConfigFile, -} from '@storybook/core-common'; -import { promise as glob } from 'glob-promise'; -import { - AllBuilderConfig, - FrameworkOptions, - RspackBuilderConfig, - WebpackBuilderConfig, -} from './types'; - -const VIRTUAL_MODULE_BASE = '.MODERN_STORYBOOK'; -const STORIES_ENTRY = 'STORIES_ENTRY'; -const STORIES_FILENAME = 'storybook-stories.js'; -const STORYBOOK_CONFIG_ENTRY = 'storybook-config-entry.js'; - -export const getCompiler = async ( +import { createBuilder, mergeBuilderConfig } from '@modern-js/builder'; +import { loadConfig } from '@modern-js/core'; +import type { Options } from '@storybook/types'; +import type { Compiler } from 'webpack-dev-middleware'; +import { BuilderConfig, FrameworkOptions } from './types'; +import { getProvider, runWithErrorMsg } from './utils'; +import { pluginStorybook } from './plugin-storybook'; + +export async function getCompiler( cwd: string, - stories: StoriesEntry[], frameworkConfig: FrameworkOptions, options: Options, - configPath?: string, -) => { +): Promise { const bundler = frameworkConfig.bundler || 'webpack'; - const { config: loadedConfig } = await createLoadedConfig(cwd, configPath); - - const userConfig = lodash.merge( - {}, - loadedConfig, - frameworkConfig.builderConfig, - ) as SharedBuilderConfig; - - const builder = await createBuilder(getProvider(bundler, userConfig), { - cwd, - target: 'web', - }); - - builder.createCompiler(); -}; - -function getProvider( - bundler: 'webpack' | 'rspack', - builderConfig: AllBuilderConfig, -) { - if (bundler === 'webpack') { - return builderWebpackProvider({ - builderConfig: builderConfig as WebpackBuilderConfig, - }); - } else { - return builderRspackProvider({ - builderConfig: builderConfig as RspackBuilderConfig, - }); - } -} - -async function createStorybookModules(cwd: string, options: Options) { - const virtualModuleMappings: Record = {}; - const { presets } = options; - const storiesEntry = await createStoriesEntry(cwd, options); - virtualModuleMappings[STORIES_ENTRY] = storiesEntry; + const entries = await presets.apply('entries', []); + const otherBuilderConfig = + (await presets.apply('modern')) || {}; - const configEntryPath = resolve(join(cwd, STORYBOOK_CONFIG_ENTRY)); - const previewAnnotations = [ - ...( - await presets.apply( - 'previewAnnotations', - [], - options, - ) - ).map(entry => { - // If entry is an object, use the absolute import specifier. - // This is to maintain back-compat with community addons that bundle other addons - // and package managers that "hide" sub dependencies (e.g. pnpm / yarn pnp) - // The vite builder uses the bare import specifier. - if (typeof entry === 'object') { - return entry.absolute; - } - return path.resolve(cwd, slash(entry)); - }), - loadPreviewOrConfigFile(options), - ].filter(Boolean); - virtualModuleMappings[configEntryPath] = handlebars( - await readTemplate( - require.resolve( - '@modern-js/storybook-builder/templates/virtualModuleModernEntry.js.handlebars', - ), - ), - { - storiesFilename: STORIES_FILENAME, - previewAnnotations, - }, + const res = await runWithErrorMsg( + () => loadConfig(cwd, frameworkConfig.configPath || 'modern.config.ts'), + 'Failed to load config', ); - return virtualModule(cwd, virtualModuleMappings); -} - -async function createStoriesEntry(cwd: string, options: Options) { - const matchers: StoriesEntry[] = await options.presets.apply( - 'stories', - [], - options, - ); + const loadedConfig = (res ? res.config : {}) as BuilderConfig; + const builderConfig = mergeBuilderConfig(otherBuilderConfig, loadedConfig); - const stories = ( - await Promise.all( - normalizeStories(matchers, { - configDir: options.configDir, - workingDir: options.configDir, - }).map(({ directory, files }) => { - const pattern = path.join(directory, files); - const absolutePattern = path.isAbsolute(pattern) - ? pattern - : path.join(options.configDir, pattern); + const provider = await getProvider(bundler, builderConfig); - return glob(slash(absolutePattern), { follow: true }); - }), - ) - ).reduce((carry, stories) => carry.concat(stories), []); - - return await toImportFn(cwd, stories); -} - -async function toImportFn(cwd: string, stories: string[]) { - const objectEntries = stories.map(file => { - const ext = path.extname(file); - const relativePath = path.relative(cwd, file); - if (!['.js', '.jsx', '.ts', '.tsx', '.mdx'].includes(ext)) { - logger.warn( - `Cannot process ${ext} file with storyStoreV7: ${relativePath}`, - ); - } + if (!provider) { + throw new Error(`@modern-js/builder-${bundler}-provider not found `); + } - return ` '${toImportPath(relativePath)}': async () => import('${file}')`; + const builder = await createBuilder(provider, { + cwd, + target: 'web', + framework: 'modern.js storybook', + entry: { + main: entries, + }, }); - return ` - const importers = { - ${objectEntries.join(',\n')} - }; - - export async function importFn(path) { - return importers[path](); - } - `; -} - -function toImportPath(relativePath: string) { - return relativePath.startsWith('../') ? relativePath : `./${relativePath}`; -} - -// use this instead of virtualModuleWebpackPlugin for rspack compatibility -async function virtualModule( - cwd: string, - virtualModuleMap: Record, -): Promise<{ - alias: Record; - writeModule: (p: string, content: string) => void; -}> { - const tempDir = path.join(cwd, 'node_modules', VIRTUAL_MODULE_BASE); - fs.ensureDirSync(tempDir); - const alias: Record = {}; - - await Promise.all( - Reflect.ownKeys(virtualModuleMap).map(k => { - const virtualPath = k as string; - const relativePath = path.relative(cwd, virtualPath); - const realPath = path.join(tempDir, relativePath); - alias[virtualPath] = realPath; - return fs.writeFile(realPath, virtualModuleMap[virtualPath]); - }), - ); + builder.addPlugins([ + pluginStorybook(cwd, options), + ...(loadedConfig.builderPlugins || []), + ]); - return { - writeModule(virtualPath: string, content: string) { - const relativePath = path.relative(cwd, virtualPath); - const realPath = path.join(tempDir, relativePath); - fs.writeFileSync(realPath, content); - }, - alias, - }; + return builder.createCompiler() as Promise; } diff --git a/packages/storybook/builder/src/docgen/actualNameHandler.ts b/packages/storybook/builder/src/docgen/actualNameHandler.ts new file mode 100644 index 000000000000..a30acbaf96a0 --- /dev/null +++ b/packages/storybook/builder/src/docgen/actualNameHandler.ts @@ -0,0 +1,57 @@ +/** + * This is heavily based on the react-docgen `displayNameHandler` + * (https://github.com/reactjs/react-docgen/blob/26c90c0dd105bf83499a83826f2a6ff7a724620d/src/handlers/displayNameHandler.ts) + * but instead defines an `actualName` property on the generated docs that is taken first from the component's actual name. + * This addresses an issue where the name that the generated docs are stored under is incorrectly named with the `displayName` + * and not the component's actual name. + * + * This is inspired by `actualNameHandler` from https://github.com/storybookjs/babel-plugin-react-docgen, but is modified + * directly from displayNameHandler, using the same approach as babel-plugin-react-docgen. + */ + +import { namedTypes as t } from 'ast-types'; +import type { NodePath } from 'ast-types/lib/node-path'; +import { getNameOrValue, isReactForwardRefCall } from 'react-docgen/dist/utils'; +import type { Importer } from 'react-docgen/dist/parse'; +import type Documentation from 'react-docgen/dist/Documentation'; + +export default function actualNameHandler( + documentation: Documentation, + path: NodePath, + importer: Importer, +): void { + if ( + t.ClassDeclaration.check(path.node) || + t.FunctionDeclaration.check(path.node) + ) { + documentation.set('actualName', getNameOrValue(path.get('id'))); + } else if ( + t.ArrowFunctionExpression.check(path.node) || + t.FunctionExpression.check(path.node) || + isReactForwardRefCall(path, importer) + ) { + let currentPath = path; + while (currentPath.parent) { + if (t.VariableDeclarator.check(currentPath.parent.node)) { + documentation.set( + 'actualName', + getNameOrValue(currentPath.parent.get('id')), + ); + return; + } + if (t.AssignmentExpression.check(currentPath.parent.node)) { + const leftPath = currentPath.parent.get('left'); + if ( + t.Identifier.check(leftPath.node) || + t.Literal.check(leftPath.node) + ) { + documentation.set('actualName', getNameOrValue(leftPath)); + return; + } + } + currentPath = currentPath.parent; + } + // Could not find an actual name + documentation.set('actualName', ''); + } +} diff --git a/packages/storybook/builder/src/docgen/index.ts b/packages/storybook/builder/src/docgen/index.ts new file mode 100644 index 000000000000..80b5246a9b01 --- /dev/null +++ b/packages/storybook/builder/src/docgen/index.ts @@ -0,0 +1,108 @@ +import type { Options } from '@storybook/types'; +import { CHAIN_ID, logger } from '@modern-js/utils'; +import { RspackConfig } from '@modern-js/builder-rspack-provider'; +import { WebpackChain } from '@modern-js/builder-webpack-provider'; + +export type DocgenOptions = { + reactDocgen?: 'react-docgen' | 'react-docgen-typescript' | false; + reactDocgenTypescriptOptions?: any; +}; + +export async function applyDocgenWebpack( + chain: WebpackChain, + options: Options, +) { + const typescriptOptions: DocgenOptions = await options.presets.apply( + 'typescript', + {}, + ); + + const { reactDocgen, reactDocgenTypescriptOptions } = typescriptOptions || {}; + + if (typeof reactDocgen !== 'string') { + return; + } + + if (reactDocgen === 'react-docgen-typescript') { + const { ReactDocgenTypeScriptPlugin } = await import( + '@storybook/react-docgen-typescript-plugin' + ); + chain.plugin('Storybook-docgen').use(ReactDocgenTypeScriptPlugin, [ + { + ...reactDocgenTypescriptOptions, + savePropValueAsString: true, + }, + ]); + } + + const babelUse = chain.module.rule(CHAIN_ID.RULE.JS).use(CHAIN_ID.USE.BABEL); + const babelOptions = babelUse.get('options'); + + // uses babel + if (babelOptions) { + babelUse.set('options', { + ...babelOptions, + overrides: [ + ...(babelOptions.overrides || []), + { + test: + reactDocgen === 'react-docgen' + ? /\.(cjs|mjs|tsx?|jsx?)$/ + : /\.(cjs|mjs|jsx?)$/, + plugins: [[require.resolve('babel-plugin-react-docgen')]], + }, + ], + }); + return; + } + + // uses SWC or other transpilers + chain.module + .rule(CHAIN_ID.RULE.JS) + .use('docgen') + .loader(require.resolve('./loader')) + .options({ + resolveOptions: chain.toConfig().resolve, + }); + + chain.module + .rule(CHAIN_ID.RULE.TS) + .use('docgen') + .loader(require.resolve('./loader')) + .options({ + resolveOptions: chain.toConfig().resolve, + }); +} + +export async function applyDocgenRspack( + config: RspackConfig, + options: Options, +) { + const typescriptOptions: { reactDocgen?: 'react-docgen' } = + await options.presets.apply('typescript', {}); + + const { reactDocgen } = typescriptOptions || {}; + + if (reactDocgen !== 'react-docgen') { + if (reactDocgen !== false && reactDocgen !== undefined) { + logger.warn( + `Rspack currently only support 'typescript.reactDocgen: react-docgen' for auto docs generation, but you specified ${reactDocgen}`, + ); + } + return; + } + + // For rspack, just add a new rule + config.module ??= {}; + config.module.rules ??= []; + config.module.rules.push({ + test: /\.(tsx?|jsx?)$/, + exclude: /node_modules/, + use: { + loader: require.resolve('./loader'), + options: { + resolveOptions: config.resolve, + }, + }, + }); +} diff --git a/packages/storybook/builder/src/docgen/loader.ts b/packages/storybook/builder/src/docgen/loader.ts new file mode 100644 index 000000000000..07601452c120 --- /dev/null +++ b/packages/storybook/builder/src/docgen/loader.ts @@ -0,0 +1,25 @@ +async function docLoader(this: any, source: string, map: string, data: any) { + const callback = this.async(); + + const { Tinypool } = await import('tinypool'); + + const tinyPool = new Tinypool({ + filename: require.resolve('./process'), + }); + + const result: [string, string] | null = await tinyPool.run({ + source, + map, + filename: this.resourcePath, + data, + }); + + if (result) { + const [docgen, outputMap] = result; + callback(null, `${source}\n${docgen}`, outputMap, data); + } else { + callback(null, source, map, data); + } +} + +export default docLoader; diff --git a/packages/storybook/builder/src/docgen/process.ts b/packages/storybook/builder/src/docgen/process.ts new file mode 100644 index 000000000000..7679bc601221 --- /dev/null +++ b/packages/storybook/builder/src/docgen/process.ts @@ -0,0 +1,44 @@ +import { importers, resolver, handlers, parse } from 'react-docgen'; +import { DocumentationObject } from 'react-docgen/dist/Documentation'; +import actualNameHandler from './actualNameHandler'; + +const defaultHandlers = Object.values(handlers).map(handler => handler); +const importer = importers.makeFsImporter(); + +export default ({ + source, + map, + filename, +}: { + source: string; + map: string; + filename: string; +}) => { + try { + const results = parse( + source, + resolver.findAllExportedComponentDefinitions, + [...defaultHandlers, actualNameHandler], + { + filename, + importer, + }, + ) as DocumentationObject[]; + + const docgen = results + .map(result => { + // @ts-expect-error we know actualName is added by actualNameHandler, so it exist + const { actualName, ...docgenInfo } = result; + if (actualName) { + return `${actualName}.__docgenInfo=${JSON.stringify(docgenInfo)}`; + } + return ''; + }) + .filter(Boolean) + .join(';'); + + return [docgen, map]; + } catch (e) { + return null; + } +}; diff --git a/packages/storybook/builder/src/index.ts b/packages/storybook/builder/src/index.ts index 035dcc42cafb..f5ad128a124a 100644 --- a/packages/storybook/builder/src/index.ts +++ b/packages/storybook/builder/src/index.ts @@ -1 +1,5 @@ +import { join } from 'path'; + export { start, build, bail } from './build'; + +export const corePresets = [join(__dirname, './preset.js')]; diff --git a/packages/storybook/builder/src/plugin-storybook.ts b/packages/storybook/builder/src/plugin-storybook.ts new file mode 100644 index 000000000000..df1969a2e4bb --- /dev/null +++ b/packages/storybook/builder/src/plugin-storybook.ts @@ -0,0 +1,381 @@ +/* eslint-disable max-lines */ +import { isAbsolute, join, resolve } from 'path'; +import { slash } from '@modern-js/utils'; +import { + BuilderPlugin, + SharedBuilderConfig, + mergeBuilderConfig, +} from '@modern-js/builder-shared'; +import { CompileOptions } from '@storybook/mdx2-csf'; +import type { + CoreConfig, + DocsOptions, + Options, + PreviewAnnotation, + StoriesEntry, +} from '@storybook/types'; +import { + normalizeStories, + stringifyProcessEnvs, + handlebars, + readTemplate, + loadPreviewOrConfigFile, +} from '@storybook/core-common'; +import globals from '@storybook/preview/globals'; +import { promise as glob } from 'glob-promise'; + +import type { + BuilderPluginAPI as WebpackAPI, + WebpackConfig, +} from '@modern-js/builder-webpack-provider'; +import type { + BuilderPluginAPI as RspackAPI, + RspackConfig, +} from '@modern-js/builder-rspack-provider'; +import { unplugin as csfPlugin } from '@storybook/csf-plugin'; +import { AllBuilderConfig, FrameworkOptions } from './types'; +import { toImportFn, virtualModule, maybeGetAbsolutePath } from './utils'; +import { applyDocgenRspack, applyDocgenWebpack } from './docgen'; + +const STORIES_FILENAME = 'storybook-stories.js'; +const STORYBOOK_CONFIG_ENTRY = 'storybook-config-entry.js'; + +export const pluginStorybook: ( + cwd: string, + options: Options, +) => BuilderPlugin = (cwd, options) => { + return { + name: 'builder-plugin-storybook', + async setup(api) { + api.modifyBuilderConfig(async builderConfig => { + await applyDefines(builderConfig, options); + await applyHTML(builderConfig, options); + await applyAlias(cwd, options, builderConfig); + await applyReact(builderConfig, options); + applyExternals(builderConfig); + }); + + const modifyConfig = async (config: WebpackConfig | RspackConfig) => { + config.resolve ??= {}; + config.resolve.conditionNames = [ + 'require', + 'node', + ...(config.resolve.conditionNames || []), + ]; + config.resolve.fullySpecified = false; + + await applyMdxLoader(config, options); + await applyCsfPlugin(config, options); + }; + + if ('modifyWebpackConfig' in api) { + api.modifyWebpackConfig(modifyConfig); + api.modifyWebpackChain(async chain => { + await applyDocgenWebpack(chain, options); + }); + } else if ('modifyRspackConfig' in api) { + api.modifyRspackConfig(async config => { + await modifyConfig(config); + await applyDocgenRspack(config, options); + }); + } + }, + }; +}; + +async function applyCsfPlugin( + config: WebpackConfig | RspackConfig, + options: Options, +) { + const { presets } = options; + + const addons = await presets.apply('addons', []); + const { + options: { bundler }, + } = await presets.apply<{ + name: string; + options: FrameworkOptions; + }>('frameworkOptions'); + + const docsOptions = + // @ts-expect-error - not sure what type to use here + addons.find(a => [a, a.name].includes('@storybook/addon-docs'))?.options ?? + {}; + + config.plugins ??= []; + config.plugins.push( + bundler === 'rspack' + ? csfPlugin.rspack(docsOptions) + : (csfPlugin.webpack(docsOptions) as any), + ); +} + +async function applyAlias( + cwd: string, + options: Options, + builderConfig: SharedBuilderConfig, +) { + const { alias } = await createStorybookModules(cwd, options); + + const managerAPIPath = maybeGetAbsolutePath(`@storybook/manager-api`); + const componentsPath = maybeGetAbsolutePath(`@storybook/components`); + const globalPath = maybeGetAbsolutePath(`@storybook/global`); + const routerPath = maybeGetAbsolutePath(`@storybook/router`); + const themingPath = maybeGetAbsolutePath(`@storybook/theming`); + + const storybookPaths: Record = { + ...(managerAPIPath + ? { + // deprecated, remove in 8.0 + [`@storybook/api`]: managerAPIPath, + [`@storybook/manager-api`]: managerAPIPath, + } + : {}), + ...(componentsPath + ? { + [`@storybook/components`]: componentsPath, + } + : {}), + ...(globalPath ? { [`@storybook/global`]: globalPath } : {}), + ...(routerPath ? { [`@storybook/router`]: routerPath } : {}), + ...(themingPath ? { [`@storybook/theming`]: themingPath } : {}), + }; + + builderConfig.source ??= {}; + builderConfig.source.alias = { + ...builderConfig.source.alias, + ...storybookPaths, + ...alias, + }; +} + +async function applyDefines(builderConfig: AllBuilderConfig, options: Options) { + const { presets } = options; + const envs = await presets.apply>('env'); + + builderConfig.source ??= {}; + builderConfig.source.define = { + ...builderConfig.source.define, + ...stringifyProcessEnvs(envs), + 'process.env': JSON.stringify(envs), + NODE_ENV: JSON.stringify(process.env.NODE_ENV), + }; +} + +async function applyHTML(builderConfig: AllBuilderConfig, options: Options) { + const { + presets, + packageJson, + configType, + features, + previewUrl, + serverChannelUrl, + } = options; + + const [ + coreOptions, + frameworkOptions, + logLevel, + headHtmlSnippet, + bodyHtmlSnippet, + template, + docsOptions, + ] = await Promise.all([ + presets.apply('core'), + presets.apply('frameworkOptions'), + presets.apply('logLevel', undefined), + presets.apply('previewHead'), + presets.apply('previewBody'), + presets.apply('previewMainTemplate'), + presets.apply('docs'), + ]); + + builderConfig.tools ??= {}; + builderConfig.tools.htmlPlugin = { + ...builderConfig.tools.htmlPlugin, + template, + filename: 'iframe.html', + templateParameters: { + ...(builderConfig.tools.htmlPlugin + ? // @ts-expect-error + builderConfig.tools.htmlPlugin.templateParameters || {} + : {}), + version: packageJson.version || '', + globals: { + CONFIG_TYPE: configType, + LOGLEVEL: logLevel, + FRAMEWORK_OPTIONS: frameworkOptions, + CHANNEL_OPTIONS: coreOptions.channelOptions, + FEATURES: features, + PREVIEW_URL: previewUrl, + DOCS_OPTIONS: docsOptions, + SERVER_CHANNEL_URL: serverChannelUrl, + }, + headHtmlSnippet, + bodyHtmlSnippet, + }, + inject: false, + }; +} + +async function applyMdxLoader( + config: { module?: { rules?: any[] } }, + options: Options & { + mdxPluginOptions?: CompileOptions; + }, +) { + const { presets, mdxPluginOptions } = options; + + const remarkExternalLinks = await import('remark-external-links'); + const remarkSlug = await import('remark-slug'); + + const mdxLoaderOptions = await presets.apply('mdxLoaderOptions', { + skipCsf: true, + mdxCompileOptions: { + providerImportSource: '@storybook/addon-docs/mdx-react-shim', + ...mdxPluginOptions?.mdxCompileOptions, + remarkPlugins: [ + remarkSlug, + remarkExternalLinks, + ...(mdxPluginOptions?.mdxCompileOptions?.remarkPlugins ?? []), + ], + }, + }); + const mdxLoader = options.features?.legacyMdx1 + ? require.resolve('@storybook/mdx1-csf/loader') + : require.resolve('@storybook/mdx2-csf/loader'); + + config.module ??= {}; + config.module.rules ??= []; + config.module.rules.push( + { + test: /(stories|story)\.mdx$/, + use: [ + { + loader: mdxLoader, + options: { + ...mdxLoaderOptions, + skipCsf: false, + }, + }, + ], + }, + { + test: /\.mdx$/, + exclude: /(stories|story)\.mdx$/, + use: [ + { + loader: mdxLoader, + options: mdxLoaderOptions, + }, + ], + }, + ); +} + +function applyExternals(builderConfig: AllBuilderConfig) { + const config = mergeBuilderConfig(builderConfig, { + output: { + externals: globals, + }, + }); + builderConfig.output = config.output; +} + +function getStoriesEntryPath(cwd: string) { + return resolve(join(cwd, STORIES_FILENAME)); +} + +function getStoriesConfigPath(cwd: string) { + return resolve(join(cwd, STORYBOOK_CONFIG_ENTRY)); +} + +async function createStorybookModules(cwd: string, options: Options) { + const virtualModuleMappings: Record = {}; + + const { presets } = options; + const storiesEntry = await createStoriesEntry(cwd, options); + virtualModuleMappings[getStoriesEntryPath(cwd)] = storiesEntry; + + const configEntryPath = getStoriesConfigPath(cwd); + const previewAnnotations = [ + ...( + await presets.apply( + 'previewAnnotations', + [], + options, + ) + ).map(entry => { + // If entry is an object, use the absolute import specifier. + // This is to maintain back-compat with community addons that bundle other addons + // and package managers that "hide" sub dependencies (e.g. pnpm / yarn pnp) + // The vite builder uses the bare import specifier. + if (typeof entry === 'object') { + return entry.absolute; + } + return resolve(cwd, slash(entry)); + }), + loadPreviewOrConfigFile(options), + ].filter(Boolean); + virtualModuleMappings[configEntryPath] = handlebars( + await readTemplate( + require.resolve( + '@modern-js/storybook-builder/templates/virtualModuleModernEntry.js.handlebars', + ), + ), + { + storiesFilename: STORIES_FILENAME, + previewAnnotations, + }, + ).replace(/\\/g, '\\\\'); + + return virtualModule(cwd, virtualModuleMappings); +} + +async function createStoriesEntry(cwd: string, options: Options) { + const matchers: StoriesEntry[] = await options.presets.apply( + 'stories', + [], + options, + ); + const stories = ( + await Promise.all( + normalizeStories(matchers, { + configDir: options.configDir, + workingDir: options.configDir, + }).map(({ directory, files }) => { + const pattern = join(directory, files); + const absolutePattern = isAbsolute(pattern) + ? pattern + : join(options.configDir, pattern); + + return glob(slash(absolutePattern), { follow: true }); + }), + ) + ).reduce((carry, stories) => carry.concat(stories), []); + + return await toImportFn(cwd, stories); +} + +async function applyReact(config: AllBuilderConfig, options: Options) { + let version = '18.0.0'; + try { + // @ts-expect-error + ({ version } = await import('react-dom/package.json')); + } catch (_) {} + + const { legacyRootApi } = + (await options.presets.apply<{ legacyRootApi?: boolean } | null>( + 'frameworkOptions', + )) || {}; + + const isReact18 = version.startsWith('18') || version.startsWith('0.0.0'); + const useReact17 = legacyRootApi ?? !isReact18; + if (!useReact17) { + config.source ??= {}; + config.source.alias ??= {}; + // @ts-expect-error + config.source.alias['@storybook/react-dom-shim'] = + '@storybook/react-dom-shim/dist/react-18'; + } +} diff --git a/packages/storybook/builder/src/preset.ts b/packages/storybook/builder/src/preset.ts new file mode 100644 index 000000000000..5c4e7acfa62a --- /dev/null +++ b/packages/storybook/builder/src/preset.ts @@ -0,0 +1,39 @@ +import { join, resolve } from 'path'; +import type { Options } from '@storybook/types'; +import { getConfig } from './build'; +import { STORYBOOK_CONFIG_ENTRY } from './utils'; + +export const previewMainTemplate = () => { + return require.resolve('@modern-js/storybook-builder/templates/preview.ejs'); +}; + +function getStoriesConfigPath(cwd: string) { + return resolve(join(cwd, STORYBOOK_CONFIG_ENTRY)); +} + +export const entries = async (_: unknown, options: Options) => { + const result: string[] = []; + const { bundler } = await getConfig(options); + + if (options.configType === 'DEVELOPMENT') { + // Suppress informational messages when --quiet is specified. webpack-hot-middleware's quiet + // parameter would also suppress warnings. + result.push( + ...([ + `${require.resolve( + 'webpack-hot-middleware/client', + )}?reload=true&quiet=false&noInfo=${options.quiet}`, + + bundler === 'rspack' + ? require.resolve('@rspack/dev-client/react-refresh-entry') + : null, + ].filter(Boolean) as string[]), + ); + } + + result.push(getStoriesConfigPath(process.cwd())); + + return result; +}; + +export { decorators } from './addons/preset/preview'; diff --git a/packages/storybook/builder/src/presets.ts b/packages/storybook/builder/src/presets.ts deleted file mode 100644 index b14a9911e394..000000000000 --- a/packages/storybook/builder/src/presets.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Options } from '@storybook/types'; - -export async function modern(options: Options) { - -} diff --git a/packages/storybook/builder/src/provider.ts b/packages/storybook/builder/src/provider.ts deleted file mode 100644 index 949b2a8b1058..000000000000 --- a/packages/storybook/builder/src/provider.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { createBuilder } from '@modern-js/builder'; -import { - builderRspackProvider, - type BuilderConfig as RspackBuilderConfig, -} from '@modern-js/builder-rspack-provider'; -import { - builderWebpackProvider, - type BuilderConfig as WebpackBuilderConfig, -} from '@modern-js/builder-webpack-provider'; -import type { ProviderInstance } from '@modern-js/builder-shared'; -import { BundlerType } from './types'; - -type ReturnPromiseType any> = T extends ( - ...args: any -) => Promise - ? R - : any; - -type Compiler = ReturnPromiseType; - -export async function createCompiler( - bundler: BundlerType, - builderConfig: WebpackBuilderConfig | RspackBuilderConfig, -): Promise { - const builder = await createBuilder( - bundler === 'webpack' - ? builderWebpackProvider({ - builderConfig: builderConfig as WebpackBuilderConfig, - }) - : builderRspackProvider({ - builderConfig: builderConfig as RspackBuilderConfig, - }), - {}, - ); - - const compiler = await builder.createCompiler(); - return compiler; -} diff --git a/packages/storybook/builder/src/types.ts b/packages/storybook/builder/src/types.ts index 7738d5af0fa7..622947e31aae 100644 --- a/packages/storybook/builder/src/types.ts +++ b/packages/storybook/builder/src/types.ts @@ -1,5 +1,6 @@ import type { BuilderConfig as WebpackBuilderConfig } from '@modern-js/builder-webpack-provider'; import type { BuilderConfig as RspackBuilderConfig } from '@modern-js/builder-rspack-provider'; +import { BuilderPlugin } from '@modern-js/builder-shared'; export type BundlerType = 'webpack' | 'rspack'; @@ -8,6 +9,11 @@ export type { WebpackBuilderConfig, RspackBuilderConfig }; export type AllBuilderConfig = WebpackBuilderConfig | RspackBuilderConfig; export type FrameworkOptions = { - bundler: BundlerType; - builderConfig: AllBuilderConfig; + bundler?: BundlerType; + builderConfig?: AllBuilderConfig; + configPath?: string; +}; + +export type BuilderConfig = AllBuilderConfig & { + builderPlugins?: BuilderPlugin[]; }; diff --git a/packages/storybook/builder/src/utils.ts b/packages/storybook/builder/src/utils.ts new file mode 100644 index 000000000000..f8dde8011efd --- /dev/null +++ b/packages/storybook/builder/src/utils.ts @@ -0,0 +1,134 @@ +/* eslint-disable consistent-return */ +import path, { dirname, join } from 'path'; +import { createRequire } from 'node:module'; +import { fs, logger } from '@modern-js/utils'; +import { + AllBuilderConfig, + RspackBuilderConfig, + WebpackBuilderConfig, +} from './types'; + +export const VIRTUAL_MODULE_BASE = '.MODERN_STORYBOOK'; + +export const STORIES_FILENAME = 'storybook-stories.js'; +export const STORYBOOK_CONFIG_ENTRY = 'storybook-config-entry.js'; + +export const requireResolve = (importer: string, path: string) => { + const require = createRequire(importer); + require.resolve(path); +}; + +export async function getProvider( + bundler: 'webpack' | 'rspack', + builderConfig: AllBuilderConfig, +) { + try { + if (bundler === 'webpack') { + const { + default: { builderWebpackProvider }, + } = await import('@modern-js/builder-webpack-provider'); + return builderWebpackProvider({ + builderConfig: builderConfig as WebpackBuilderConfig, + }); + } else { + const { + default: { builderRspackProvider }, + } = await import('@modern-js/builder-rspack-provider'); + return builderRspackProvider({ + builderConfig: builderConfig as RspackBuilderConfig, + }); + } + } catch (e) { + logger.error( + `Cannot find provider, you need to install @modern-js/builder-${bundler}-provider first`, + ); + } +} + +// use this instead of virtualModuleWebpackPlugin for rspack compatibility +export async function virtualModule( + cwd: string, + virtualModuleMap: Record, +): Promise<{ + alias: Record; + writeVirtualModule: (p: string, content: string) => void; +}> { + const tempDir = path.join(cwd, 'node_modules', VIRTUAL_MODULE_BASE); + fs.ensureDirSync(tempDir); + const alias: Record = {}; + + await Promise.all( + Reflect.ownKeys(virtualModuleMap).map(k => { + const virtualPath = k as string; + const relativePath = path.relative(cwd, virtualPath); + const realPath = path.join(tempDir, relativePath); + alias[virtualPath] = realPath; + return fs.writeFile(realPath, virtualModuleMap[virtualPath]); + }), + ); + + return { + writeVirtualModule(virtualPath: string, content: string) { + const relativePath = path.relative(cwd, virtualPath); + const realPath = path.join(tempDir, relativePath); + fs.writeFileSync(realPath, content); + }, + alias, + }; +} + +export async function toImportFn(cwd: string, stories: string[]) { + const objectEntries = stories.map(file => { + const ext = path.extname(file); + const relativePath = path.relative(cwd, file); + if (!['.js', '.jsx', '.ts', '.tsx', '.mdx'].includes(ext)) { + logger.warn( + `Cannot process ${ext} file with storyStoreV7: ${relativePath}`, + ); + } + + return ` '${toImportPath(relativePath)}': async () => import('${file}')`; + }); + + return ` + const importers = { + ${objectEntries.join(',\n')} + }; + + export async function importFn(path) { + return importers[path](); + } + `; +} + +function toImportPath(relativePath: string) { + return relativePath.startsWith('../') ? relativePath : `./${relativePath}`; +} + +export function getAbsolutePath(input: I): I { + return dirname(require.resolve(join(input, 'package.json'))) as any; +} + +export function maybeGetAbsolutePath(input: I): I | false { + try { + return getAbsolutePath(input); + } catch (e) { + return false; + } +} + +export async function runWithErrorMsg( + op: () => Promise, + msg: string, +): Promise { + try { + return await op(); + } catch (e) { + logger.error(msg); + console.error(e); + } +} + +export function isDev() { + return process.env.NODE_ENV === 'development'; +} diff --git a/packages/storybook/builder/templates/preview.ejs b/packages/storybook/builder/templates/preview.ejs index 1010170cd5ea..2a38419379f7 100644 --- a/packages/storybook/builder/templates/preview.ejs +++ b/packages/storybook/builder/templates/preview.ejs @@ -1,57 +1,54 @@ + + + <%= htmlWebpackPlugin.options.title || 'Storybook'%> - - - Storybook - - <% if (htmlWebpackPlugin.files.favicon) { %> - - <% } %> + <% if (htmlWebpackPlugin.files.favicon) { %> + + <% } %> - + - - - - - + + + + + - <% if (typeof headHtmlSnippet !== 'undefined') { %> <%= headHtmlSnippet %> <% } %> <% + <% if (typeof headHtmlSnippet !== 'undefined') { %> <%= headHtmlSnippet %> <% } %> <% htmlWebpackPlugin.files.css.forEach(file => { %> - - <% }); %> - - - - - - <% if (typeof bodyHtmlSnippet !== 'undefined') { %> <%= bodyHtmlSnippet %> <% } %> - -
-
- - <% if (typeof globals !== 'undefined' && Object.keys(globals).length) { %> - - <% } %> - - - \ No newline at end of file + + + + <% if (typeof bodyHtmlSnippet !== 'undefined') { %> <%= bodyHtmlSnippet %> <% } %> + +
+
+ + <% if (typeof globals !== 'undefined' && Object.keys(globals).length) { %> + + <% } %> + + + diff --git a/packages/storybook/builder/templates/virtualModuleModernEntry.js.handlebars b/packages/storybook/builder/templates/virtualModuleModernEntry.js.handlebars index d7e578e55cc7..d27350d610c9 100644 --- a/packages/storybook/builder/templates/virtualModuleModernEntry.js.handlebars +++ b/packages/storybook/builder/templates/virtualModuleModernEntry.js.handlebars @@ -1,23 +1,21 @@ import { global } from '@storybook/global'; import { ClientApi, PreviewWeb, addons, composeConfigs } from '@storybook/preview-api'; -import { createChannel as createPostMessageChannel } from '@storybook/channel-postmessage'; -import { createChannel as createWebSocketChannel } from '@storybook/channel-websocket'; +import { createBrowserChannel } from '@storybook/channels'; import { importFn } from './{{storiesFilename}}'; -const { SERVER_CHANNEL_URL } = global; - const getProjectAnnotations = () => - composeConfigs([{{#each previewAnnotations}}require('{{this}}'),{{/each}}]); + composeConfigs([ + {{#each previewAnnotations}}require('{{this}}'), + {{/each}} + ]); -const channel = createPostMessageChannel({ page: 'preview' }); +const channel = createBrowserChannel({ page: 'preview' }); addons.setChannel(channel); -if (SERVER_CHANNEL_URL) { - const serverChannel = createWebSocketChannel({ url: SERVER_CHANNEL_URL, }); - addons.setServerChannel(serverChannel); - window.__STORYBOOK_SERVER_CHANNEL__ = serverChannel; +if (global.CONFIG_TYPE === 'DEVELOPMENT'){ + window.__STORYBOOK_SERVER_CHANNEL__ = channel; } const preview = new PreviewWeb(); @@ -29,13 +27,16 @@ window.__STORYBOOK_CLIENT_API__ = new ClientApi({ storyStore: preview.storyStore preview.initialize({ importFn, getProjectAnnotations }); -if (import.meta.hot) { - import.meta.hot.accept('./{{storiesFilename}}', () => { +if (import.meta.webpackHot) { + import.meta.webpackHot.accept('./{{storiesFilename}}', () => { // importFn has changed so we need to patch the new one in preview.onStoriesChanged({ importFn }); }); - import.meta.hot.accept([{{#each previewAnnotations}}'{{this}}',{{/each}}], () => { + import.meta.webpackHot.accept([ + {{#each previewAnnotations}}'{{this}}', + {{/each}} + ], () => { // getProjectAnnotations has changed so we need to patch the new one in preview.onGetProjectAnnotationsChanged({ getProjectAnnotations }); }); diff --git a/packages/storybook/builder/tsconfig.json b/packages/storybook/builder/tsconfig.json index bae394a0c2f0..58ea7a99157d 100644 --- a/packages/storybook/builder/tsconfig.json +++ b/packages/storybook/builder/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "@modern-js/tsconfig/base", "compilerOptions": { - "target": "ES2019", + "target": "ES2020", "declaration": true, "outDir": "dist", "isolatedModules": true, "noImplicitAny": true, "skipLibCheck": true, "sourceMap": true, + "moduleResolution": "NodeNext", + "module": "NodeNext", + "esModuleInterop": true }, "include": ["./src"], "exclude": ["./tests/fixtures"] diff --git a/packages/storybook/framework/.eslintrc.js b/packages/storybook/framework/.eslintrc.js new file mode 100644 index 000000000000..af86dba11337 --- /dev/null +++ b/packages/storybook/framework/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: ['@modern-js'], + ignorePatterns: ['compiled/', 'fixtures/**', 'tests/**', 'modern.config.ts'], + parserOptions: { + project: require.resolve('./tsconfig.json'), + }, +}; diff --git a/packages/storybook/framework/package.json b/packages/storybook/framework/package.json index 3c85f6fc70ab..1ec58d0810c2 100644 --- a/packages/storybook/framework/package.json +++ b/packages/storybook/framework/package.json @@ -12,7 +12,7 @@ "types": "./src/index.ts", "scripts": { "build": "tsc", - "dev": "tsc --watch", + "dev": "tsc --watch --incremental", "test": "vitest run" }, "exports": { @@ -36,9 +36,14 @@ "license": "MIT", "dependencies": { "@modern-js/builder-shared": "workspace:*", - "@modern-js/utils": "workspace:*" + "@modern-js/storybook-builder": "workspace:*", + "@modern-js/utils": "workspace:*", + "@storybook/react": "^7.4.0" + }, + "devDependencies": { + "@storybook/types": "^7.4.0", + "@types/node": "^20.5.6" }, - "devDependencies": {}, "publishConfig": { "registry": "https://registry.npmjs.org/", "access": "public", diff --git a/packages/storybook/framework/src/index.ts b/packages/storybook/framework/src/index.ts index e69de29bb2d1..9b174c9f58b1 100644 --- a/packages/storybook/framework/src/index.ts +++ b/packages/storybook/framework/src/index.ts @@ -0,0 +1 @@ +export * from './preset'; diff --git a/packages/storybook/framework/src/preset.ts b/packages/storybook/framework/src/preset.ts index 101e99cc2692..8e64f1c84bf6 100644 --- a/packages/storybook/framework/src/preset.ts +++ b/packages/storybook/framework/src/preset.ts @@ -1,12 +1,55 @@ -export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => { - const framework = await options.presets.apply('framework'); +import path from 'path'; +import type { Options } from '@storybook/types'; + +export const frameworkOptions = async (_: never, options: Options) => { + const config = await options.presets.apply('framework'); + + if (typeof config === 'string') { + return { + name: config, + options: {}, + }; + } + if (typeof config === 'undefined') { + return { + name: '@modern-js/storybook', + options: {}, + }; + } + + return { + name: config.name, + options: { + ...config.options, + }, + }; +}; + +export const modern = async (_options: Options) => { + return { + source: { + alias: { + '@storybook/react': absPath('@storybook/react'), + }, + }, + }; +}; + +export const core = async (config: any, options: any) => { + const framework = await options.presets.apply('framework'); return { ...config, builder: { - name: wrapForPnP('storybook-builder-rspack') as 'storybook-builder-rspack', - options: typeof framework === 'string' ? {} : framework.options.builder || {}, + name: absPath('@modern-js/storybook-builder'), + options: + typeof framework === 'string' ? {} : framework?.options?.builder || {}, }, - renderer: wrapForPnP('@storybook/react'), + // FIXME: renderer: absPath('@storybook/react'), + renderer: '@storybook/react', }; }; + +function absPath(pkg: string) { + return path.dirname(require.resolve(path.join(pkg, 'package.json'))); +} diff --git a/packages/storybook/framework/tsconfig.json b/packages/storybook/framework/tsconfig.json index bae394a0c2f0..58ea7a99157d 100644 --- a/packages/storybook/framework/tsconfig.json +++ b/packages/storybook/framework/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "@modern-js/tsconfig/base", "compilerOptions": { - "target": "ES2019", + "target": "ES2020", "declaration": true, "outDir": "dist", "isolatedModules": true, "noImplicitAny": true, "skipLibCheck": true, "sourceMap": true, + "moduleResolution": "NodeNext", + "module": "NodeNext", + "esModuleInterop": true }, "include": ["./src"], "exclude": ["./tests/fixtures"] diff --git a/packages/toolkit/utils/package.json b/packages/toolkit/utils/package.json index 4829cd0643e9..3f5006617230 100644 --- a/packages/toolkit/utils/package.json +++ b/packages/toolkit/utils/package.json @@ -24,6 +24,7 @@ "exports": { ".": { "jsnext:source": "./src/index.ts", + "types": "./dist/index.d.ts", "default": "./dist/cjs/index.js" }, "./logger": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ab9286159b8..9cc07625c0f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5082,6 +5082,143 @@ importers: specifier: ^5 version: 5.0.4 + packages/storybook/builder: + dependencies: + '@modern-js/builder': + specifier: workspace:* + version: link:../../builder/builder + '@modern-js/builder-shared': + specifier: workspace:* + version: link:../../builder/builder-shared + '@modern-js/core': + specifier: workspace:* + version: link:../../cli/core + '@modern-js/runtime': + specifier: workspace:* + version: link:../../runtime/plugin-runtime + '@modern-js/utils': + specifier: workspace:* + version: link:../../toolkit/utils + '@rspack/dev-client': + specifier: 0.2.12 + version: 0.2.12(react-refresh@0.14.0)(webpack-hot-middleware@2.25.4)(webpack@5.88.1) + '@storybook/addons': + specifier: ^6.3.7 + version: 6.5.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': + specifier: ^7.4.0 + version: 7.4.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': + specifier: ^7.4.0 + version: 7.4.0 + '@storybook/csf-plugin': + specifier: ^7.4.0 + version: 7.4.0 + '@storybook/docs-tools': + specifier: ^7.4.0 + version: 7.4.0 + '@storybook/global': + specifier: ^5.0.0 + version: 5.0.0 + '@storybook/manager-api': + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/mdx1-csf': + specifier: ^1.0.0 + version: 1.0.0(react@18.2.0) + '@storybook/mdx2-csf': + specifier: ^1.1.0 + version: 1.1.0 + '@storybook/preview': + specifier: ^7.4.0 + version: 7.4.0 + '@storybook/react-docgen-typescript-plugin': + specifier: ^1.0.1 + version: 1.0.1(typescript@5.0.4)(webpack@5.88.1) + '@storybook/router': + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@types/webpack-hot-middleware': + specifier: ^2.25.6 + version: 2.25.6(esbuild@0.18.20) + ast-types: + specifier: ^0.14.2 + version: 0.14.2 + babel-plugin-react-docgen: + specifier: ^4.2.1 + version: 4.2.1 + glob-promise: + specifier: ^6.0.3 + version: 6.0.5(glob@8.1.0) + react: + specifier: '*' + version: 18.2.0 + react-docgen: + specifier: 6.0.0-alpha.3 + version: 6.0.0-alpha.3 + remark-external-links: + specifier: ^9.0.1 + version: 9.0.1 + remark-slug: + specifier: ^7.0.1 + version: 7.0.1 + tinypool: + specifier: ^0.8.0 + version: 0.8.0 + webpack-dev-middleware: + specifier: 6.1.1 + version: 6.1.1(webpack@5.88.1) + webpack-hot-middleware: + specifier: ^2.25.4 + version: 2.25.4 + devDependencies: + '@modern-js/builder-rspack-provider': + specifier: workspace:* + version: link:../../builder/builder-rspack-provider + '@modern-js/builder-webpack-provider': + specifier: workspace:* + version: link:../../builder/builder-webpack-provider + '@scripts/build': + specifier: workspace:* + version: link:../../../scripts/build + '@storybook/types': + specifier: ^7.4.0 + version: 7.4.0 + '@types/babel__core': + specifier: ^7.20.1 + version: 7.20.1 + '@types/express': + specifier: ^4.17.13 + version: 4.17.13 + + packages/storybook/framework: + dependencies: + '@modern-js/builder-shared': + specifier: workspace:* + version: link:../../builder/builder-shared + '@modern-js/storybook-builder': + specifier: workspace:* + version: link:../builder + '@modern-js/utils': + specifier: workspace:* + version: link:../../toolkit/utils + '@storybook/react': + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4) + devDependencies: + '@storybook/types': + specifier: ^7.4.0 + version: 7.4.0 + '@types/node': + specifier: ^20.5.6 + version: 20.5.9 + packages/toolkit/compiler/babel: dependencies: '@babel/core': @@ -9150,7 +9287,6 @@ packages: /@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9): resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -10844,6 +10980,14 @@ packages: /@emotion/unitless@0.7.5: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: @@ -10882,6 +11026,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm@0.15.18: resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} @@ -10908,6 +11061,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -10925,6 +11087,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -10942,6 +11113,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -10959,6 +11139,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -10976,6 +11165,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -10993,6 +11191,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm64@0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -11010,6 +11217,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm@0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -11027,6 +11243,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -11044,6 +11269,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-loong64@0.15.18: resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -11070,6 +11304,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -11087,6 +11330,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -11104,6 +11356,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -11121,6 +11382,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -11138,6 +11408,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} @@ -11155,6 +11434,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -11172,6 +11460,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -11189,6 +11486,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -11206,6 +11512,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -11223,6 +11538,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -11240,6 +11564,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -11257,6 +11590,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.28.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -11301,6 +11643,34 @@ packages: resolution: {integrity: sha512-TlQiXt/vS5ZwY0V3salvlyQzIzMGZEyw9inmJA25A8heL2kBVENbToiEc64R6ETNf5YHa2lwnc2I7iNHP9SqeQ==} dev: false + /@floating-ui/core@1.4.1: + resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} + dependencies: + '@floating-ui/utils': 0.1.1 + dev: false + + /@floating-ui/dom@1.5.1: + resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} + dependencies: + '@floating-ui/core': 1.4.1 + '@floating-ui/utils': 0.1.1 + dev: false + + /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/utils@0.1.1: + resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} + dev: false + /@formatjs/ecma402-abstract@1.4.0: resolution: {integrity: sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==} dependencies: @@ -11517,6 +11887,18 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.0.1 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: false + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -12030,6 +12412,14 @@ packages: react: 17.0.2 dev: false + /@mdx-js/react@1.6.22(react@18.2.0): + resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} + peerDependencies: + react: ^16.13.1 || ^17.0.0 + dependencies: + react: 18.2.0 + dev: false + /@mdx-js/react@2.2.1(react@18.2.0): resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} peerDependencies: @@ -12747,6 +13137,13 @@ packages: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: false + optional: true + /@playwright/test@1.33.0: resolution: {integrity: sha512-YunBa2mE7Hq4CfPkGzQRK916a4tuZoVx/EpLjeWlTVOnD4S2+fdaQZE0LJkbfhN5FTSKNLdcl7MoT5XB37bTkg==} engines: {node: '>=14'} @@ -12796,7 +13193,7 @@ packages: webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) dev: false - /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack@5.88.1): + /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack-hot-middleware@2.25.4)(webpack@5.88.1): resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} peerDependencies: @@ -12832,37 +13229,637 @@ packages: react-refresh: 0.14.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) + webpack: 5.88.1(esbuild@0.18.20) + webpack-hot-middleware: 2.25.4 dev: false - /@polka/url@0.5.0: + /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack@5.88.1): + resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.26.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.3.3 + loader-utils: 2.0.4 + react-refresh: 0.14.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) + dev: false + + /@polka/url@0.5.0: resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} - /@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + /@polka/url@1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + + /@puppeteer/browsers@0.5.0(typescript@5.0.4): + resolution: {integrity: sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==} + engines: {node: '>=14.1.0'} + hasBin: true + peerDependencies: + typescript: '>= 4.7.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + debug: 4.3.4(supports-color@5.5.0) + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + progress: 2.0.3 + proxy-from-env: 1.1.0 + tar-fs: 2.1.1 + typescript: 5.0.4 + unbzip2-stream: 1.4.3 + yargs: 17.7.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@radix-ui/number@1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + dependencies: + '@babel/runtime': 7.22.15 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.22.15 + dev: false + + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-select@1.2.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.21)(react@18.2.0) + dev: false + + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false - /@puppeteer/browsers@0.5.0(typescript@5.0.4): - resolution: {integrity: sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==} - engines: {node: '>=14.1.0'} - hasBin: true + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: - typescript: '>= 4.7.4' + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - typescript: + '@types/react': optional: true dependencies: - debug: 4.3.4(supports-color@5.5.0) - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 - progress: 2.0.3 - proxy-from-env: 1.1.0 - tar-fs: 2.1.1 - typescript: 5.0.4 - unbzip2-stream: 1.4.3 - yargs: 17.7.1 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-previous@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) + '@types/react': 18.0.21 + react: 18.2.0 + dev: false + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.22.15 + dev: false /@rc-component/context@1.3.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-6QdaCJ7Wn5UZLJs15IEfqy4Ru3OaL5ctqpQYWd5rlfV9wwzrzdt6+kgAQZV/qdB0MUPN4nhyBfRembQCIvBf+w==} @@ -13198,6 +14195,26 @@ packages: - webpack-plugin-serve dev: false + /@rspack/dev-client@0.2.12(react-refresh@0.14.0)(webpack-hot-middleware@2.25.4)(webpack@5.88.1): + resolution: {integrity: sha512-EeovUu3iItItbSKcZH3eNoGvvFiqUfFEHg22jJQTGeV3I5sZWvgfQA7+JQq44HI50Rq1EI8R9rB5X1rXwrhv/w==} + peerDependencies: + react-refresh: '>=0.10.0 <1.0.0' + peerDependenciesMeta: + react-refresh: + optional: true + dependencies: + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.14.0)(webpack-hot-middleware@2.25.4)(webpack@5.88.1) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@types/webpack' + - sockjs-client + - type-fest + - webpack + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: false + /@rspack/dev-client@0.3.1(react-refresh@0.14.0)(webpack@5.88.1): resolution: {integrity: sha512-wKIiEpBkQVnJWpHz2VAa0aXHGabWZFBvJjAebMRXSML/0nlaFgF6+2LePoZLxDPT4ZKf4WameOiSO35LZxiyyg==} peerDependencies: @@ -13873,6 +14890,27 @@ packages: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.11 + /@storybook/addons@6.5.12(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y3cgxZq41YGnuIlBJEuJjSFdMsm8wnvlNOGUP9Q+Er2dgfx8rJz4Q22o4hPjpvpaj4XdBtxCJXI2NeFpN59+Cw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/api': 6.5.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/channels': 6.5.12 + '@storybook/client-logger': 6.5.12 + '@storybook/core-events': 6.5.12 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/router': 6.5.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.12(react-dom@18.2.0)(react@18.2.0) + '@types/webpack-env': 1.17.0 + core-js: 3.32.1 + global: 4.4.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + dev: false + /@storybook/api@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-DuUZmMlQxkFNU9Vgkp9aNfCkAongU76VVmygvCuSpMVDI9HQ2lG0ydL+ppL4XKoSMCCoXTY6+rg4hJANnH+1AQ==} peerDependencies: @@ -13894,10 +14932,54 @@ packages: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.11 - store2: 2.13.2 + store2: 2.14.2 + telejson: 6.0.8 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + + /@storybook/api@6.5.12(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DuUZmMlQxkFNU9Vgkp9aNfCkAongU76VVmygvCuSpMVDI9HQ2lG0ydL+ppL4XKoSMCCoXTY6+rg4hJANnH+1AQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/channels': 6.5.12 + '@storybook/client-logger': 6.5.12 + '@storybook/core-events': 6.5.12 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/router': 6.5.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.5.12(react-dom@18.2.0)(react@18.2.0) + core-js: 3.32.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + store2: 2.14.2 telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + dev: false + + /@storybook/api@7.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-L6CT3YCuUov9VHZUSA0euNuPB1Kczd2qVDgBzw8CFjQLei06ELoGCWFPS1X1HtY7d9BC+UjhU16uA4pjt833yw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false /@storybook/builder-webpack4@6.5.12(eslint@8.28.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4): resolution: {integrity: sha512-TsthT5jm9ZxQPNOZJbF5AV24me3i+jjYD7gbdKdSHrOVn1r3ydX4Z8aD6+BjLCtTn3T+e8NMvUkL4dInEo1x6g==} @@ -13957,7 +15039,7 @@ packages: webpack: 4.46.0 webpack-dev-middleware: 3.7.3(webpack@4.46.0) webpack-filter-warnings-plugin: 1.2.1(webpack@4.46.0) - webpack-hot-middleware: 2.25.2 + webpack-hot-middleware: 2.25.4 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - bluebird @@ -14059,6 +15141,16 @@ packages: ts-dedent: 2.2.0 util-deprecate: 1.0.2 + /@storybook/channels@7.4.0: + resolution: {integrity: sha512-/1CU0s3npFumzVHLGeubSyPs21O3jNqtSppOjSB9iDTyV2GtQrjh5ntVwebfKpCkUSitx3x7TkCb9dylpEZ8+w==} + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 + '@storybook/global': 5.0.0 + qs: 6.11.0 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + /@storybook/client-api@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-+JiRSgiU829KPc25nG/k0+Ao2nUelHUe8Y/9cRoKWbCAGzi4xd0JLhHAOr9Oi2szWx/OI1L08lxVv1+WTveAeA==} peerDependencies: @@ -14095,6 +15187,11 @@ packages: core-js: 3.32.1 global: 4.4.0 + /@storybook/client-logger@7.4.0: + resolution: {integrity: sha512-4pBnf7+df1wXEVcF1civqxbrtccGGHQkfWQkJo49s53RXvF7SRTcif6XTx0V3cQV0v7I1C5mmLm0LNlmjPRP1Q==} + dependencies: + '@storybook/global': 5.0.0 + /@storybook/components@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-NAAGl5PDXaHdVLd6hA+ttmLwH3zAVGXeUmEubzKZ9bJzb+duhFKxDa9blM4YEkI+palumvgAMm0UgS7ou680Ig==} peerDependencies: @@ -14113,6 +15210,29 @@ packages: util-deprecate: 1.0.2 dev: false + /@storybook/components@7.4.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GGnQrI4NXwri/PqNjhO1vNv4tC7RBjY87ce9WHBq1ueat3kBakdqV97NzScoldXarkkKK6grBqmhw9jE5PfzhQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@radix-ui/react-select': 1.2.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.4.0 + '@storybook/csf': 0.1.1 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: false + /@storybook/core-client@6.5.12(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4)(webpack@4.46.0): resolution: {integrity: sha512-jyAd0ud6zO+flpLv0lEHbbt1Bv9Ms225M6WTQLrfe7kN/7j1pVKZEoeVCLZwkJUtSKcNiWQxZbS15h31pcYwqg==} peerDependencies: @@ -14187,6 +15307,13 @@ packages: webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) dev: false + /@storybook/core-client@7.4.0: + resolution: {integrity: sha512-AhysJS2HnydB8Jc+BMVzK5VLHa1liJjxroNsd+ZTgGUhD7R8wvozrswQgY4MLFtcaLwN/wDWlK2YavSBqmc94Q==} + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 + dev: false + /@storybook/core-common@6.5.12(eslint@8.28.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4): resolution: {integrity: sha512-gG20+eYdIhwQNu6Xs805FLrOCWtkoc8Rt8gJiRt8yXzZh9EZkU4xgCRoCxrrJ03ys/gTiCFbBOfRi749uM3z4w==} peerDependencies: @@ -14241,21 +15368,51 @@ packages: picomatch: 2.3.0 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + resolve-from: 5.0.0 + slash: 3.0.0 + telejson: 6.0.8 + ts-dedent: 2.2.0 + typescript: 5.0.4 + util-deprecate: 1.0.2 + webpack: 4.46.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command + dev: false + + /@storybook/core-common@7.4.0: + resolution: {integrity: sha512-QKrBL46ZFdfTjlZE3f7b59Q5+frOHWIJ64sC9BZ2PHkZkGjFeYRDdJJ6EHLYBb+nToynl33dYN1GQz+hQn2vww==} + dependencies: + '@storybook/node-logger': 7.4.0 + '@storybook/types': 7.4.0 + '@types/find-cache-dir': 3.2.1 + '@types/node': 16.11.68 + '@types/node-fetch': 2.6.4 + '@types/pretty-hrtime': 1.0.1 + chalk: 4.1.2 + esbuild: 0.18.20 + esbuild-register: 3.4.2(esbuild@0.18.20) + file-system-cache: 2.3.0 + find-cache-dir: 3.3.2 + find-up: 5.0.0 + fs-extra: 11.1.1 + glob: 10.3.4 + handlebars: 4.7.7 + lazy-universal-dotenv: 4.0.0 + node-fetch: 2.6.7 + picomatch: 2.3.0 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 resolve-from: 5.0.0 - slash: 3.0.0 - telejson: 6.0.8 ts-dedent: 2.2.0 - typescript: 5.0.4 - util-deprecate: 1.0.2 - webpack: 4.46.0 transitivePeerDependencies: - - eslint + - encoding - supports-color - - vue-template-compiler - - webpack-cli - - webpack-command dev: false /@storybook/core-events@6.5.12: @@ -14263,6 +15420,11 @@ packages: dependencies: core-js: 3.32.1 + /@storybook/core-events@7.4.0: + resolution: {integrity: sha512-JavEo4dw7TQdF5pSKjk4RtqLgsG2R/eWRI8vZ3ANKa0ploGAnQR/eMTfSxf6TUH3ElBWLJhi+lvUCkKXPQD+dw==} + dependencies: + ts-dedent: 2.2.0 + /@storybook/core-server@6.5.12(@storybook/builder-webpack5@6.5.12)(@storybook/manager-webpack5@6.5.12)(eslint@8.28.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4): resolution: {integrity: sha512-q1b/XKwoLUcCoCQ+8ndPD5THkEwXZYJ9ROv16i2VGUjjjAuSqpEYBq5GMGQUgxlWp1bkxtdGL2Jz+6pZfvldzA==} peerDependencies: @@ -14380,6 +15542,15 @@ packages: - webpack-command dev: false + /@storybook/csf-plugin@7.4.0: + resolution: {integrity: sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==} + dependencies: + '@storybook/csf-tools': 7.4.0 + unplugin: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: false + /@storybook/csf-tools@6.5.12: resolution: {integrity: sha512-BPhnB1xJtBVOzXuCURzQRdXcstE27ht4qoTgQkbwUTy4MEtUZ/f1AnHSYRdzrgukXdUFWseNIK4RkNdJpfOfNQ==} peerDependencies: @@ -14406,11 +15577,33 @@ packages: - supports-color dev: false + /@storybook/csf-tools@7.4.0: + resolution: {integrity: sha512-bKyOmWPyvT50Neq2wCRr2PmVGLVVm6pOw8WL5t5jueD8sRRzo9QdfhEkqmuSyqdsBdt3SiJKL5oA6dqY5Vl9ww==} + dependencies: + '@babel/generator': 7.22.15 + '@babel/parser': 7.22.15 + '@babel/traverse': 7.22.15(supports-color@5.5.0) + '@babel/types': 7.22.15 + '@storybook/csf': 0.1.1 + '@storybook/types': 7.4.0 + fs-extra: 11.1.1 + recast: 0.23.4 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: false + /@storybook/csf@0.0.2--canary.4566f4d.1: resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==} dependencies: lodash: 4.17.21 + /@storybook/csf@0.1.1: + resolution: {integrity: sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==} + dependencies: + type-fest: 2.19.0 + dev: false + /@storybook/docs-tools@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-8brf8W89KVk95flVqW0sYEqkL+FBwb5W9CnwI+Ggd6r2cqXe9jyg+0vDZFdYp6kYNQKrPr4fbXGrGVXQG18/QQ==} dependencies: @@ -14427,6 +15620,48 @@ packages: - supports-color dev: false + /@storybook/docs-tools@7.4.0: + resolution: {integrity: sha512-DzXmt4JorAOePoS+sjQznf8jLPI9D5mdB1eSXjfvmGBQyyehKTZv5+TXuxYvT3iPN4rW4OPrIrQCSIrbULFdwA==} + dependencies: + '@storybook/core-common': 7.4.0 + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 + '@types/doctrine': 0.0.3 + doctrine: 3.0.0 + lodash: 4.17.21 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@storybook/global@5.0.0: + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + /@storybook/manager-api@7.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sBfkkt0eZGTozeKrbzMtWLEOQrgqdk24OUJlkc2IDaucR1CBNjoCMjNeYg7cLDw0rXE8W3W3AdWtJnfsUbLMAQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 + '@storybook/csf': 0.1.1 + '@storybook/global': 5.0.0 + '@storybook/router': 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.0 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + semver: 7.3.7 + store2: 2.14.2 + telejson: 7.2.0 + ts-dedent: 2.2.0 + dev: false + /@storybook/manager-webpack4@6.5.12(eslint@8.28.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4): resolution: {integrity: sha512-LH3e6qfvq2znEdxe2kaWtmdDPTnvSkufzoC9iwOgNvo3YrTGrYNyUTDegvW293TOTVfUn7j6TBcsOxIgRnt28g==} peerDependencies: @@ -14561,6 +15796,20 @@ packages: - supports-color dev: false + /@storybook/mdx1-csf@1.0.0(react@18.2.0): + resolution: {integrity: sha512-sZFncpLnsqLQPItRjL31UWuA8jTcsm05ab5nwG4sx9oodTekK4C1AUYY3R3Z1hbvPbGlY7hmuA8aM7Qye3u7TA==} + dependencies: + '@mdx-js/mdx': 1.6.22 + '@mdx-js/react': 1.6.22(react@18.2.0) + transitivePeerDependencies: + - react + - supports-color + dev: false + + /@storybook/mdx2-csf@1.1.0: + resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + dev: false + /@storybook/node-logger@6.5.12: resolution: {integrity: sha512-jdLtT3mX5GQKa+0LuX0q0sprKxtCGf6HdXlKZGD5FEuz4MgJUGaaiN0Hgi+U7Z4tVNOtSoIbYBYXHqfUgJrVZw==} dependencies: @@ -14571,12 +15820,35 @@ packages: pretty-hrtime: 1.0.3 dev: false + /@storybook/node-logger@7.4.0: + resolution: {integrity: sha512-tWSWkYyAvp6SxjIBaTklg29avzv/3Lv4c0dOG2o5tz79PyZkq9v6sQtwLLoI8EJA9Mo8Z08vaJp8NZyDQ9RCuA==} + dev: false + /@storybook/postinstall@6.5.12: resolution: {integrity: sha512-6K73f9c2UO+w4Wtyo2BxEpEsnhPvMgqHSaJ9Yt6Tc90LaDGUbcVgy6PNibsRyuJ/KQ543WeiRO5rSZfm2uJU9A==} dependencies: core-js: 3.32.1 dev: false + /@storybook/preview-api@7.4.0: + resolution: {integrity: sha512-ndXO0Nx+eE7ktVE4EqHpQZ0guX7yYBdruDdJ7B739C0+OoPWsJN7jAzUqq0NXaBcYrdaU5gTy+KnWJUt8R+OyA==} + dependencies: + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 + '@storybook/csf': 0.1.1 + '@storybook/global': 5.0.0 + '@storybook/types': 7.4.0 + '@types/qs': 6.9.7 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.0 + synchronous-promise: 2.0.15 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: false + /@storybook/preview-web@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Q5mduCJsY9zhmlsrhHvtOBA3Jt2n45bhfVkiUEqtj8fDit45/GW+eLoffv8GaVTGjV96/Y1JFwDZUwU6mEfgGQ==} peerDependencies: @@ -14603,6 +15875,29 @@ packages: util-deprecate: 1.0.2 dev: false + /@storybook/preview@7.4.0: + resolution: {integrity: sha512-R4LMTvUrVAbcUetRbAXpY3frkwD0eysqHrByiR73040+ngzDwtZOBAy0JfO3jw3WrWv2dn3kWlao5aEwVc9Exw==} + dev: false + + /@storybook/react-docgen-typescript-plugin@1.0.1(typescript@5.0.4)(webpack@5.88.1): + resolution: {integrity: sha512-dqbHa+5gaxaklFCuV1WTvljVPTo3QIJgpW4Ln+QeME7osPZUnUhjN2/djvo+sxrWUrTTuqX5jkn291aDngu9Tw==} + peerDependencies: + typescript: '>= 3.x' + webpack: '>= 4' + dependencies: + debug: 4.3.4(supports-color@5.5.0) + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.0.4 + micromatch: 4.0.5 + react-docgen-typescript: 2.2.2(typescript@5.0.4) + tslib: 2.3.1 + typescript: 5.0.4 + webpack: 5.88.1(esbuild@0.18.20) + transitivePeerDependencies: + - supports-color + dev: false + /@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.0.4)(webpack@5.88.1): resolution: {integrity: sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==} peerDependencies: @@ -14622,6 +15917,16 @@ packages: - supports-color dev: false + /@storybook/react-dom-shim@7.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@storybook/react@6.5.12(@babel/core@7.22.15)(@storybook/builder-webpack5@6.5.12)(@storybook/manager-webpack5@6.5.12)(esbuild@0.17.19)(eslint@8.28.0)(react-dom@17.0.2)(react@17.0.2)(require-from-string@2.0.2)(typescript@5.0.4): resolution: {integrity: sha512-1tG8EdSfp+OZAKAWPT2UrexF4o007jEMwQFFXw1atIQrQOADzSnZ7lTYJ08o5TyJwksswtr18tH3oJJ9sG3KPw==} engines: {node: '>=10.13.0'} @@ -14714,6 +16019,46 @@ packages: - webpack-plugin-serve dev: false + /@storybook/react@7.4.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4): + resolution: {integrity: sha512-QWsFw/twsNkcWI6brW06sugQQ5dV+fJm4IrEeI28cA4cBHK9G9HKOwCHoXDUWikzZx48XYMpNfs/WyIkuGmEqg==} + engines: {node: '>=16.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/core-client': 7.4.0 + '@storybook/docs-tools': 7.4.0 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.4.0 + '@storybook/react-dom-shim': 7.4.0(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.0 + '@types/escodegen': 0.0.6 + '@types/estree': 0.0.51 + '@types/node': 16.11.68 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + escodegen: 2.1.0 + html-tags: 3.2.0 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + ts-dedent: 2.2.0 + type-fest: 2.19.0 + typescript: 5.0.4 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@storybook/router@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-xHubde9YnBbpkDY5+zGO4Pr6VPxP8H9J2v4OTF3H82uaxCIKR0PKG0utS9pFKIsEiP3aM62Hb9qB8nU+v1nj3w==} peerDependencies: @@ -14728,6 +16073,34 @@ packages: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.11 + /@storybook/router@6.5.12(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xHubde9YnBbpkDY5+zGO4Pr6VPxP8H9J2v4OTF3H82uaxCIKR0PKG0utS9pFKIsEiP3aM62Hb9qB8nU+v1nj3w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 6.5.12 + core-js: 3.32.1 + memoizerific: 1.11.3 + qs: 6.11.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + dev: false + + /@storybook/router@7.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-IATdtFL5C3ryjNQSwaQfrmiOZiVFoVNMevMoBGDC++g0laSW40TGiNK6fUjUDBKuOgbuDt4Svfbl29k21GefEg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 7.4.0 + memoizerific: 1.11.3 + qs: 6.11.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@storybook/semver@7.3.2: resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==} engines: {node: '>=10'} @@ -14821,6 +16194,43 @@ packages: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.11 + /@storybook/theming@6.5.12(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uWOo84qMQ2R6c1C0faZ4Q0nY01uNaX7nXoJKieoiJ6ZqY9PSYxJl1kZLi3uPYnrxLZjzjVyXX8MgdxzbppYItA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 6.5.12 + core-js: 3.32.1 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + dev: false + + /@storybook/theming@7.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-eLjEf6G3cqlegfutF/iUrec9LrUjKDj7K4ZhGdACWrf7bQcODs99EK62e9/d8GNKr4b+QMSEuM6XNGaqdPnuzQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@storybook/client-logger': 7.4.0 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@storybook/types@7.4.0: + resolution: {integrity: sha512-XyzYkmeklywxvElPrIWLczi/PWtEdgTL6ToT3++FVxptsC2LZKS3Ue+sBcQ9xRZhkRemw4HQHwed5EW3dO8yUg==} + dependencies: + '@storybook/channels': 7.4.0 + '@types/babel__core': 7.20.1 + '@types/express': 4.17.13 + '@types/react': 18.0.21 + file-system-cache: 2.3.0 + /@storybook/ui@6.5.12(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-P7+ARI5NvaEYkrbIciT/UMgy3kxMt4WCtHMXss2T01UMCIWh1Ws4BJaDNqtQSpKuwjjS4eqZL3aQWhlUpYAUEg==} peerDependencies: @@ -15231,6 +16641,15 @@ packages: '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.5 + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + dependencies: + '@babel/parser': 7.22.15 + '@babel/types': 7.22.15 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.5 + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: @@ -15357,10 +16776,18 @@ packages: resolution: {integrity: sha512-UkfTYLA64vGUyR4ez8ybIC01wtilS/ydOqKL1fSHOvnX1sVm1sI5btr7Q+bqpdaPGD+QNhOgBXq1HGjO+99e1A==} dev: true + /@types/doctrine@0.0.3: + resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} + dev: false + /@types/ejs@3.1.2: resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==} dev: true + /@types/escodegen@0.0.6: + resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} + dev: false + /@types/eslint-scope@3.7.3: resolution: {integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==} dependencies: @@ -15419,6 +16846,10 @@ packages: '@types/node': 18.11.17 dev: true + /@types/find-cache-dir@3.2.1: + resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + dev: false + /@types/findup-sync@4.0.2: resolution: {integrity: sha512-MY2Acwvq6O+/rOMRtbV31phQOj1A+sbVWRbp47PvcZ5+VoofiSZHhj8ByATusuzJE+q/u+PA1SlkfPu3thhsjw==} dependencies: @@ -15461,7 +16892,6 @@ packages: dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.11.17 - dev: true /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} @@ -15679,7 +17109,6 @@ packages: /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -15703,6 +17132,13 @@ packages: '@types/node': 18.11.17 form-data: 3.0.1 + /@types/node-fetch@2.6.4: + resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} + dependencies: + '@types/node': 18.11.17 + form-data: 3.0.1 + dev: false + /@types/node-sass@4.11.3: resolution: {integrity: sha512-wXPCn3t9uu5rR4zXNSLasZHQMuRzUKBsdi4MsgT8uq4Lp1gQQo+T2G23tGj4SSgDHeNBle6vGseZtM2XV/X9bw==} dependencies: @@ -15725,6 +17161,10 @@ packages: /@types/node@18.11.17: resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} + /@types/node@20.5.9: + resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + dev: true + /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: false @@ -16006,6 +17446,19 @@ packages: /@types/webpack-env@1.17.0: resolution: {integrity: sha512-eHSaNYEyxRA5IAG0Ym/yCyf86niZUIF/TpWKofQI/CVfh5HsMEUyfE2kwFxha4ow0s5g0LfISQxpDKjbRDrizw==} + /@types/webpack-hot-middleware@2.25.6(esbuild@0.18.20): + resolution: {integrity: sha512-1Q9ClNvZR30HIsEAHYQL3bXJK1K7IsrqjGMTfIureFjphsGOZ3TkbeoCupbCmi26pSLjVTPHp+pFrJNpOkBSVg==} + dependencies: + '@types/connect': 3.4.35 + tapable: 2.2.1 + webpack: 5.88.1(esbuild@0.18.20) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: false + /@types/webpack-sources@3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: @@ -17085,7 +18538,6 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -17106,7 +18558,6 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true /ansi-to-html@0.6.15: resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} @@ -17350,6 +18801,13 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.3.1 + dev: false + /aria-query@5.0.0: resolution: {integrity: sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==} engines: {node: '>=6.0'} @@ -17521,6 +18979,13 @@ packages: tslib: 2.3.1 dev: false + /ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.3.1 + dev: false + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -17755,7 +19220,7 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.22.15 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.18.5 /babel-plugin-lodash@3.3.4: @@ -20463,6 +21928,11 @@ packages: is-obj: 2.0.0 dev: true + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: false + /dotenv-expand@5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} @@ -20514,7 +21984,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -20550,7 +22019,6 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} @@ -20938,6 +22406,17 @@ packages: dev: true optional: true + /esbuild-register@3.4.2(esbuild@0.18.20): + resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4(supports-color@5.5.0) + esbuild: 0.18.20 + transitivePeerDependencies: + - supports-color + dev: false + /esbuild-sunos-64@0.15.18: resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} @@ -21063,6 +22542,36 @@ packages: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: false + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -21102,6 +22611,18 @@ packages: optionalDependencies: source-map: 0.6.1 + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + /eslint-config-prettier@8.5.0(eslint@8.28.0): resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true @@ -21945,6 +23466,12 @@ packages: ramda: 0.28.0 dev: false + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} requiresBuild: true @@ -22200,6 +23727,14 @@ packages: signal-exit: 3.0.7 dev: false + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: false + /fork-ts-checker-webpack-plugin@4.1.6(eslint@8.28.0)(typescript@5.0.4)(webpack@4.46.0): resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} @@ -22581,6 +24116,11 @@ packages: has: 1.0.3 has-symbols: 1.0.3 + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -22687,6 +24227,16 @@ packages: glob: 7.2.0 dev: false + /glob-promise@6.0.5(glob@8.1.0): + resolution: {integrity: sha512-uUzvxo60yo/vMLXZHCNAlfdM5U5A07jCnUO8xTK44Z0Vc58poGDXhDx8ju1DmPdprOORh+4Lpog64hl+AJ5piA==} + engines: {node: '>=16'} + peerDependencies: + glob: ^8.0.3 + dependencies: + '@types/glob': 8.0.1 + glob: 8.1.0 + dev: false + /glob-to-regexp@0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} dev: false @@ -22694,6 +24244,18 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + /glob@10.3.4: + resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.3 + minimatch: 9.0.3 + minipass: 7.0.3 + path-scurry: 1.10.1 + dev: false + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: @@ -24338,6 +25900,15 @@ packages: iterate-iterator: 1.0.2 dev: false + /jackspeak@2.3.3: + resolution: {integrity: sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: false + /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} @@ -25395,6 +26966,15 @@ packages: dotenv-expand: 5.1.0 dev: false + /lazy-universal-dotenv@4.0.0: + resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} + engines: {node: '>=14.0.0'} + dependencies: + app-root-dir: 1.0.2 + dotenv: 16.3.1 + dotenv-expand: 10.0.0 + dev: false + /leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} @@ -25745,6 +27325,11 @@ packages: fault: 1.0.4 highlight.js: 10.7.3 + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: false + /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -26672,6 +28257,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -26718,6 +28310,11 @@ packages: resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} engines: {node: '>=8'} + /minipass@7.0.3: + resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + engines: {node: '>=16 || 14 >=14.17'} + dev: false + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -27801,6 +29398,14 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 7.0.3 + dev: false + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -29180,6 +30785,9 @@ packages: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: false + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -30684,6 +32292,25 @@ packages: - supports-color dev: false + /react-docgen@6.0.0-alpha.3: + resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@babel/core': 7.22.15 + '@babel/generator': 7.22.15 + ast-types: 0.14.2 + commander: 2.20.3 + doctrine: 3.0.0 + estree-to-babel: 3.2.1 + neo-async: 2.6.2 + node-dir: 0.1.17 + resolve: 1.22.4 + strip-indent: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: @@ -30716,6 +32343,19 @@ packages: react-is: 17.0.2 dev: false + /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.1.0 + dev: false + /react-fast-compare@3.2.0: resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==} @@ -30780,6 +32420,10 @@ packages: /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + /react-is@18.1.0: + resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + dev: false + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} @@ -30805,6 +32449,41 @@ packages: engines: {node: '>=0.10.0'} dev: false + /react-remove-scroll-bar@2.3.4(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.21 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.0.21)(react@18.2.0) + tslib: 2.3.1 + dev: false + + /react-remove-scroll@2.5.5(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.21 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.0.21)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.21)(react@18.2.0) + tslib: 2.3.1 + use-callback-ref: 1.3.0(@types/react@18.0.21)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.21)(react@18.2.0) + dev: false + /react-router-dom@5.3.4(react@18.2.0): resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} peerDependencies: @@ -30887,6 +32566,23 @@ packages: react: 18.2.0 dev: false + /react-style-singleton@2.2.1(@types/react@18.0.21)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.21 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.3.1 + dev: false + /react-syntax-highlighter@15.5.0(react@17.0.2): resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} peerDependencies: @@ -31070,6 +32766,17 @@ packages: dependencies: picomatch: 2.3.0 + /recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + engines: {node: '>= 4'} + dependencies: + assert: 2.0.0 + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.3.1 + dev: false + /rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} @@ -31251,6 +32958,19 @@ packages: unist-util-visit: 2.0.3 dev: false + /remark-external-links@9.0.1: + resolution: {integrity: sha512-EYw+p8Zqy5oT5+W8iSKzInfRLY+zeKWHCf0ut+Q5SwnaSIDGXd2zzvp4SWqyAuVbinNmZ0zjMrDKaExWZnTYqQ==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + extend: 3.0.2 + is-absolute-url: 4.0.1 + mdast-util-definitions: 5.1.1 + space-separated-tokens: 2.0.2 + unified: 10.1.2 + unist-util-visit: 4.1.1 + dev: false + /remark-footnotes@2.0.0: resolution: {integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==} dev: false @@ -31343,6 +33063,17 @@ packages: unist-util-visit: 2.0.3 dev: false + /remark-slug@7.0.1: + resolution: {integrity: sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + github-slugger: 1.4.0 + mdast-util-to-string: 3.1.0 + unified: 10.1.2 + unist-util-visit: 4.1.1 + dev: false + /remark-squeeze-paragraphs@4.0.0: resolution: {integrity: sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==} dependencies: @@ -32074,6 +33805,11 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: false + /signale@1.4.0: resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} engines: {node: '>=6'} @@ -32438,6 +34174,10 @@ packages: /store2@2.13.2: resolution: {integrity: sha512-CMtO2Uneg3SAz/d6fZ/6qbqqQHi2ynq6/KzMD/26gTkiEShCcpqFfTHgOxsE0egAq6SX3FmN4CeSqn8BzXQkJg==} + dev: false + + /store2@2.14.2: + resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} /stream-browserify@2.0.2: resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} @@ -32579,7 +34319,6 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 - dev: true /string.prototype.matchall@4.0.7: resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} @@ -32675,7 +34414,6 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} @@ -33150,6 +34888,11 @@ packages: lodash: 4.17.21 memoizerific: 1.11.3 + /telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + dependencies: + memoizerific: 1.11.3 + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -33243,6 +34986,31 @@ packages: terser: 5.19.2 webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) + /terser-webpack-plugin@5.3.9(esbuild@0.18.20)(webpack@5.88.1): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + esbuild: 0.18.20 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.19.2 + webpack: 5.88.1(esbuild@0.18.20) + dev: false + /terser@4.8.0: resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==} engines: {node: '>=6.0.0'} @@ -33336,6 +35104,9 @@ packages: resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==} dev: false + /tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: false @@ -33358,6 +35129,11 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.8.0: + resolution: {integrity: sha512-BkMhpw8M8y9+XBOEP57Wzbw/8IoJYtL1OvFjX+88IvwzAqVhwEV2TID0lZ1l4b5dPhjzSFQrhWdD2CLWt+oXRw==} + engines: {node: '>=14.0.0'} + dev: false + /tinyspy@2.1.1: resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} engines: {node: '>=14.0.0'} @@ -33491,6 +35267,7 @@ packages: /trim@0.0.1: resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + deprecated: Use String.prototype.trim() instead dev: false /trough@1.0.5: @@ -33934,6 +35711,11 @@ packages: engines: {node: '>=12.20'} dev: true + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: false + /type-fest@4.1.0: resolution: {integrity: sha512-VJGJVepayd8OWavP+rgXt4i3bfLk+tSomTV7r4mca2XD/oTCWnkJlNkpXavkxdmtU2aKdAmFGeHvoQutOVHCZg==} engines: {node: '>=16'} @@ -34231,6 +36013,15 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + /unplugin@1.4.0: + resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} + dependencies: + acorn: 8.10.0 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: false + /unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} @@ -34345,6 +36136,17 @@ packages: react: 18.2.0 tslib: 2.3.1 + /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} + peerDependencies: + react: 16.8.0 - 18 + react-dom: 16.8.0 - 18 + dependencies: + '@juggle/resize-observer': 3.3.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /use-sidecar@1.1.2(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -34975,6 +36777,23 @@ packages: webpack: 5.88.1(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true + /webpack-dev-middleware@6.1.1(webpack@5.88.1): + resolution: {integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + dependencies: + colorette: 2.0.19 + memfs: 3.5.1 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.88.1(esbuild@0.18.20) + dev: false + /webpack-filter-warnings-plugin@1.2.1(webpack@4.46.0): resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} @@ -34992,6 +36811,14 @@ packages: strip-ansi: 6.0.1 dev: false + /webpack-hot-middleware@2.25.4: + resolution: {integrity: sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==} + dependencies: + ansi-html-community: 0.0.8 + html-entities: 2.3.3 + strip-ansi: 6.0.1 + dev: false + /webpack-log@2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} @@ -35062,6 +36889,10 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: false + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: false + /webpack@4.46.0: resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==} engines: {node: '>=6.11.5'} @@ -35182,6 +37013,46 @@ packages: - esbuild - uglify-js + /webpack@5.88.1(esbuild@0.18.20): + resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.3 + '@types/estree': 1.0.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.20.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.2.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(esbuild@0.18.20)(webpack@5.88.1) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + /websocket@1.0.34: resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} @@ -35420,6 +37291,15 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.0.1 + dev: false + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}